2014-12-23 107 views
2

我開發了一個Web應用內容平臺,允許用戶搜索和下載(大)視頻文件。他們也可以直接在瀏覽器中觀看文件。爲了做一些訪問管理,我不直接將它們指向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默認是禁用的,我沒有在我的配置中啓用它。但是connection_status()函數會檢查連接是否處於活動狀態,如果不是這種情況,我會中止腳本(我想)。

+2

閱讀:http://php.net/manual/en/function.ignore -user-abort.php – vaso123

+0

這與PHP無關,而是PHP調用的方式(即可能是webserver,在你的情況下)。 PHP本身可以運行幾個小時沒有任何問題。 –

+0

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

回答

0

documentation

PHP不會檢測用戶已中止的連接直到 嘗試將信息發送到客戶端。只需使用 回聲聲明不保證發送信息,請參閱 flush()。

所以,我要說,只要用戶已經中止,調用此兩行:

ob_flush(); 
flush(); 

該腳本將被停止。我不認爲這部分將被執行:

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

你檢查了嗎?是否有理由,爲什麼你可以認爲它不是?

你可以簡單的寫日誌文件確認,如果你不能夠看到當前進程(虛擬主機)

相關問題