2009-10-22 2 views
4

PHP를 사용하여 원격 서버의 파일과 사진에 액세스하고 있습니다. 나는 주로 file_get_contents() 및 copy() 함수를 사용하고 있습니다.PHP의 원격 서버에서 파일을 가져올 때 지연 처리

때로는 작은 텍스트 파일이나 사진에 액세스하는 것이 거의 즉각적이지만 때로는 똑같은 파일에서 1 분 동안 "멈추는"것처럼 보일 수도 있습니다. 그리고 때로는 스크립트가 멈추는 경우가 있습니다. 스크립트를 중지하더라도 아파치는 몇 분 동안 잠겨 있습니다.

나는 인터넷 연결이 벗겨지기 쉽다는 사실을 받아들이 려합니다. PHP를 set_time_limit() 함수는 치명적인 오류 만 반환합니다. 또한 PHP 매뉴얼에는 스트림 작업에 소요 된 시간이 스크립트의 실행 시간에 영향을주지 않는다는 메모가 있습니다.

어떻게 이러한 연결 문제를 복구하고 스크립트를 계속 진행할 수 있습니까? 그리고 이것이 왜 아파치가 멈추는 원인이 될까요?

감사합니다, 브라이언

답변

3
$options = array('http' => array(
     'user_agent' => 'Firefox wannabe', 
     'max_redirects' => 1, 
     'timeout'  => 10, 
)); 
$context = stream_context_create($options); 
$content = file_get_contents($url, false, $context); 

stream_context_createHTTP Context Options를 살펴 보자. 위의 코드는 연결에 시간 초과를 설정하고 하나의 리디렉션을 허용합니다.

이렇게하면 시간 제한에 도달하지 않습니다.

긴 지연은 방화벽이있는 원격 서버 또는 한 번에 너무 많은 파일을 가져 오지 못하도록하거나 원격 호스트에 대한 경로상의 비정상적인 DNS 서버 또는 라우터에 의해 거부 될 수 있습니다. 제안 사항으로 다운로드 한 파일을 로컬에 캐싱해야하므로 다음 번 새로 고침시 파일이 큰 너비가 아닌 로컬로 처리됩니다.

+0

놀라운. 매우 감사합니다. – Brian

관련 문제