readfile () не работает с удаленными ресурсами

Так что у меня возникла небольшая проблема с моим проектом. У нас есть громоздкий сервер с большим количеством места, а также легкий статический сервер хранения, который может только быть использованы для хранения вещей. Мы должны убедиться, что только люди, прошедшие аутентификацию, могут получить доступ к ресурсам на статическом сервере, поэтому я подумал о создании 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 () моей проблемой здесь?

0

Решение

Хорошо, я исправил это. deceze был правильным, и размер файла был проблемой. Позвольте записи показать, что размер файла не работает на удаленных ресурсах, я думаю.

1

Другие решения

Вам необходимо активировать allow_url_fopen добавляя allow_url_fopen=1 в вашем php.ini,

0

почему вы не загружаете видео во временный каталог и не перенаправляете туда пользователя? (конечно, позже вы можете очистить устаревший каталог 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);
-1
По вопросам рекламы [email protected]