2012-12-23 60 views
0

我有一個視頻文件,我需要使用一個函數來抓取而不是直接鏈接。 當我查看了直接鏈接的視頻頁面代碼,這是我在屏幕上:如何在使用fread後刪除出現在文件中的' 0'字符?

enter image description here

但是,當我用我的功能,首先是所有的視頻不會運行,當我查看代碼,這似乎:

enter image description here

我意識到這是相同的文件,同樣的人物,但在中間許多\ 0字符。這些是黃色的。

這是我使用的代碼:

$file_name = --path to file--; 
$file_size = filesize($file_name); 
$ctype = 'video/mp4'; 

header('Content-Type: '.$ctype); 
header('Content-Length: ' . $file_size); 
header("Accept-Ranges: bytes");  
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: no-cache'); 

$file = fopen($file_name, 'rb'); 
$read = fread($file, $file_size); 
print($read); 
fclose($file); 
exit; 

我是否需要更改代碼?有什麼讓fread正確讀取文件? 或者我需要對要顯示的文件進行某種處理?

+0

NUL字節在原始文件中,但您的瀏覽器不會顯示它們,因爲它們是NUL字節,並且沒有任何內容顯示它們。他們應該在那裏。你爲什麼認爲你需要刪除它們? – DaveRandom

+0

還要注意,由於你的代碼沒有努力處理字節範圍,所以你應該刪除'header(「Accept-Ranges:bytes」);' – DaveRandom

+0

因爲視頻沒有顯示,所以必須有錯誤數據。 – Sarah

回答

1

嘗試使用readfile()代替fopen()/fread()/fclose()。它會更有效率的記憶並且不易出錯。

說了,有沒有真正的理由,爲什麼你的代碼不應該工作(假定文件路徑是正確的) - 你應該(一次),確保display_errors是關閉的情況下,PHP錯誤破壞文件。您可以通過在腳本的頂部設置ini_set('display_errors', 0);來完成此操作。

+0

完美無瑕地工作。 – Sarah

+0

@Sarah如果你正在處理/喜歡處理文件指針,那麼還值得一提的是'fpassthru()'的存在。 – DaveRandom

+0

@Sarah另外,爲了將來的參考,你正在做的另一個常見問題是在''標籤之外的前導/尾隨空格(其中應該沒有)。 – DaveRandom

相關問題