2011-01-07 3 views
0

Я пытался создать каталог личных файлов, доступ к которым можно было получить только при входе пользователя в систему. Для этого я использовал папку вне веб-каталога, а затем php для ее доступа, если это разрешено ,Сохранение некоторых файлов private

Вот пример:

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

пожалуйста показать содержимое фильма.fp –

+0

тех
html-теги не должны находиться в php-коде – Moak

+0

, они не были .... я пытался показать сообщение должным образом и не смог. я удалил их, хотя – user490895

ответ

0

Что с <br /> в вас вы movie.php?

Вы пытались увидеть, что movie.php перекликается с содержимым файла? (посмотрите источник на странице, затем скопируйте источник фильма src «movie.php? file = ...» и вставьте его в свой браузер, посмотрите, получится ли это фильм).

Allso вам нужно переместить заголовок и эхо внутри, если заявление, если этот файл существует doens't вы можете повторить другой стандартный фильм:

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 к если запрошенный не найден.

Еще одна вещь, которую вы могли бы сделать, это ввести полный ури для фильма php в качестве источника src (например, http: //localhost/some/uri/movie.php? File = ... "

от где вы получите $ fileDir, $ файл и $ внутр в вы movie.php


Edit?: следует позаботиться о проблеме 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 = '. ogv' Кроме того, если я не получу файл из отдельного каталога, а скорее из того же каталога, игрок работает отлично. Однако ogg не скрыт. – user490895

+0

, то проблема в интерфейсе (клиентская сторона, html/css/js/whatever), а не на сервере, если сервер передает фильм. –

+0

Очень небольшое предложение - компиляция '$ fileDir. md5 ($ file). $ ext' once и сохраняя его как строковую переменную, которая затем используется для функций 'file_exists()' и 'file_get_contents()', это решение немного упростит.Может даже переместить вызов 'header()' в верхнюю часть, а затем вместо использования переменной '$ content', чтобы удерживать результат, просто пропустите его прямо. –