PHP file_get_contents 未获取所有内容
PHP file_get_contents not getting all content
我在使用 PHP 的 file_get_contents 函数时遇到一个奇怪的问题,我目前正在创建一个读取 .md 文件的应用程序。我创建了一个命令,它在一个完美运行的 html 文件中构建 .md 文件。它将所有 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
有没有人想到它可能是什么?
谢谢!
=== 编辑 ===
将该文件的内容存储在本地文件中并对该本地文件执行 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;
}
这可能是超时问题。 PHP 通过服务器 运行 超过 30 秒的脚本被终止。
如果是这种情况,请编辑 /etc.php.ini ,查找 "max_execution_time" 并将其设置为更长的时间。
调试脚本。首先,使用file_get_contents后打印纯文本。如果都是文本,那么我们可以考虑解析器问题。下一步,使用解析器并打印内容。调试解析器 class.
我将代码放在我的实时服务器上,而不是我的本地开发机器上,它在我的实时机器上运行起来就像一个魅力...我比较了 2 PHP.ini,没有什么特别之处是不是配置有误...所以我想我要重新安装我的开发机器:)
感谢您的帮助!
我在使用 PHP 的 file_get_contents 函数时遇到一个奇怪的问题,我目前正在创建一个读取 .md 文件的应用程序。我创建了一个命令,它在一个完美运行的 html 文件中构建 .md 文件。它将所有 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
有没有人想到它可能是什么?
谢谢!
=== 编辑 ===
将该文件的内容存储在本地文件中并对该本地文件执行 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;
}
这可能是超时问题。 PHP 通过服务器 运行 超过 30 秒的脚本被终止。
如果是这种情况,请编辑 /etc.php.ini ,查找 "max_execution_time" 并将其设置为更长的时间。
调试脚本。首先,使用file_get_contents后打印纯文本。如果都是文本,那么我们可以考虑解析器问题。下一步,使用解析器并打印内容。调试解析器 class.
我将代码放在我的实时服务器上,而不是我的本地开发机器上,它在我的实时机器上运行起来就像一个魅力...我比较了 2 PHP.ini,没有什么特别之处是不是配置有误...所以我想我要重新安装我的开发机器:)
感谢您的帮助!