Сохранение некоторых файлов закрытыми - PullRequest
0 голосов
/ 07 января 2011

Я пытался создать каталог личных файлов, к которым можно было получить доступ только при входе пользователя в систему. Для этого я использовал папку вне веб-каталога, а затем 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;

1 Ответ

0 голосов
/ 07 января 2011

Что с <br /> в вашем movie.php?

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

Кроме того, вам нужно переместить заголовок и отобразить внутри оператора 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 - это константа, фильм, который вы хотите отобразить, еслизапрошенный не найден.

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

Откуда вы получаете$ 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;
...