【发布时间】:2016-07-25 08:55:47
【问题描述】:
我在从 PHP 上传文件时遇到问题。奇怪的是,有些文件可以工作,而有些则不能。我可以使用以下脚本重现它:
<!DOCTYPE html>
<html>
<body>
<form action="test.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload" name="submit">
</form>
</body>
</html>
<?php
var_dump($_FILES);
失败时,输出为:
array(1) {
["fileToUpload"]=>
array(5) {
["name"]=>
string(13) "image_2_3.jpg"
["type"]=>
string(0) ""
["tmp_name"]=>
string(0) ""
["error"]=>
int(3)
["size"]=>
int(0)
}
}
据我了解,错误代码 3 表示它是部分上传,但是我不确定为什么它只发生在某些文件上。我在不起作用的文件中看不到模式。例如,其中一个不工作的文件大约是 70kb,而另一个工作的文件是 180kb,所以这似乎不是文件大小相关的问题。
我在 Windows 10 上运行的 docker 容器上运行它。docker 映像基于官方的 PHP 映像。我已经测试了标签 5.5-apache 和 5.6-apache。代码本身是从 Windows 中的已安装卷运行的。
加载的 Apache 模块是:
core mod_so mod_watchdog http_core mod_log_config mod_logio mod_version
mod_unixd mod_access_compat mod_alias mod_auth_basic mod_authn_core
mod_authn_file mod_authz_core mod_authz_host mod_authz_user mod_autoindex
mod_deflate mod_dir mod_env mod_filter mod_headers mod_mime prefork
mod_negotiation mod_php5 mod_rewrite mod_setenvif mod_status
任何想法都会受到赞赏。
编辑:运行一个普通的 php:5.5-apache 映像进行了独立测试,只提到了 PHP 代码,并且仍然能够重现该问题。
在我上次的测试中,这个文件产生了问题:http://s000.tinyupload.com/?file_id=14588523736227077930
而这个工作:http://s000.tinyupload.com/?file_id=03989814485857897493
【问题讨论】:
-
日志文件中有什么内容吗?总是相同的模仿类型失败吗?你只尝试图像文件吗?
-
您必须编辑 PHP.ini 才能允许它。
-
您需要提供更多信息,哪些文件不起作用,哪些文件大小。很可能您的服务器拒绝超过一定大小的文件,那么您需要在 ini 中进行配置(或 htaccess,如果允许更大的文件大小 + 更大的上传大小)
-
如前所述,这不是文件大小问题,因为有些文件很小,有些文件较大,反之亦然。我尝试过文本文件、二进制文件(exe、xls、jpg、json)等。我看不出有什么模式可以说明什么有效,什么无效。
-
可以分享任意两个文件吗?其中一个有效,另一个没有。如果不检查文件或编写代码,则无法确定这里的问题。