Первые 3 байта FLV-файла являются сигнатурой «FLV». Теперь мой вопрос:
Есть ли возможность в PHP обрабатывать загрузки файлов, чтобы мы могли подключиться к входному потоку загрузки файла и проверить первые 3 байта?
Сценарий: я не хочу, чтобы полный файл был загружен (во временную папку), а затем проверьте, является ли файл FLV или нет, я просто хочу прочитать первые несколько байтов загрузки потока, и если это не «FLV», тогда вернуться / выход.
Файл необходимо загрузить с помощью HTML-формы. Невозможно полагаться на javascript, флеш-загрузчик или любые обходные решения для проверки на стороне клиента, т.е. нужно чистое PHP-решение.
Я уже знаю, что PHP не передает контроль над нашим скриптом, пока он не завершит загрузку файла во временную папку и $_FILES
глобальных переменных, т.е. $_POST
$_GET
$_FILES
и т. Д.
Также здесь возникает несколько схожий вопрос: как загрузить файл байта байтом в php
но ответы не удовлетворяют моему требованию / вопросу.
Любые идеи действительно оценены!
благодаря
Сначала установите session.upload_progress.enabled
в свой php.ini
.
Затем используйте session.upload_progress
чтобы отслеживать, сколько байтов было загружено. Как только вы достигли минимального порога, проверьте, загружен ли временный файл, он будет в $_SESSION[unique_key]['files'][0]['tmp_name']
. Если файл не соответствует, установите для параметра $_SESSION[unique_key]["cancel_upload"]
значение TRUE
, и файл будет отклонен.
Чтобы получить unique_key
:
ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")];
Если вышеуказанное не работает (я его еще не тестировал), то единственным вашим правом было бы создать свой собственный обработчик для PHP либо как модуль Apache (или лучше, как пользовательское приложение CGI). Там вы можете сделать свою фильтрацию.
@ burhan-khalid предоставил более свежий и правильный ответ выше.
Короткий ответ – нет с вашими ограничениями.
Вы не можете получить доступ к этому файлу с помощью PHP до тех пор, пока он не будет загружен на сервер. После его загрузки вы можете прочитать его, но не раньше, по крайней мере, не без какого-либо программного обеспечения на стороне клиента, которое позволит вам передать его на PHP вместо обычной отправки формы.