문제

PHP와 협력하여 원격 서버에서 파일과 사진에 액세스하고 있습니다. 나는 주로 file_get_contents () 및 copy () 함수를 사용하고 있습니다.

때로는 작은 텍스트 파일이나 사진에 액세스하는 것이 거의 즉각적이지만 다른 경우에는 동일한 파일에서 1 분 동안 "고정"되는 것 같습니다. 때로는 실제로 대본이 매달려지고 스크립트를 멈출 때도 Apache는 몇 분 동안 잠겨 있습니다.

나는 인터넷 연결이 벗겨 질 수 있다는 사실을 기꺼이 받아 들일 것입니다. 내 관심사는 우아하게 회복되고 Apache를 충돌시키지 않는다는 것입니다. PHP SET_TIME_LIMIT () 함수는 치명적인 오류 만 반환합니다. 또한 PHP 매뉴얼에는 스트림 작업에 소비 된 시간이 스크립트의 실행 시간에 기여하지 않는다는 점이 있습니다.

이러한 연결 문제에서 어떻게 복구하고 내 스크립트를 계속할 수 있습니까? 그리고 왜 이것이 아파치가 매달릴까요?

고마워요, 브라이언

도움이 되었습니까?

해결책

$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_create 그리고 HTTP 컨텍스트 옵션. 위의 코드는 연결에서 타임 아웃을 설정하고 한 번의 리디렉션을 허용합니다.

이것은 타임 아웃에 도달하지 못하게해야합니다.

긴 지연은 네트워크 또는 원격 서버가 방화벽이있는 원격 서버로 인해 한 번에 너무 많은 파일을 가져 오거나 원격 호스트 경로에서 플라킹 DNS 서버 또는 라우터에 의해 발생할 수 있습니다. 제안으로, 다운로드 된 파일을 로컬로 캐시해야하므로 다음 새로 고침 파일에서는 큰 넓은 인터넷 대신 로컬로 처리됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top