2011-01-07 40 views
0

我試圖創建一個只能在用戶登錄時才能訪問的私有文件的目錄。爲此,我在web目錄之外使用了一個文件夾,然後使用php訪問它,如果允許的話。將某些文件保留爲私人

下面是一個例子:

function display_movie($file){ 

printf("`<video id='movie' width='960' height='416' controls='controls' onerror='fix()'>`<br/> 
`<source src='movie.php?file=%s' type='video/ogg; codecs=\"theora, vorbis\"'> 
</video>", rawurlencode($file)`); 

} 

這個偉大工程的圖像,但打破了媒體播放器。另外,我只在Linux機器上進行了本地測試。

任何想法?謝謝。

這是movie.php ...

if(file_exists($fileDir . md5($file) . $ext)) { 
    $contents = file_get_contents($fileDir . md5($file) . $ext); 
} 

header('Content-type: video/ogg'); 
echo $contents; 
+0

請顯示movie.php –

+0

th的內容ose
html標籤不應該在php代碼 – Moak

+0

他們werent ....我試圖正確顯示帖子和失敗。我通過 – user490895

回答

0

什麼是與你的<br />正在movie.php?

您是否嘗試瞭解movie.php是否迴應文件內容? (在你的頁面上查看源代碼,然後複製電影源src「movie.php?file = ...」並將其粘貼到瀏覽器中,看它是否獲得了電影)。

Allso你需要移動頭部和回聲if語句裏面,如果該文件存在好好嘗試一下你可以重複不同的標準電影:

if(file_exists($fileDir . md5($file) . $ext)) { 
    $contents = file_get_contents($fileDir . md5($file) . $ext); 
} else { 
    $contents = file_get_contents($fileDir . md5(MOVIE_NOT_FOUND)); 
} 
header('Content-type: video/ogg'); 
echo $contents; 

凡MOVIE_NOT_FOUND是一個常數,電影你whant到如果沒有找到請求的,則顯示。

,你可以做的另一件事就是輸入你完整的URI在你源SRC(電影PHP:象「http://localhost/some/uri/movie.php文件= ...」

您從哪裏得到$ FILEDIR,$ file和$ EXT在你movie.php


編輯:應採取的file_get_contents問題的關心,你有

$file = $fileDir . md5($file) . $ext; 
header('Content-type: video/ogg'); 
//set aditional headers you may whant here 
ob_clean(); 
flush(); 
if(file_exists($file)) 
{ 
    readfile($file); 
} else { 
    readfile($fileDir . md5(MOVIE_NOT_FOUND)); 
} 
exit; 
+0

它得到的內容,但查看器中斷:滾動不起作用,這種事情。 $ fileDir是文件的路徑,$ file =從auth.php傳遞,$ ext ='.ogog' 另外,如果我沒有從單獨的目錄中獲取文件,而是從同一目錄中獲取文件,則播放器工作正常。但是,ogg並不隱藏。 – user490895

+0

然後你的問題是在前端(客戶端,html/css/js/whatever),而不是服務器上,如果服務器通過電影。 –

+0

一個非常小的建議 - 編譯'$ fileDir。 md5($文件)。 $ ext'一次,並將其存儲爲一個字符串變量,然後將其用於'file_exists()'和'file_get_contents()'函數將使該解決方案稍微簡潔一些。甚至可以將'header()'調用移動到頂部,然後,而不是使用'$ content'變量來保存結果,只需直接回顯即可。 –