将PHP的memory_limit作为Apache模块运行到服务器网页的配置必须考虑在机器上同时可以有多少Apache进程 – 请参阅Apache的MaxClients配置选项。
如果MaxClients为100,并且您有2,000 MB或RAM,一个非常快速的计算将显示您不应该使用超过20 MB *(因为20 MB * 100客户端= 2 GB或RAM,即您的服务器的内存总量)*为memory_limit值。
这是没有考虑到可能在同一个服务器上运行的其他事情,如MySQL,系统本身…而且Apache可能已经使用一些内存为自己。
或者,这也是一个“最坏的情况”,认为每个PHP页面使用最大的内存量。
在你的情况下,如果你只需要这么大的内存只有一个工作,我不会增加memory_limitPḦP作为一个Apache模块运行。
相反,我将从命令行(或通过cron作业)启动该作业,并在此唯一的情况下指定更高的memory_limit specificaly。
这可以使用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执行定义几个值,您还可以指定使用-c选项使用另一个配置文件,而不是默认的php.ini:
php -c /etc/phpcli.ini temp.php
这样,你有:
> /etc/php.ini为Apache,具有低memory_limit,低max_execution_time,…
>和/etc/phpcli.ini从命令行运行批处理,实际上没有限制
这确保您的批次将能够运行 – 您仍然可以为您的网站提供安全性(memory_limit和max_execution_time是安全措施)
但是,如果你有时间优化你的脚本,你应该;例如,在那种你必须处理大量数据的情况下,分页是必须的;-)