Задать вопрос
paveluho
@paveluho

Удаленное чтение файла — как собрать указатель файла?

Господа, решил написать удаленное чтение файлов (а именно mp4 со своего сервера, для данной задачи только именно это и подходит), на сколько известно всем, fopen открывает файл для чтения с опцией r (b истинно добавляем) с начала, т.е. 0 байт. Далее пишем скрипт, все чудесно отдаем плееру, все показывает, спрашиваем range у загруженного файла, точнее то что загрузилось в буфер - с помощью stream_get_contents - отлично все отдает, указатель помещает правильно, что логично, когда файл уже загружается в буфер мы просто сдвигаем указатель принудительно в область скачанного... а вот проблема, то что не скачано... нимогу догнать что запилить...
Я так полагаю надо опять создавать запрос если существует range, то какая функция умеет читать удаленный файл и сдвигать указатель на количество байт, чтобы начать получать файл с помещенного указателя в файл.

fseek не предлагать, он также читает из буфера уже скачанное.

file_get_contents - не надежен, судя по мане.

UPD: суть заключается в том, чтобы запрашивать у удаленного файла name.mp4 середину файла (указатель ставить например на 50 байт из 100 к примеру) например, тогда, когда еще fopen не загрузил файл. stream_get_contents - читает уже у открытого fopen, а это говорит о том, что пока не загрузится файл в буфер, читать бесполезно 50 байт (например), т.к. еще 50 не загрузился... и перемещение указателя не будет выполнено ))) с локальными файлами - без проблем отрабатывает, т.к. читает весь файл сразу, а вот http - конечно иное дело. И доварить нимогу в голове как выполнить чтение удаленного файла...
  • Вопрос задан
  • 153 просмотра
Подписаться 1 Средний Комментировать
Ответ пользователя Boris Köln К ответам на вопрос (2)
@BorisKorobkov Куратор тега PHP
Web developer
Для частичного чтения файла вам поможет отправка заголовка Range: bytes=50-, например, через curl. Ну и сервер, очевидно, тоже должен поддерживать его.
https://www.w3.org/Protocols/rfc2616/rfc2616-sec14...

P.S. При чем тут вообще PHP? Если надо скачать файл с одного сервера на другой - wget из консоли. Если на клиента (браузер) - флэш-плеер.
Ответ написан