Su *_*lly 4 php apache freebsd file-upload
上传更大的文件(> 10KB)将获得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
Run Code Online (Sandbox Code Playgroud)
当上传较大的文件(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
Run Code Online (Sandbox Code Playgroud)
这是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>
Run Code Online (Sandbox Code Playgroud)
和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']);
}
?>
Run Code Online (Sandbox Code Playgroud)
小智 8
我在使用php 5.6.18和apache 2.4.18的FreeBSD 10.1 jail中遇到了同样的问题:无论设置了哪个限制,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
但通过AddHandler
指令启用PHP ,你有同样的问题.重建后,你的php_sapi_name()应该是apache2handler
.这两个选项也可以分别phpinfo()
作为"Apache 2.0 Filter"和"Apache 2.0 Handler"进行检查.
请注意,这并不能解释为什么它实际上破坏了上传(或者为什么模块首先使用Handler配置).你也可以通过启用mod_php作为过滤器而不是处理程序来成功,但我没有在这里检查.
归档时间: |
|
查看次数: |
3116 次 |
最近记录: |