php上传文件错误代码3

标签 php apache file-upload freebsd

上传更大的文件 ( > 10KB) 将在 $_FILES['file']['error'] 和 中得到 错误代码 3(UPLOAD_ERR_PARTIAL) file( < 10KB) 将上传成功。

如果文件超过限制 php post_max_sizeupload_max_filesize,它应该得到错误代码 1 UPLOAD_ERR_INI_SIZE。但是,获取错误代码 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']);
}
?>

最佳答案

我在装有 php 5.6.18 和 apache 2.4.18 的 FreeBSD 10.1 jail 中遇到了同样的问题:无论设置了哪个限制,超过 7950 字节的文件都会持续不断地失败并显示错误 3。

多年之后,我终于找出了这个问题:PHP 模块 (mod_php56) 是使用 apache2filter SAPI 编译的,但通过 AddHandler 作为处理程序启用。解决方案是检查端口选项并使用标​​准选项(没有 AP2FILTER)重建 mod_php56

长话短说:检查您是否启用了端口选项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 启用为过滤器而不是处理程序来获得成功,但我没有在此处进行检查。

关于php上传文件错误代码3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35006344/

相关文章:

php - 循环包含一个变量

apache - 带有客户端证书主题名称的 Tomcat 7 访问日志

django - 统一码编码错误 : 'ascii' codec can't encode character

java - 处理多部分/表单数据

带和不带 WWW 的 Apache 重定向 URL

php - jQuery 文件上传生成奇怪的 $_FILES 数组

php - 为什么 PHP cURL 可以执行请求,而 jQuery AJAX 却不能?

php - 在数据库中插入记录的未定义索引

php - 将实时视频流式传输到网站

linux - Apache tomcat : URL based redirection partially works