apache — php загрузить файл с кодом ошибки 3

Загрузить файл большего размера (> 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, и понятия не имею, как решить эту проблему.

Использование приведенного ниже программного обеспечения и его версий

  1. php 5.6.17
  2. apache 2.4.18

Ниже приводится 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']);
}
?>

4

Решение

У меня была такая же проблема в тюрьме 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 в качестве фильтра вместо обработчика, но я не проверял это здесь.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]