【问题标题】:PHP 5.3 Windows Array assignment causes faultPHP 5.3 Windows 数组赋值导致错误
【发布时间】: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,但是您的环境有多少可用内存?

标签: php arrays fault


【解决方案1】:

我不确定你所说的故障是什么意思。但如果这意味着它使脚本终止,我建议启用错误日志并查看最终错误消息的内容。在任何情况下,它都可能是 PHP 错误,因此始终建议您将其报告给 http://bugs.php.net/,因为这是 PHP 开发人员查看最终错误的正确位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2019-02-10
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多