У меня есть форма загрузки файла, в которой я также хочу использовать Google reCAPTCHA.
Если у меня есть следующее
<form method="post">
<input type="file" name="filename">
<div class="g-recaptcha" data-sitekey="***"></div>
<input id="submit" name="submit" type="submit" value="Submit">
</form>
Я могу использовать reCAPTCHA, но не могу загрузить файл.
Однако, если я использую:
<form method="post" enctype="multipart/form-data">
<input type="file" name="filename">
<div class="g-recaptcha" data-sitekey="***"></div>
<input id="submit" name="submit" type="submit" value="Submit">
</form>
Я могу загрузить файл успешно, и использовать reCAPTCHA при условии, что файл является текстовым файлом. Я не могу заставить его работать, если я пытаюсь загрузить файл PDF.
При загрузке текстового файла $ _POST содержит «g-recaptcha-response», но при загрузке pdf $ _POST не содержит «g-recaptcha-response».
Может кто-нибудь объяснить, что здесь происходит не так?
РЕДАКТИРОВАТЬ
Кажется, что это на самом деле проблема с размером файла.
Файлы размером более ~ 200 КБ не могут быть отправлены независимо от их формата.
В моем файле php.ini есть upload_max_filesize = 2M, поэтому я не уверен, почему 200kb слишком велики …
Какие-нибудь мысли?
РЕДАКТИРОВАТЬ 2: Больше информации
Похоже, что $ _FILE содержит код ошибки 3: UPLOAD_ERR_PARTIAL.
Я не понимаю, почему файл не может быть загружен полностью.
РЕДАКТИРОВАТЬ 3: Получение где-то
Теперь я могу загружать файлы. Кажется, мне нужно поставить reCAPTCHA до файл ввода.
<form method="post" enctype="multipart/form-data">
<div class="g-recaptcha" data-sitekey="***"></div>
<input type="file" name="filename">
<input id="submit" name="submit" type="submit" value="Submit">
</form>
Кто-нибудь может уточнить, почему это может иметь место?
Редактировать 4: Говорили слишком рано
При изменении порядка g-recaptcha-response ‘появляется в $ _POST, но я все еще получаю код ошибки 3: UPLOAD_ERR_PARTIAL.
Редактировать 5
Похоже, что файл загружается правильно, так как я вижу его в параметрах заголовка (отладчик firefox). Похоже, что php просто неправильно заполняет массив $ _FILE …
Я попробовал тот же код на другом сервере, и он работал нормально.
Похоже, проблема была в том, что на сервере, который я настроил, возникли проблемы с конфигурацией. На самом деле это не имеет ничего общего с взаимодействием reCAPTCHA и файла input + enctype.
Я буду обновлять, если я выясню, в чем проблема конфигурации.
Других решений пока нет …