Загрузить более крупный файл (> 10KB) получит error code 3(UPLOAD_ERR_PARTIAL) in $_FILES['file']['error']
и маленький файл (<10KB) будет загружен успешно.
Если файл превышает лимит php post_max_size или upload_max_filesize , он должен получить error code 1 UPLOAD_ERR_INI_SIZE
. Однако, неверный error code 3 UPLOAD_ERR_PARTIAL
.
Я предполагаю, что у него что-то не так с настройкой apache , и я понятия не имею, как решить эту проблему.
Использование ниже программного обеспечения и его версий
Ниже приведен php.ini
:
post_max_size = 8M file_uploads = On upload_tmp_dir = "/tmp" upload_max_filesize = 2M
и при загрузке более крупного файла (hi.png) журнал ошибок в /var/log/httpd-error.log
PHP Notice: Missing mime boundary at the end of the data for file hi.png in Unknown on line 0
здесь index.php
<!DOCTYPE html> <html> <body> <form action='upload.php' method='post' enctype='multipart/form-data'> Select image to upload: <input type='file' name='fileToUpload' id='fileToUpload'> <input type='submit' value='Upload Image' name='submit'> </form> </body> </html>
и upload.php
<?php if($_FILES['fileToUpload']['error'] > 0){ echo "error code".$_FILES['fileToUpload']['error']."<br>"; } else{ echo "file name:".$_FILES['fileToUpload']['name']."<br>"; echo "file type:".$_FILES['fileToUpload']['type']."<br>"; echo "file size:".$_FILES['fileToUpload']['size']."<br>"; echo "file path:".$_FILES['fileToUpload']['tmp_name']."<br>"; move_uploaded_file($_FILES['fileToUpload']['tmp_name'],"uploads/".$_FILES['fileToUpload']['name']); } ?>
У меня была та же проблема в тюрьме FreeBSD 10.1 с php 5.6.18 и apache 2.4.18: файлы выше 7950 байт постоянно и последовательно терпят неудачу с ошибкой 3, независимо от того, какие ограничения были установлены.
После возрастов я, наконец, изолировал проблему: PHP-модуль (mod_php56) был скомпилирован с apache2filter SAPI, но включен как обработчик через AddHandler. Решение состояло в том, чтобы просмотреть параметры порта и перестроить mod_php56 со стандартными параметрами (без AP2FILTER) .
Длинная история. Проверьте, есть ли у вас опция порта OPTIONS_FILE_SET+=AP2FILTER
(Apache 2 Filter SAPI), но PHP настроил обычный способ как обработчик ( AddType application/x-httpd-php .php
). Удаление опции (по умолчанию используется сборка / порт), а восстановление пакета mod_php56 решило проблему для меня.
Чтобы убедиться, что это ваш случай, вы можете повторить php_sapi_name()
. если это apache2filter
но php включен с помощью директивы AddHandler
, у вас есть та же проблема. После восстановления ваш php_sapi_name () должен быть apache2handler
. Оба параметра также можно проверить в phpinfo()
, как «Apache 2.0 Filter» и «Apache 2.0 Handler» соответственно.
Обратите внимание, что это не объясняет, почему это действительно сломало загрузки (или почему модуль работал с конфигурацией Handler в первую очередь). Вы также можете добиться успеха, включив mod_php в качестве фильтра вместо этого в качестве обработчика, но я не проверял это здесь.