PHP可以循环最大迭代次数吗?

时间:2017-11-27 13:45:37

标签: php loops

给定正确的配置,一个非常简单的进程和足够的内存,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运行了同样的测试,虽然花了很长时间,它确实执行并运行但我最终手动停止了它。

1 个答案:

答案 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 /您的浏览器没有超时,那么您应该看到结果;如果没有,那就去命令行。

相关问题