【发布时间】:2017-11-28 02:27:14
【问题描述】:
在正确的配置、一个非常简单的过程和足够的内存的情况下,PHP 是否对循环中的迭代次数有上限,或者它会继续执行直到您耗尽内存、达到最大执行时间或出错以其他方式?
如果是这样,不同类型的循环是否有所不同? while, do...while, for, foreach?
例如:
<?php
for ($i=0; $i<999999999999999999; $i++) {
echo "$i<br/>";
};
我意识到这有点荒谬,但这主要是我对 PHP 限制的好奇。我在 SO 上讨论的文档或这个特定问题中找不到任何内容。
我确实在本地开发环境中运行了这个脚本,该环境运行 PHP 7.1 内置服务器,运行频率为 3.1GHz 英特尔酷睿 i7 MacBook Pro,内存为 16GB,max_execution_time 为零。在大约 720,000 之后,浏览器本身将达到它自己的限制并冻结。我确实通过 CLI 运行了同样的测试,虽然它花了很长时间,但它确实执行并运行了,但我最终手动停止了它。
【问题讨论】:
-
你有几件事涉及 - 最大缓冲区大小(你的回声),最大 int 大小(你可以做
while(true)不关心那个)...... -
代码中的限制是
999999999999999999,尽管while(true)可以永远迭代。 -
循环不使用任何内存;您遇到的限制位于 Web 服务器/网络/浏览器堆栈的其他位置。
-
将浏览器排除在外。运行脚本服务器端,结束了吗?
-
@chris85 现在运行它,它运行得很好,没有尽头,尽管我正在给我的粉丝一个很好的锻炼。