PHP CLI 不遵守 php.ini 中的内存限制

PHP CLI 不遵守 php.ini 中的内存限制

我正在使用 drush,这是一个用于管理 drupal 网站的命令行 php 应用程序。我正在运行一个命令来导入大量数据,这导致我达到了 php 的内存限制。

PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted ...

如果我没算错的话,这个数字是 512MB (536870912 / 1024 / 1024 = 512)。我更改了 drush 使用的 php.ini 中的指令:

$> drush status
  ...
  PHP configuration      :  /etc/php5/cli/php.ini 
$> grep memory /etc/php5/cli/php.ini 
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 1024M 

但我仍然达到了 512 MB 的限制!我在虚拟机中运行,我将内存设置从 512 MB 更改为 1025 MB RAM,以允许 drush 运行。

$> free -m
             total       used       free     shared    buffers     cached
Mem:          1010        578        431          0         14        392
-/+ buffers/cache:        172        837
Swap:          382          0        382

因此它说它有大约 431 MB 的可用内存,现在我已将虚拟机提升到 1024。我猜一半的内存被用来运行 GUI,但我不明白当虚拟机有 512 MB 的 RAM 时 GUI 是如何运行正常的。

为什么 PHP cli 仍然达到 512 MB 的内存限制?如果它达到系统内存限制,它不应该在命令free显示的可用内存量为 431MB 左右时死机吗?

答案1

最有可能的是,您有多个 php.ini 文件(请检查类似的内容/etc/php5/cli)并且正在编辑错误的文件,或者您在包含文件ini_set('memory_limit', '512M');中的设置settings.php,或者类似的东西。

答案2

对于像我一样在 Google 上搜索此问题的其他人,请运行以下命令:

php --ini

查看 php-cli 正在使用哪个配置。您将看到类似以下内容:

Loaded Configuration File:         /etc/php/7.1/cli/php.ini

或者像这样:

Loaded Configuration File:         /opt/php-7.0.26/etc/php.ini

也许您正在尝试更改错误的文件中的配置。

答案3

以 Mac 为例

/etc/php5/cli用于命令行,因此您需要更改/etc/php5/cgi/php.ini

那应该可行!

相关内容