Как вывести сообщение какая возникла ошибка, если к примеру:
post_max_size = 2M
а я отправляю через post 4М, то в консоли получаю 500 (Internal Server Error).
echo $_FILES[];
в консоли сообщает: undefined
echo $_FILES["images"]["error"];
ничего не сообщает
Анатолий, а это как - размер файла превысил максимально допустимое значение, но самого файла на сервере нет? Ты на фронте сделал валидацию, проверил размер и отправил POSt на сервер? Логика вообще какая?
Артур Ш, валидация у меня там и там. Вопрос был про ошибки $_FILES, описанные в https://www.php.net/manual/ru/features.file-upload....
Еще раз:
1) Если валидация на фронте есть, то смысл тогда проверять на ошибки?
2) Если валидации нет, то смысл проверять на ошибки, если POST не пройдет?
Отправить GET конечно можно, но вопрос зачем?
Если на стороне бека $_FILES - undefined, то и так понятно что он не определен.
Вопрос: "Вы загрузили слишком большой файл" это единственная причина неудачи? Если да, то ответ зачту как верный, если нет, то Ваш ответ не несет какой-то пользы в моем просветлении по этому вопросу.
Анатолий, при превышении post_max_size все тело post запроса отбрасывается, а php не предлагает четкого индикатора срабатывания post_max_size, поэтому данную ситуацию можно отследить только косвенно - если форма отправлена, но нет вообще никаких данных, значит, вероятно, превышен post_max_size.
Если files пуст, но присутствуют другие поля формы, то пользователь не загружал файл вообще.
Чтобы определить была ли отправлена форма вообще, официальная дока предлагает добавить get параметр. Пример из ответа я скопипастил как раз оттуда. Но вы можете использовать любой другой способ. Например, if ($_SERVER['REQUEST_METHOD'] == 'POST') или выставлять особый http заголовок при отправке формы ajax'ом.
К примеру, что значит "вероятно" на сколько вероятно 1%, 99% или сколько?
К примеру, админ прописал на nginx: client_max_body_size 2M
GET пройдет, а POST - нет! и что?
Если капнуть глубже, то можно еще много чего найти.
PS. Короче, верификаторы сделаны на фронте и беке, а про ошибки можно забыть, так как они появятся только у хакера, а затем мне его о чем-то предупреждать? ))
Не совсем я понял тему с $_FILES, кому нужна информация по ошибкам? Я имею ввиду зачем информацию по ошибкам вообще в скрипт вставлять. Пользователю это не нужно, да и разработчик сам проверит.
Анатолий, "вероятно" в данном случае означает то, что факт срабатывания post_max_size невозможно определить однозначно, так как в PHP нет инструментов для конкретно этого случая.
К примеру, админ прописал на nginx:
client_max_body_size 2M
GET пройдет, а POST - нет! и что?
POST не пройдёт, но на стороне PHP вы об этом вообще не узнаете, так как nginx зарубит запрос с ошибкой "413 Request Entity Too Large" и не отправит его в PHP.
Не совсем я понял тему с $_FILES, кому нужна информация по ошибкам?
Вам и нужна. Если в $_FILES['images']['error'] какое-то значение, отличное от UPLOAD_ERR_OK, то файл не загружен. Например, по причине превышения upload_max_filesize.
Анатолий, у вас не "отправка GET и POST одновременно". Это всё-таки POST, но с добавлением query string, который php парсит и заносит в $_GET независимо от метода.
Vamp, а вот если 2 раза вызывать upload.php отправляя вначале GET, а потом POST. То тут надо еще что-то дописывать, так как запросы "не видят" друг друга!