memory_limit
作为服务器页面的Apache模块运行的PHP 的配置必须考虑到您在计算机上可以同时拥有多少个Apache进程- 请参阅MaxClients
Apache 的配置选项。
如果MaxClients
为100,并且您具有2,000 MB RAM,则非常快速的计算将显示您不应使用超过20 MB (因为20 MB * 100客户端= 2 GB或RAM,即服务器拥有的内存总量) 为memory_limit值。
而且这并没有考虑到同一台服务器上可能还有其他事情在运行,例如MysqL,系统本身……而Apache可能已经在为自己使用一些内存。
或者,当然,这也是“最坏的情况”,它认为每个PHP页面都在使用它可以使用的最大内存量。
在您的情况下,如果仅一项工作需要如此大的内存,那么我不会增加memory_limit
作为Apache模块运行的P?P 的内存。
相反,我会从命令行 (或通过cron作业) 启动该作业,并memory_limit
在这种唯一的情况下指定更高的规格。
这可以通过-d
PHP选项来完成,例如:
$ PHP -d memory_limit=1GB temp.PHP
string(3) "1GB"
var_dump(ini_get('memory_limit'));
在我看来,这比增加Apache的PHP模块的memory_limit安全得多-这是我在拥有大型数据集或无法优化或分页的繁重工作时通常会执行的操作。
如果需要为PHP CLI执行定义多个值,还可以通过以下选项告诉它使用另一个配置文件,而不是默认的PHP.ini -c
:
PHP -c /etc/PHPcli.ini temp.PHP
这样,您就可以:
这样可以确保您的批次能够运行-并且您仍将拥有网站的安全性(memory_limit
并max_execution_time
作为安全措施)