php上传文件错误代码3 [英] php upload file error code 3

查看:55
本文介绍了php上传文件错误代码3的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

上传更大的文件(> 10KB) 将在 $_FILES['file']['error'] 和 small文件(<10KB) 将成功上传.

Upload bigger file( > 10KB) will get error code 3(UPLOAD_ERR_PARTIAL) in $_FILES['file']['error'] and small file( < 10KB) will upload successfully.

如果文件超过限制 php post_max_sizeupload_max_filesize,它应该得到错误代码 1 UPLOAD_ERR_INI_SIZE.但是,获得 error code 3 UPLOAD_ERR_PARTIAL 这是不正确.

If the file exceed the limit php post_max_size or upload_max_filesize, it should get error code 1 UPLOAD_ERR_INI_SIZE. However, getting error code 3 UPLOAD_ERR_PARTIAL which is incorrect.

我猜是apache设置有问题,不知道如何解决这个问题.

I guess it has something wrong with apache setting, and have no idea how to solve this problem.

使用以下软件及其版本

  1. php 5.6.17
  2. 阿帕奇 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

and when upload larger file(hi.png) the error log in /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

here are 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

and the 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,无论设置了哪些限制.

I had the same problem in a FreeBSD 10.1 jail with php 5.6.18 and apache 2.4.18: Files above 7950 bytes would constantly and consistently fail with error 3, no matter which limits were set.

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

After ages I finally isolated the issue: The PHP module (mod_php56) was compiled with apache2filter SAPI but enabled as a handler via AddHandler. The solution was to review the port options and rebuild mod_php56 with standard options (without AP2FILTER).

长话短说:检查您是否打开了端口选项 OPTIONS_FILE_SET+=AP2FILTER(Apache 2 Filter SAPI),但 PHP 将通常的方式配置为处理程序(AddType application/x-httpd-php .php ).删除选项(如默认构建/端口所做的那样),并重建 mod_php56 包为我解决了这个问题.

Long story: Check if you have port option OPTIONS_FILE_SET+=AP2FILTER (Apache 2 Filter SAPI) on, but PHP configured the usual way as a handler ( AddType application/x-httpd-php .php ). Removing the option (as the default build/port does), and rebuilding the mod_php56 package solved the problem for me.

要验证这是否也是您的情况,您可以回显 php_sapi_name().如果它是 apache2filter 但通过 AddHandler 指令启用了 php,你会遇到同样的问题.重建后,你的 php_sapi_name() 应该是 apache2handler.这两个选项也可以在 phpinfo() 中检查,分别作为Apache 2.0 Filter"和Apache 2.0 Handler".

To verify if this is your case too, you can echo the php_sapi_name(). if it is apache2filter but php is enabled via AddHandler directive, you have the same problem. After rebuild, your php_sapi_name() should be apache2handler. Both options are also checkable in phpinfo(), as "Apache 2.0 Filter" and "Apache 2.0 Handler" respectively.

请注意,这并没有解释为什么它实际上破坏了上传(或者为什么该模块首先与 Handler 配置一起工作).您也可以通过启用 mod_php 作为过滤器而不是处理程序来成功,但我没有在这里检查.

Note that this does not explain why it actually broke uploads (or why the module worked with the Handler configuration in the first place). You might also succeed by enabling mod_php as a filter instead as a handler, but I did not check that here.

这篇关于php上传文件错误代码3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆