给定正确的配置,一个非常简单的进程和足够的内存,PHP对循环中的迭代次数有上限,或者只是继续执行,直到你耗尽内存,达到最大执行时间或出现故障用其他方式?
如果是这样,各种类型的循环是否不同?虽然,为...做,为了,foreach?
例如:
<?php
for ($i=0; $i<999999999999999999; $i++) {
echo "$i<br/>";
};
我意识到这有点荒谬,但它主要是我对PHP限制的好奇心。我无法在文档或此处讨论的具体问题中找到任何内容。
我确实在运行PHP 7.1内置服务器的本地开发环境中运行此脚本,该环境运行在3.1GHz Intel Core i7 MacBook Pro上,内存为16GB,max_execution_time
为零。在大约720,000之后,浏览器本身会达到它自己的限制并冻结。我确实通过CLI运行了同样的测试,虽然花了很长时间,它确实执行并运行但我最终手动停止了它。
答案 0 :(得分:5)
TL;博士
PHP很乐意循环,假设它有足够的资源,并且该过程不会被操作系统,Apache,用户等终止......
您对PHP的浏览器问题感到困惑。浏览器无法处理这么多echo "$i<br/>";
的渲染,因此崩溃或冻结或其他任何东西。通过在将输出缓冲区发送到浏览器之前将许多$i
放入输出缓冲区,PHP也可能耗尽内存。
尝试正确对代码进行基准测试,您将很快得到答案:
// Let's set the start timer
$start = microtime(true);
// Add or remove 9's as you please
for($i=0; $i<999999999999999999; ++$i){}
// How many seconds did this take to complete?
echo (microtime(true) - $start).' seconds<br/>';
// What was the peak memory usage during this code execution?
echo memory_get_peak_usage(true).' bytes used';
假设Apache / PHP /您的浏览器没有超时,那么您应该看到结果;如果没有,那就去命令行。