PHP致命错误:/var/www/html/vendor/composer/ClassLoader.php中允许的内存大小

时间:2015-10-22 04:37:16

标签: php linux laravel-4 amazon-ec2 out-of-memory

Laravel 4.2,Amazon 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

1 个答案:

答案 0 :(得分:2)

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的行(当然,输出可能因系统而异)。
  3. 通过将以memory_limit =开头的行更改为更合适的内容来编辑您刚找到的文件,例如

    memory_limit = 8M
    

    请根据需要随意提高该数字,但我建议您开始小型(不是1G),以防止意外使用服务器。

    有一点需要注意:如果这是一台测试/开发机器,并且您正在运行xdebug之类的调试器或分析器,那么您可能需要更高的启动,而1G并非疯狂。但是,不要在生产机器上以如此高的数字开始;努力工作。