Поток файла через PHP - PullRequest
       6

Поток файла через PHP

0 голосов
/ 17 сентября 2011

У меня есть файл flv, и я хотел бы передать его через php, atm У меня есть следующий код:

ОБНОВЛЕННЫЙ КОД
это код, который я скопировал с phihag, но теперь код не загружает файл, он возвращает и пустой файл!

$file = $_GET['url'];<br> if ((substr($file, 0, 7) != 'http://') && (substr($file, 0, 8) != 'https://')) {<br> die('You have to specify an HTTP URL');<br> }<br> $f = fopen($file, "rb"); // b is required on Windows<br> if ($f !== false) {<br> header('Content-Description: File Transfer');<br> header('Content-Type: application/flv');<br> header('Content-Disposition: attachment; filename='.basename($file));<br> header('Content-Transfer-Encoding: binary');<br> header('Expires: 0');<br> header('Cache-Control: must-revalidate, post-check=0, pre-check=0');<br> header('Pragma: public');<br> header('Content-Length: ' . filesize($file));<br> ob_clean();<br> flush();<br> $f = fopen($_GET['file'], "r");<br> while(!feof($f)) {<br> echo fread($f,8192);<br> }<br> fclose($f);<br> exit;<br> }<br>

приведенный выше код не работает, по какой-то причине он не проходит оператор if, а когда я удаляю ifstatement, он загружает пустой файл !!! обратите внимание, что файл хранится на удаленном сервере, к которому у меня нет доступа.

Спасибо

Ответы [ 2 ]

4 голосов
/ 17 сентября 2011

Ваш сервер, вероятно, настроен на запрет fopen() в URL-адресах .

Кроме того, у вас есть открытый прокси-сервер, который представляет угрозу безопасности.Вы должны проверять запрошенный URL-адрес, а не передавать информацию о том, кто знает что, через ваш сервер.Еще хуже то, что можно передать локальный файл в $_GET['file'] и скопировать любой файл на вашем сервере, доступный пользователю, от имени которого работает PHP.Страшные штучки!

2 голосов
/ 17 сентября 2011

if (fopen($url, "r")) { использует переменную $url, которая не определена в этой программе. Вы, вероятно, хотите:

$file = $_GET['url'];
// Security check to prevent users from echoing all the files on this server
if ((substr($file, 0, 7) != 'http://') && (substr($file, 0, 8) != 'https://')) {
  die('You have to specify an HTTP URL');
}
$f = fopen($file, "rb"); // b is required on Windows
if ($f !== false) {
  header(...)
  echo ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...