PHP意外终止脚本

PHP意外终止脚本,php,Php,我正在使用PHP创建一个包含大量PHP驱动元素的系统,我注意到我的一些页面停止显示使用echo命令生成的文本 我举了一个小例子。当然,我的程序不应该只打印从1到10000的所有T数字,但是这个示例演示了脚本如何在没有任何警告的情况下终止 示例代码: <?php for ($i = 1; $i <= 10000; $i++) { echo $i, '<br>'; } ?> 输出: 1 2 更多数字… 8975 8976 8977

我正在使用PHP创建一个包含大量PHP驱动元素的系统,我注意到我的一些页面停止显示使用
echo
命令生成的文本

我举了一个小例子。当然,我的程序不应该只打印从1到10000的所有T数字,但是这个示例演示了脚本如何在没有任何警告的情况下终止

示例代码:

<?php
    for ($i = 1; $i <= 10000; $i++) {
        echo $i, '<br>';
    }
?>

输出:

1
2
更多数字…
8975
8976
8977
八,


这是什么原因造成的?这是一个缓冲区问题,我如何解决它?

您的代码在cli上运行到完成这一事实向我表明,您的脚本超出了运行时配置

请注意,在链接的文档中,cli上此配置的值为
0
,这意味着它在该环境中运行时不会超时

浏览器中的默认设置为
30

您可以使用以下选项在浏览器中显示当前设置:

echo ini_get('max_execution_time');
您应该能够通过以下方式增加它:

ini_set('max_execution_time', 0); // turns off timeout

您的代码在cli上运行到完成这一事实向我表明,您的脚本超出了运行时配置

请注意,在链接的文档中,cli上此配置的值为
0
,这意味着它在该环境中运行时不会超时

浏览器中的默认设置为
30

您可以使用以下选项在浏览器中显示当前设置:

echo ini_get('max_execution_time');
您应该能够通过以下方式增加它:

ini_set('max_execution_time', 0); // turns off timeout

如果您向我们展示的脚本的行为与您描述的脚本相同,则会出现一些非常错误的情况。如果这是一个基于Unix或Linux的系统,并且它反复显示这种行为,那么内核将终止脚本-除非它被配置为不这样做,否则内核将强制进程的核心转储

要么去构建一个新系统来运行代码,要么去谷歌搜索如何捕获和诊断操作系统上的核心转储

更新


如果xdebug报告进程仍在运行,那么它可能没有转储其核心,但“没有生成输出”!=“不跑”。进程处于什么状态?重定向输出时会发生什么情况?当端到端输出通道出现错误时,它是什么?

如果您向我们展示的脚本的行为与您描述的一样,则会出现一些非常错误的情况。如果这是一个基于Unix或Linux的系统,并且它反复显示这种行为,那么内核将终止脚本-除非它被配置为不这样做,否则内核将强制进程的核心转储

要么去构建一个新系统来运行代码,要么去谷歌搜索如何捕获和诊断操作系统上的核心转储

更新



如果xdebug报告进程仍在运行,那么它可能没有转储其核心,但“没有生成输出”!=“不跑”。进程处于什么状态?重定向输出时会发生什么情况?当端到端输出通道出现错误时,它是什么?

问题不直接在于我的PHP安装或应用程序本身,而在于我的IDE PHPStorm中的某个地方。在IDE的包装器之外使用相同的PHP解释器运行代码时,一切正常。这里的许多用户描述的过程有助于实现这一点。谢谢。

问题不直接在于我的PHP安装或应用程序本身,而在于我的IDE PHPStorm中的某个地方。在IDE的包装器之外使用相同的PHP解释器运行代码时,一切正常。这里的许多用户描述的过程有助于实现这一点。谢谢。

它总是以完全相同的数字结尾吗?需要多长时间?这闻起来像是超时-代码本身没有任何问题。你能提供一些关于你正在做什么的更多信息吗?运行“time php-f your_script.php”并检查输出。如果执行时间是一个整数,比如30秒,很可能是超时。您没有给出任何超时指示。设置时间限制设置时间限制(秒)有什么区别吗?@Paul这实际上是完全正确的。看看签名的参数,它实际上接受可变数量的表达式作为参数;e、 g:
echo'foo'、'bar'、'baz'它总是以完全相同的数字结束吗?需要多长时间?这闻起来像是超时-代码本身没有任何问题。你能提供一些关于你正在做什么的更多信息吗?运行“time php-f your_script.php”并检查输出。如果执行时间是一个整数,比如30秒,很可能是超时。您没有给出任何超时指示。设置时间限制设置时间限制(秒)有什么区别吗?@Paul这实际上是完全正确的。看看签名的参数,它实际上接受可变数量的表达式作为参数;e、 g:
echo'foo'、'bar'、'baz'执行时间现在接近30秒,最多大约1到3秒,但我会试试。很有趣。。。真的很短。如果它是那么低,那么它可能是另一个问题;基于内存的东西。无论如何,最好确定
max\u execution\u time
是什么。
max\u execution\u time
是30,但我现在将它设置为永远运行。它工作了吗?如果这样做有效,并且您有后续的
内存限制
问题,那么至少如果您启用了相应的
错误报告
设置,您应该会看到一个致命错误。遗憾的是,它在@Darragh不起作用,我设置了
错误报告
以显示所有错误。甚至日志文件都不包含任何内容。执行时间现在接近30秒,最多大约1到3秒,但我会尝试一下。很有趣。。。真的很短。如果是