2013-07-02 36 views
0

我有像mp4,ogg等媒體文件到頁面上的服務器。但問題是由於一些安全原因,文件沒有任何擴展名,儘管它們是媒體文件。 所以Apache無法識別MIME類型,因此HTML5視頻標籤無法播放視頻。php html輸出視頻沒有擴展到瀏覽器

我有什麼選擇?

因爲我沒有任何擴展名,所以.htaccess沒有任何作用。 如果我把文件擴展名放在名字上,那麼它開始工作。 此外,我有這些文件存儲在數據庫中的MIME類型。

檔案結構:

asdsad/media 
werewr/media 
23frwe/media 

//where media is the file (could be mp4/ogg/webm) with no extension. 
// before/is folder name 
// If i change media to media.mp4 , it works 

.htaccess文件

AddType video/ogg .ogv .ogm .ogg 
AddType audio/ogg .oga .ogg 
AddType video/mp4 .mp4 
AddType video/webm .webm 
AddType video/x-m4v .m4v 
AddType text/x-vcard .vcf 

什麼,如果從PHP從連接局部路徑它,而不是我的輸出文件? 它會工作嗎? 這樣的事情。

header("Content-type: video/mp4"); 
echo file_get_contents($pathTmp4); 

回答

0
<?php 
// tell the browser the file type 
header("Content-type: video/mp4"); 
// tell the browser the file size 
header(sprint("Content-size: %d", filesize($pathTmp4))); 
// disable output buffering before delivering the file 
while(ob_get_level()) ob_end_clean(); 
// send it over 
readfile($pathTmp4); 
// done, track speed and such optional stuff here 
?> 

考慮readfile。將直接輸出繞過file_get_contents所做的內存中的負載。

或者只是打開文件並使用fread發送塊。 在發送內容之前,不要將整個內容加載到內存中。

UPDATE

在速度方面,你需要測試。這將繞過.htaccess問題,因爲它使用PHP來吐出文件。這允許您控制標題並將適當的類型提供給瀏覽器。下行是僅僅提供文件的PHP開銷。

我會親自去fopen + fread + fclose組合,因爲我們正在談論這是大的視頻文件。這也使您能夠跟蹤數據庫中的發送進度,跟蹤發送速度等。 實時下載跟蹤可能對您有用。

但對於其他任何(小土豆),我用readfile()。在完成之前它不會給你更新。但它的工作。

您仍然需要測試。使用100 MB以上的視頻文件併發送。查看內存在PHP實例中的表現以及它如何表現整體。

+0

除非打開輸出緩衝區,否則readfile也不會將整個文件讀入內存。 – Orangepill

+0

你能詳細解釋一下嗎? (1)哪個方法會比較長,因爲我有很長的視頻 (2)它會繞過.htaccess文件的問題嗎? – django

+0

readfile vs fread,哪個會更快? 它會比直接在html標籤中鏈接的文件慢嗎? – django

相關問題