PHP中的foreach数量有限吗?

时间:2013-03-31 09:59:53

标签: php foreach limit

我不知道是不是。我有一个包含这样内容的PHP文件:

$x = explode("\n", $y); // Making $x has length 65000
foreach ($x as $k) {
    //Some code here
}

经常我的脚本在~25000循环后自动停止。 为什么?它是PHP默认配置吗?

3 个答案:

答案 0 :(得分:3)

此行为可能是由于2个原因

  1. 脚本执行时间多于分配给它...尝试在php.ini中增加max_execution_time

  2. 脚本的内存限制可能超过分配。为此尝试更改的值 php.ini中的memory_limit

答案 1 :(得分:1)

PHP的默认内存限制是8MB(我的意思是标准发行版,不是源代码的默认PHP编译,因为这是无限的)。

当我执行此代码时:

$x = array();

for ($i = 0; $i < 65000; $i++) {
    $x[$i] = $i;
}


echo (memory_get_peak_usage()/1024).'<br />';
echo (memory_get_usage()/1024).'<br />';
echo count($x);

输出:

9421.9375
9415.875
65000

为了测试这个,我增加了我的记忆限制。但如果你不能分配更多的内存,它会因错误而中止;

for ($i = 0; $i < 1e6; $i++) { // 1 Million
    $x[$i] = $i;
}

报告回来;

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 32 bytes) in /Applications/MAMP/htdocs/run_app.php on line 5

供个人使用(我有16GB RAM,所以没问题)我使用这些起始码:

// Settings
ini_set('error_reporting', E_ALL); // Shows all feedback from the parser for debugging
ini_set('max_execution_time', 0); // Changes the 30 seconds parser exit to infinite
ini_set('memory_limit', '2048M'); // Sets the memory that may be used to 512MegaBytes

这样您可以按照自己的方式增加限制。除非您有专用的服务器,否则这不适用于在线主机。如果你不知道你在做什么,这是非常危险的。如果开始缺少RAM /资源,无限循环将使您的浏览器甚至操作系统崩溃。

答案 2 :(得分:0)

在foreach循环中,将数组作为参考传递。在PHP中,foreach在开始循环之前创建数组的副本。因此,如果你有一个100K的数组,那么foreach将至少分配另外100K进行处理。通过将其作为参考传递,您只关心地址的大小。