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