как читать видеофайл, размещенный на сервере в php - имя видеофайла включает в себя http wrapper - PullRequest
2 голосов
/ 28 марта 2011

Я использую следующий код, но появляется предупреждение с fseek и возвращает -1 вместо 0.

$file = fopen("http://www.example.com/public_html/data/video/temp.mov", "r") or exit("unable to open file");
fseek($file, -128, SEEK_END);

Файл открывается однозначно, но fseek не работает. Есть ли какой-то другой способ для чтения видео с сервера?

Ниже следует сообщение об ошибке

Warning: filesize() [function.filesize]: stat failed for 

Warning: fseek() [function.fseek]: stream does not support seeking in 

1 Ответ

3 голосов
/ 28 марта 2011

Это должна быть какая-то проблема, зависящая от платформы.Попробуйте этот код:

$filename = "www.example.com/public_html/data/video/temp.mov";
$file = fopen ($filename, "r")
    or exit("unable to open file");
fseek ($file, filesize ($filename) - 128);

Оболочка HTTP не поддерживает поиск.Если вы хотите искать в удаленном файле через HTTP, вам нужно получить размер файла.Один из возможных способов - интерпретировать список каталогов или сделать запрос HEAD.Когда вы знаете размер файла, вы можете использовать curl и Range, как здесь .

Это также метод для получения удаленного размера файла .

Как загрузить файл с помощью cURL (В этом примере данные загружаются в переменную PHP, используйте только, если вы хотите обработать данные, если вы просто хотите сохранить их во внешнем файле, используйте CURLOPT_FILE вместо CURLOPT_RETURNTRANSFER):

$c = curl_init (); 
curl_setopt ($c, CURLOPT_URL, "http://example.com/some_dir/some_file.ext"); 
curl_setopt ($c, CURLOPT_RANGE, max (0, $filesize - 128) . '-' . max (0, $filesize - 1));
curl_setopt ($c, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec ();
echo ($content);
...