1

그래서 실행을 시도하는 스크립트 두 가지 방법을 구절 치명적인 오류 : 허용 된 메모리 크기 33554432의 PHP 메모리 사용량은 컬

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"; 
} 

결과 :
최대 사용 : 5,241,708
최대 사용 : 5,241,708
최대 사용 : 5,241,708
최대 사용 : 5,241,708
최대 사용 : 5,241,708가
최대 사용 : 5,241,708
... 당신이 얻을 아이디어

exec()가 메모리를 사용하거나 작동하는 방식에 대해 착각해야합니다. exec()를 사용하여 프로그램을 fork 할 때 호출하는 스크립트의 메모리 요구 사항이 영향을 미치지 않는다는 것이 내 인상이었습니다. 그러나 이것은 그렇지 않습니다.

여기에 무슨 일이 일어나고 있는지 알 수있는 사람이 있습니까?

답변

1

컬 버전 응답 (curl_file_get_contents의 출력)에 저장되지 않고, exec 버전 $arrayexec 두번째 파라미터에 콘텐츠를 추가하는 것이다 :

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

If the output argument is present, then the specified array will be filled with every line of output from the command. Trailing whitespace, such as \n, is not included in this array. Note that if the array already contains some elements, exec() will append to the end of the array. If you do not want the function to append elements, call unset() on the array before passing it to exec().

모든 응답이 동일한 배열에 추가되어 프로그램의 메모리 사용량이 급증합니다.

+0

AH HA! 고맙습니다! –

1

curl 요청은 완전한 HTTP 요청 일 가능성이 큽니다. 따라서 요청 된 스크립트가 완전히 독립적 인 웹 서버 프로세스의 하위로 실행되고 있습니다. 해당 하위 PHP 프로세스의 메모리 사용량은 스크립트가 아닌 컬링 요청을 처리하는 HTTP 프로세스에 포함됩니다.

+0

그래, 이건 분명하다 ...하지만 내 질문에 관한 사실, 그 exec()에 대한 여부 exec()에 의해 호출 된 스크립트는 호출 스크립트의 메모리 할당을 증가 여부 (내가 이전에 didn 생각은 가능했다). exec()가 메모리를 관리하는 방법을 오해 한 것 같습니다. 누군가 나를 똑바로 펴고 싶습니다. –