【发布时间】:2011-02-19 10:04:43
【问题描述】:
在执行以下代码块时,我很难理解为什么 PHP 在没有反馈或错误的情况下出现错误(除了 windows 错误日志,php5 错误模块 php 中的错误):
$projects = array();
$pqRes = $connection->getResult("SELECT big query");
//build an array by project id
while($record = sqlsrv_fetch_array($pqRes))
{
if(! array_key_exists($record['ProjectID'],$projects))
{
$projects[$record['ProjectID']] = array();
}
$projects[$record['ProjectID']][] = $record; //this line faults php after about 9100 records
}
无论是从sql资源中拉取对象还是数组,结果都是一样的,违规行是数组赋值。
在大约 9100 条记录之后,分配导致 php 出现错误。
如果这个循环被计算在内,所以执行终止受到控制,我可以看到 php 消耗了大约 25mb 的内存,根据它的配置,它允许 256。
故障记录并不总是相同的,它可以变化 3 或 4 个索引。
该代码实际上毫无意义,但以一种循环方式将相同productID的记录分组,但我很想知道它可以做什么可能导致php突然死亡。
感谢您的宝贵时间。
【问题讨论】:
-
您测量了处理所需的时间吗?可能是时间限制问题
-
它在大约 64 秒后死亡,而 php.ini 和 fastcgi 目前允许 8 分钟的执行时间。
-
这不是物理内存限制吗?我知道您已将 PHP 内存限制设置为 256mb,但是您的环境有多少可用内存?