PHP file_get_contents не получает весь контент

У меня странная проблема с функцией file_get_contents в PHP, в настоящее время я создаю приложение, которое читает файлы.md. Я создал команду, которая собирает файлы.md в один HTML-файл, который работает отлично. Он помещает все HTML в нужные файлы.

Но если вы пишете файл.md, то сложно создать HTML, чтобы увидеть, как он выглядит после каждого редактирования. Поэтому я создал php-скрипт, к которому может обращаться браузер, и он будет выполнять те же действия, что и команда, но вместо помещения html-содержимого в файлы он будет отображаться на вашем экране. Но если вы вызываете этот скрипт, он не читает весь файл и обрезает последнюю часть HTML...

Файл.md

### Test Readme for Category One

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam porttitor felis enim, molestie tincidunt erat feugiat a. 
Donec quis odio quis quam blandit convallis. Aenean eu lacus risus. Nulla congue non dui eu convallis. 

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer ac ante laoreet, placerat diam in, 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam porttitor felis enim, molestie tincidunt erat feugiat a. 

Donec quis odio quis quam blandit convallis. Aenean eu lacus risus. Nulla congue non dui eu convallis. 
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer ac ante laoreet, placerat diam in, 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam porttitor felis enim, molestie tincidunt erat feugiat a.

Donec quis odio quis quam blandit convallis. Aenean eu lacus risus. Nulla congue non dui eu convallis.                                                                                                                                  
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer ac ante laoreet, placerat diam in, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam porttitor felis enim, molestie tincidunt erat feugiat a. 
Donec quis odio quis quam blandit convallis. Aenean eu lacus risus. Nulla congue non dui eu convallis. 

Выход

<h3>Test Readme for Category One</h3>

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam porttitor felis enim, molestie tincidunt erat feugiat a. 
Donec quis odio quis quam blandit convallis. Aenean eu lacus risus. Nulla congue non dui eu convallis.</p>

<p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer ac ante laoreet, placerat diam in, 
Lorem ipsum dolor sit amet, consecte

Как вы можете видеть, он вырезает часть файла MD. Я использую эту библиотеку для преобразования содержимого MD в HTML https://github.com/erusev/parsedown-extra

У кого-нибудь есть мысли, что бы это могло быть?

Спасибо!

=== РЕДАКТИРОВАТЬ ===

Я отладил его с помощью этого файла: https://raw.githubusercontent.com/SeBuDesign/Write-Down/08be2a10281d99768f1d73ad7916b0bbc37903ea/docs/00_Category_One/00_Read_Me.md

Сохраните содержимое этого файла в локальном файле и выполните file_get_contents этого локального файла. Это первый файл, который он обрабатывает, следующий за ним результат:

### Test Readme Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam porttitor felis enim, molestie tincidunt erat feugiat a. Donec quis odio quis quam blandit convallis. Aenean eu lacus risus. Nulla congue non dui eu convallis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer ac ante laoreet, placerat diam in, hendrerit augue. Mauris pharetra, dui sed facilisis condimentum, ex lorem lobortis ante, ut ultrices nibh felis sit amet nibh. Pellentesque eget interdum nibh. Aenean interdum felis at tellus bibendum aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus velit augue, interdum id metus id, iaculis porttitor purus.

Для людей, которые хотят видеть функцию, которая получает контент:

/**
     * Parses the md files of the given path
     *
     * @return string
     */
    public function parseItems()
    {
        $iterate = $this->getRecursiveIterator();

        $html = "";
        foreach ($iterate as $fullPath => $fileInfo) {
            /** @var $fileInfo SplFileInfo */

            // Check if it's a directory or a .md file
            if ($fileInfo->getExtension() == 'md') {

                $fileName = StringHelper::removeMdExtension(StringHelper::removeOrderChars($fileInfo->getFilename()));

                $id = "";
                for ($depth = $iterate->getDepth() - 1; $depth >= 0; $depth--) {
                    $id .= StringHelper::removeOrderChars($iterate->getSubIterator($depth)->current()->getFilename())."/";
                }
                $id .= $fileName;

                $headerName = str_replace("_", " ", $fileName);
                $html .= "<h1 id='{$id}'>{$headerName}</h1>";

                $mdContent = file_get_contents($fileInfo->getRealPath());
                print_r($mdContent);die();
                $parseDown = new ParsedownExtra();
                $html .= $parseDown->text($mdContent);
            }
        }

        return $html;
}

3 ответа

Решение

Я поместил код на свой работающий сервер, а не на локальную машину разработчика, и он работает как чудо на моей работающей машине... Я сравнил 2 PHP.ini, и ничего особенного не указывает на то, что что-то неправильно настроено... Так что я я собираюсь переустановить мою машину разработчика, я думаю:)

Спасибо за помощь!

Отладьте ваш скрипт. Прежде всего, напечатайте простой текст после использования file_get_contents. Если есть весь текст, то мы можем подумать о проблеме парсера. Следующим шагом воспользуйтесь парсером и распечатайте контент. Класс отладчика парсера.

Это может быть проблемой тайм-аута. Скрипты PHP, которые запускаются более 30 секунд через сервер, прекращаются.

Если это так, отредактируйте файл /etc.php.ini, найдите "max_execution_time" и установите для него что-то более длинное.

Другие вопросы по тегам