因此,我尝试以两种不同的方式执行脚本:
1)
foreach($result_array as $arg){
exec("/usr/bin/php pathToScript firstArg $arg", $array);
echo "peak usage: " . memory_get_peak_usage() . "\n\r";
}结果:
峰值使用率: 5457324
峰值使用率: 7791212
PHP致命错误:允许的内存大小为33554432
2)
foreach($result_array as $arg){
curl_file_get_contents("website?query=$arg"); //just a cURL helper function
echo "peak usage: " . memory_get_peak_usage() . "\n\r";
}结果:
峰值使用率: 5241708
峰值使用率: 5241708
峰值使用率: 5241708
峰值使用率: 5241708
峰值使用率: 5241708
峰值使用率: 5241708
..。你明白我的意思了
我肯定搞错了exec()使用内存或操作的方式。我的印象是,当使用exec()派生程序时,调用脚本的内存需求不会受到影响……然而,情况似乎并非如此。
谁能解释一下这里发生了什么,好让我知道发生了什么?
发布于 2011-08-24 03:23:42
CURL版本没有保存响应(curl_file_get_contents的输出),但是exec版本是通过将内容附加到exec的$array的第二个参数来保存的
http://us2.php.net/manual/en/function.exec.php
如果存在输出参数,则将使用命令的每一行输出填充指定的数组。此数组中不包括尾随空格,例如\n。注意,如果数组已经包含一些元素,exec()将附加到数组的末尾。如果您不想让函数附加元素,请在将其传递给exec()之前对数组调用unset()。
发生的情况是,每个响应都被附加到相同的数组中,从而增加了程序的内存使用量。
发布于 2011-08-24 03:14:40
curl请求可能正在执行一个完全成熟的HTTP请求,因此被请求的脚本是作为某个完全独立的The服务器进程的子进程运行的。该子PHP进程的内存使用量将计入处理curl请求的HTTP进程,而不是您的脚本。
https://stackoverflow.com/questions/7166194
复制相似问题