Проверьте тип файла (FLV) перед загрузкой файла PHP во временную папку, только прочитав только 3 байта файла
Первые 3 байта FLV файла являются сигнатурой "FLV". Теперь мой вопрос:
Есть ли возможность в PHP обрабатывать загрузки файлов, чтобы мы могли подключиться к входному потоку загрузки файла и проверить первые 3 байта?
Сценарий: я не хочу, чтобы полный файл был загружен (во временную папку), а затем проверьте, является ли файл FLV или нет, я просто хочу прочитать первые несколько байтов загрузки потока, и если это не "FLV", затем верните/выйдите.
Файл должен быть загружен с помощью формы на основе HTML. Невозможно полагаться на javascript, флеш-загрузчик или любые обходные решения для проверки на стороне клиента, то есть нужно чистое PHP-решение.
Я уже знаю, что PHP не передает управление нашему script, пока он не завершит загрузку файла во временную папку и не запустит глобальные переменные i.e $_POST
$_GET
$_FILES
и т.д.
Также есть несколько аналогичный вопрос:
Как загрузить файл байта по байту в php
но ответы не удовлетворяют моему требованию/вопросу.
Любые идеи действительно оценены!
Спасибо
Ответы
Ответ 1
Сначала установите 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). Там вы можете сделать свою фильтрацию.
Ответ 2
@burhan-khalid предоставил более свежий и правильный ответ выше.
Короткий ответ нет с вашими ограничениями.
Вы не можете получить доступ к этому файлу с PHP до тех пор, пока он не будет загружен на сервер. После его загрузки вы можете прочитать его, но не раньше, по крайней мере, не без какого-либо программного обеспечения на стороне клиента, которое позволит вам передавать его на PHP вместо обычной отправки формы.