2011-05-03 3 views
2

(약 반 시간) I 얻을 다음과 같은 경고하는 동안 때때로 실패) : 스트림을 열지 못했습니다 : HTTP 요청이 실패했습니다!/path/myfile.php on line 285PHP file_get_contents 내가 가끔 cronjob를 통해 PHP 스크립트를 실행하려고하고 있어요 cronjob를

프로그램이 시간 초과 문제 또는 메모리 문제 (시간 초과가 10 분으로 설정되고 메모리가 128M로 설정되지 않음)가 아니라고 생각하게하는 프로그램이 계속 실행되지만 해당 함수 호출의 결과를 저장하는 변수가 비어 있습니다. 기이 한 부분은 다른 URL 매개 변수를 사용하여이 동일한 웹 사이트에 대한 몇 가지 다른 호출을하고 있으며 결코 문제가 없다는 것입니다. 이 함수 호출의 유일한 차이점은 다운로드하는 파일이 약 70MB이고 다른 파일은 모두 약 300kb입니다.

또한 웹 서버에 SSH를 설치하고 cron에서 실행할 때만 수동으로 PHP 스크립트를 실행하면이 경고가 표시되지 않습니다.

나는 또한 file_get_contents 대신 cURL을 사용해 보았지만 메모리가 부족합니다.

감사합니다. 도움을 주시면 감사하겠습니다.

답변

2

아마도 URL.com의 원격 서버가 해당 특정 (큰) 요청에 대해 시간 초과되거나 오류를 반환하는 경우가 있습니까?

저는 변수에 70MB를 저장하려고하지 않아야한다고 생각합니다.

파일에 직접 다운로드하도록 cURL을 구성 할 수 있습니다. 다음과 같이하십시오 :

그렇지 않으면 무엇이 잘못 될지에 대해 훨씬 좋은 오류를 제공해야합니다. 다른 답변에서

+0

나는 다른 결과를 얻기 위해 어떤 종류의 결과물을 볼 것입니다. 나는 아마도 메모리에서 70MB를 유지해서는 안된다는 것을 알고 있지만 테스트 도중 작동하고 있었기 때문에 그냥 같이 갔다. 파일에 쓰는 문제는 ssh를 통해 파일을 편집 할 수있는 권한이 없다는 것입니다. 그러나 cronjob의 소유자가 상상해 봅니다. 시도해 보겠습니다. – Casey

+1

@Casey - 아마도 tmp 디렉토리가 쓰기 가능합니다. http://www.php.net/manual/en/function.tmpfile.php에서 네 번째 주석을 확인하십시오 (참고 : 그들은 말풍선을 통해 파일을 업로드하는 것에 대해 이야기하고 있지만 기본 아이디어는 같습니다) – Eli

+0

맞아, 임시 직원이 쓰기 가능해. 이제 파일을 php : // temp에 저장하고 거기에서 파싱합니다. 나는 cron을 실행 해보고 무슨 일이 일어날지를 볼 것입니다. 감사. – Casey

1

..이 문제는 사용중인 URL 매개 변수를 사용하여 시간의 일부를 발생되지 않는다는 것을 다시 확인 :

참고 : 특수 문자 URI를 개방하는 경우, 공백과 같은 urlencode()를 사용하여 URI를 인코딩해야합니다. - http://docs.php.net/file%5Fget%5Fcontents

+0

URL 매개 변수는 하드 코딩되어 매번 동일하며 특수 문자가 없습니다. 나는 문제가 원격 서버 또는 URL 호출 그렇지 않으면 ssh를 통해 매번 작동하지 않을 것이라고 생각하지 않습니다. – Casey

+0

저는 cron 메모리 제한과 관련이 있다고 생각합니다. 특히 공유 서버를 사용하는 경우에는 그렇지 않습니다. 그렇지 않으면 SSH를 통해 작동하는 경우 작동하지 않아야한다는 실질적인 이유가 없습니다. wget 호출을 사용하여 쉘 스크립트로 그 부분을 다시 작성할 수 있습니까? – stevecomrie

+0

쉘 스크립트로 작성하면 cron 메모리 제한을 초과합니까?나는 cron의 결과로 실행되는 모든 것이 동일한 제한하에 있다고 생각할 것입니다. – Casey