2014-12-23 5 views
2

나는 (큰) 비디오 파일을 검색하고 다운로드 할 수있는 웹 앱 콘텐츠 플랫폼을 개발했다. 또한 브라우저에서 직접 파일을 볼 수도 있습니다. 일부 액세스 관리를 수행하기 위해, 대신 mp4/webm 파일을 직접 가리 키지 않고 대신 PHP 스크립트를 사용하여 처리합니다. 내 코드는 대부분 http://www.media-division.com/php-download-script-with-resume-option/클라이언트가 연결을 끊으면 PHP 스크립트가 중단됩니까?

코드 조각에서 볼 수있는 예를 기반으로합니다

set_time_limit(0); 
    fseek($file, $seek_start); 

    while(!feof($file)) 
    { 
     print(@fread($file, 1024*8)); 
     ob_flush(); 
     flush(); 
     if (connection_status()!=0) 
     { 
      @fclose($file); 
      exit; 
     }   
    } 

그것은 기본적으로 무제한 (큰 파일)에 대한 실행 시간을 설정하고, 파일을 순차적으로 읽고 클라이언트에 푸시합니다. 내 질문은 : 클라이언트가 다운로드를 중단하면 스크립트가 중단됩니까? 예를 들어 HTML5 동영상 플레이어를 사용하여 동영상을 스트리밍하고 시청을 중단 할 때

ignore_user_abort는 기본적으로 사용하지 않도록 설정되어 있으며 구성에서 사용하도록 설정하지 않았습니다. 하지만 line connection_status() 함수는 연결이 살아 있는지 여부를 검사하고, 그렇지 않은 경우 스크립트를 중단합니다 (추측). documentation에서

+2

이 읽기 ​​현재 프로세스를 볼 수없는 경우, 확인 할 수있는 로그 파일 쓰기 : http://php.net/manual/en/function.ignore -user-abort.php – vaso123

+0

이것은 PHP와는 아무런 관련이 없습니다. PHP가 호출되는 방식입니다 (예를 들어, 아마도 웹 서버 일 것입니다). PHP 자체는 아무 문제없이 몇 시간 동안 실행될 수 있습니다. –

+0

RTFM : http://php.net/manual/en/function.ignore-user-abort.php –

답변

0

:

는 PHP가 시도가 클라이언트에 정보를 전송 될 때까지 사용자가 연결을 중단했다 감지되지 않습니다. 간단히 echo 문을 사용한다고해서 정보가 전송되는 것은 아닙니다. flush()를 참조하십시오.

그래서 사용자가 중단되는 즉시, 말할 것입니다, 당신은이 두 줄을 호출

ob_flush(); 
flush(); 

스크립트가 중지됩니다. 나는이 부분이 처형 될 것이라고 생각하지 않는다 :

if (connection_status()!=0) 
{ 
    @fclose($file); 
    exit; 
} 

당신은 그것을 점검 했습니까? 이유가 있습니까, 왜 당신은 그것이 가능하지 않다고 생각할 수 있습니까?

할 수 있습니다 간단한 당신이 (공유 호스팅)