Загрузить файл большего размера (> 10 КБ) получите 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» и «Обработчик Apache 2.0» соответственно.
Обратите внимание, что это не объясняет, почему он фактически прервал загрузку (или почему модуль работал с конфигурацией обработчика в первую очередь).
Вы также можете добиться успеха, включив mod_php в качестве фильтра вместо обработчика, но я не проверял это здесь.
Других решений пока нет …