php - Apache 在 PHP 关联数组的大型 foreach 循环中崩溃

标签 php crash foreach associative-array phpexcel

编辑:为了回应 Robus 的回答,我尝试从命令行运行 PHP 脚本。这是结果:

CLI crash

但有趣的是;在我的代码中,位于foreach 循环之后 的echo 语句将它的文本输出到控制台窗口。因此,我只能假设 CLI 在运行脚本结束时/之后崩溃。


我有一个脚本,其功能是将 XLSX 文件中的所有行加载到 MySQL 表中。我为此使用 PHPExcel。我编写了函数 loadFromXLS 以从 XLSX 文件加载数据并返回包含数据的二维数组。在这种特殊情况下,这意味着 3100 行和 29 列。

这是函数:

function loadFromXLS($filepath)
{
    $retval = array();
    $cols = array();
    $rownum = 0;

    $reader = PHPExcel_IOFactory::createReaderForFile($filepath);
    $reader->setReadDataOnly(true);

    $phpObject = $reader->load($filepath);
    $sheet = $phpObject->getActiveSheet();

    foreach($sheet->getRowIterator() as $row)
    {
        $celliterator = $row->getCellIterator();
        $celliterator->setIterateOnlyExistingCells(false);
        $cellnum = 0;

        foreach($celliterator as $cell)
        {
            if($rownum === 0)
            {
                $cols[$cellnum] = $cell->getValue();
            }
            else
            {
                if(is_array($retval[$rownum-1]))
                    $retval[$rownum-1] += array($cols[$cellnum] => $cell->getValue());
                else
                    $retval[$rownum-1] = array($cols[$cellnum] => $cell->getValue());
            }

            $cellnum++;
        }

        $rownum++;
    }

    unset($reader, $phpObject, $sheet);

    return $retval;
}

文件的第一行是列名。

无论如何,我已经确认它通过 var_dumping 前几行并检查数组长度来正确加载数据。

这就是问题所在。只要我添加这一行:

foreach($data as $i => $row) {};

Apache 到了那个点就崩溃了:

Apache crash

那是怎么回事? PHP 不能处理大型关联数组的循环吗?任何解释性的答案将不胜感激。如果我可以提供其他信息,请发表评论


我在 Windows 7、Intel i5 处理器、4GB RAM 上运行 XAMPP。我已经将 php.ini 中的 memory_limit 增加到 512MB,这已经足够了(它曾经在设置为 128MB 时给我一个内存错误)。该脚本包括 PHPExcel.php 和 dBug.php。二维数组仅填充字符串,没有时髦的 PHPExcel 数据类型。

我正在运行 PHP 5.3.1 版

Loaded modules: core mod_win32 mpm_winnt http_core mod_so mod_actions mod_alias mod_asis mod_auth_basic mod_auth_digest mod_authn_default mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_cgi mod_dav mod_dav_fs mod_dav_lock mod_dir mod_env mod_headers mod_include mod_info mod_isapi mod_log_config mod_mime mod_negotiation mod_rewrite mod_setenvif mod_ssl mod_status mod_autoindex_color mod_php5 mod_perl mod_apreq2

phpinfo() screenshot

最佳答案

尝试完全省略 apache,只从命令行运行脚本,看看会发生什么

关于php - Apache 在 PHP 关联数组的大型 foreach 循环中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5695393/

相关文章:

php - SQL Order By - 条件不起作用

php - 根据记录类型计算总和

javascript - 页面崩溃(可能是由于多维数组?)

javascript - foreach - 显示数据的正确行和列

php - 获取具有特定键/值对的二维数组中的子数组

php - array_push 在函数中不起作用,PHP

php - 结合 Angularjs 和 CodeIgniter

php - 连接我的 mysql 数据库和 Android 应用程序

android - 我的 Android TabHost 崩溃会出现 NullPointer 异常

c++ - "Event ID 26 Source Application Popup"之类的错误有何帮助