PHP Fatal error: Allowed memory size in /var/www/html/vendor/composer/ClassLoader.php

PHP Fatal error: Allowed memory size in /var/www/html/vendor/composer/ClassLoader.php

Laravel 4.2,亚马逊 ec2 Linux

PHP 致命错误:

Allowed memory size of 262144 bytes exhausted (tried to allocate 3072 bytes) in /var/www/html/vendor/composer/ClassLoader.php on line 78

TL;DR 您需要在 php.ini 中增加 memory_limit 设置。您几乎没有让您的脚本使用任何内存。

问题

错误消息 Allowed memory size of 262144... 表示您的 memory_limit 设置为 256 kb。那太低了。对于大多数有用的应用程序,您至少需要几 MB。我会从 8MB 开始,然后看看效果如何。

解决方案

更改 memory_limit 设置。理论上,您可以通过两种方式执行此操作:(1) 编辑 php.ini 或 (2) 使用 ini_set().

实际上,您不能总是使用 ini_set('memory_limit', value);。一方面,某些扩展,如 suhosin,会阻止脚本以这种方式设置 memory_limit。另一方面,您必须小心操作。例如,您建议使用 ini_set('memory_limit', '1G');。但是the shorthand (K, M, G) only works in php.ini, not in ini_set。您必须输入实际的字节数(例如 1073741824)。此外,1G 对大多数用途来说都太过分了;非常非常少的非恶意 PHP 脚本需要这样的东西。即使是像 WordPress 这样相当笨重的框架,通常 运行 在 64 MB 左右,即使加载了很多插件。

如何更改 php.ini

中的设置

弄清楚您正在使用哪个 php.ini 文件(根据您的安装方式,有几个浮动的情况并不少见)。您可以通过两种方式做到这一点:

  1. 将其放入 .php 文件并 运行 它:<?php phpinfo();
  2. 在命令行中,键入 php -i | grep php.ini。您应该会看到一行类似 Loaded Configuration File => /etc/php.ini 的内容(当然,输出可能因系统而异)。

通过将以 memory_limit = 开头的行更改为更合适的内容来编辑您刚刚找到的文件,例如

memory_limit = 8M

您可以根据需要随意增加该数字,但我建议您从小规模开始(而不是 1G),以防止不小心让您的服务器瘫痪。

一个警告:如果这是一台 testing/development 机器,而你正在 运行 调试器或像 xdebug 这样的分析器,你可能需要更高的起点,而 1G 不是疯狂的。但是不要在生产机器上以这么高的数字开始;努力做到这一点。