Так что у меня возникла небольшая проблема с моим проектом. У нас есть громоздкий сервер с большим количеством места, а также легкий статический сервер хранения, который может только быть использованы для хранения вещей. Мы должны убедиться, что только люди, прошедшие аутентификацию, могут получить доступ к ресурсам на статическом сервере, поэтому я подумал о создании psuedo-proxy из readfile (), так как мы можем использовать allow_url_fopen.
Поэтому я попробовал следующий код в качестве теста:
<?php
$type = "video/webm";
$loc = "http://a.pomf.se/fzggfj.webm";
header('Content-Type: '.$type);
header('Content-Length: '.filesize($loc));
readfile($loc);
exit;
Это всегда терпит неудачу, браузер считывает это как поврежденное. Интересно, когда вы делаете это:
<?php
$type = "video/webm";
$loc = "../test.webm";
header('Content-Type: '.$type);
header('Content-Length: '.filesize($loc));
readfile($loc);
exit;
Это работает, хотя файл точно такой же. Кто-нибудь знает, почему readfile не будет делать это правильно, и объясните мне это?
РЕДАКТИРОВАТЬ:
Я получил сообщение об ошибке, оно застряло в файле.
Предупреждение: filesize (): сбой статистики для http://a.pomf.se/fzggfj.webm в C: \iform \ UniServerZ \ www \ Director.php в строке 5
Является ли filesize () моей проблемой здесь?
Хорошо, я исправил это. deceze был правильным, и размер файла был проблемой. Позвольте записи показать, что размер файла не работает на удаленных ресурсах, я думаю.
Вам необходимо активировать allow_url_fopen добавляя allow_url_fopen=1
в вашем php.ini
,
почему вы не загружаете видео во временный каталог и не перенаправляете туда пользователя? (конечно, позже вы можете очистить устаревший каталог tmp с помощью скрипта cron)
попробуй это:
<?php
$loc = "http://a.pomf.se/fzggfj.webm";
$pathToVideos = dirname(__FILE__).'/tmp/';
$ext = explode('.', $loc);
$ext = end($ext);
$hash = md5($loc);
$filename = $hash.'.'.$ext;
$tmpFile = $pathToVideos.$filename;
if(!is_file($tmpFile)) {
exec('wget -O '.escapeshellarg($tmpFile).' '.escapeshellarg($loc));
}
header('Location: /tmp/'.$filename);
exit(0);