我最近安装了 Ubuntu 12.10 服务器,其中安装了 Apache2、PHP 和 MySQL 的原始版本。PHP 出了点问题 - 一开始我以为是 PHP Markdown 的问题,因为脚本在被锁定几秒钟后突然停止了1420 行出现错误
致命错误:/.../vendor/Markdown.php 第 1420 行中允许的内存大小 134217728 字节已用尽(试图分配 130968 字节)
过了一段时间,我放弃了调试 PHP Markdown,决定暂时禁用它并继续我的项目。然后我收到了错误:
致命错误:/mnt/hgfs/Dropbox/Projects/twork/lib/database.php 第 78 行中允许的内存大小 134217728 字节已用尽(试图分配 32 字节)
这是 database.php 的第 78 行:
$results = $stm->fetchAll(PDO::FETCH_ASSOC);
由于我的整个数据库目前只包含大约 20 行,我想你会同意这个错误完全是胡扯。我最近在另一个系统上使用 PHP 5.3 运行了这个项目,没有出现问题。我当前的 PHP 设置导致循环永远持续下去并耗尽内存。
重要的提示:PHP Markdown 和 PDO(MySQL)均可在同一个系统上的 CLI 版本 PHP 中完美运行 - 问题仅出在 Apache2 + PHP 上。
您是否知道有任何设置、错误或怪癖会导致 PHP 出现这种行为?
这是我的phpinfo()
答案1
我不确定你为什么关注数据库。错误非常明显:PHP 已耗尽分配的 RAM。我们可以假设为什么会发生这种情况,但挖掘其他人的代码(尤其是 PHP 代码)是一项无趣的任务。让我们开始运行它吧。
允许 PHP 使用更多内存
你永远不知道——脚本可能真的太松散了。可能有内存泄漏。可能是突发问题。谁知道呢。除非你把事情搞砸了,否则你永远不会发现。
1.编辑php.ini
:
sudoedit /etc/php5/apache2/php.ini
- 改成
memory_limit = 128M
memory_limit = 256M
- 重新启动 PHP 或 Apache(同样,我不熟悉 mod_php 实际上是怎样作品)
如果它仍然继续使用世界上所有的内存,我会认为这是一个严重的错误。如果它只影响到你这一次安装