Использование памяти Php с использованием стихов CLI Curl - PullRequest
1 голос
/ 23 августа 2011

Итак, я попытался выполнить скрипт двумя разными способами:

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 (), требования к памяти вызывающего скрипта не будут выполнены ... Однако, похоже, это не так.

Может кто-нибудь сброситьсвет на то, что здесь происходит, так что я знаю, что происходит?

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Версия CURL не сохраняет ответ (вывод curl_file_get_contents), но версия exec - добавление содержимого ко второму параметру exec $array:

http://us2.php.net/manual/en/function.exec.php

Если присутствует выходной аргумент, то указанный массив будет заполняться каждой строкой выходных данных команды.Конечные пробелы, такие как \ n, не включены в этот массив. Обратите внимание, что если массив уже содержит некоторые элементы, exec () добавится в конец массива. Если вы не хотите, чтобы функция добавляла элементы, вызовите unset () в массиве, прежде чем передавать его вexec ().

Что происходит, каждый ответ добавляется к одному и тому же массиву, что приводит к увеличению использования памяти программой.

1 голос
/ 23 августа 2011

Запрос curl, вероятно, выполняет полноценный HTTP-запрос, поэтому запрашиваемый скрипт запускается как дочерний процесс какого-то совершенно независимого процесса веб-сервера.Использование памяти этого дочернего процесса PHP будет учитываться в процессе HTTP, обрабатывающем запрос curl, а не в вашем скрипте.

...