我有一个PHP文件上传代码段(HTML和PHP代码),上传工作正常,文件较小,几KB,20KB,但是,从30KB或以上开始,上传将失败,$ _FILES ['userfile'] ['error']显示错误代码2:表示“UPLOAD_ERR_FORM_SIZE”,表示表格上的MAX_FILE_SIZE设置,目前为200000(200KB,足够大);我检查了所有相关的PHP设置,似乎没问题。
下面列出了所有源代码,PHP设置和PC环境,有人可以提供解决方案吗?提前谢谢。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>fupload</title>
</head>
<body>
<h3>File upload test</h3>
<form method="POST" action="fupload.php" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="200000" />
<input name="userfile" type="file" size="70"/>
<input type="submit" value="upload" />
</form>
</body>
</html>
<?php
// For test/debug
error_reporting(E_ALL);
ini_set('display_errors',1);
$uploaddir = './up/file/';
$uploadfile = basename($_FILES['userfile']['name']);
echo '$uploadfile='.$uploadfile;
echo '<br />Full upload filespec='.$uploaddir.$uploadfile;
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$uploadfile)) {
echo "File upload done successfully!\n";
// For test/debug, display error code
echo '$_FILES[userfile][error]: '.$_FILES['userfile']['error'];
} else {
echo "File upload failed!\n";
// For test/debug, display error code
echo '$_FILES[userfile][error]: '.$_FILES['userfile']['error'];
}
echo '<pre>';
?>
php.ini:
upload_tmp_dir="C:\xampp\tmp"
upload_max_filesize=20M
post_max_size=100M
memory_limit=128M
(Apache) httpd.conf:
LimitRequestBody 202400
Apache default doc root changed to a folder on D:
Latest XAMPP, Windows 7
C: available size: 14.5GB
D: available size: 36.2GB
答案 0 :(得分:0)
通过更多的尝试,而不是一个很好的解决方案,我找到了自己的解决方法,可以按预期上传任何大小的文件。方法是改变Apache的根文件夹 - 以root身份设置上面的HTML文件(fupload.html)所在的文件夹,就是这样!
说它是一种解决方法而不是一种解决方案,因为关于以下两点,这个问题仍然令我感到奇怪和困惑:
(1)不一致。在我的解决方法之前,似乎存在一个文件大小阈值(30KB):
下面它上传工作正常,如果超过它就失败!为什么会存在这样的阈值?怎么样
阈值恰好是30 KB的某个值?
--------------
请注意,所有文件上载实验都是在允许文件大小远的设置下完成的
大于30KB!
(2)为什么只需更改Apache的doc根文件夹就可以解决问题?
=============================================== ==================================
进一步参考。有关实验的信息
文件夹结构 -
d:\ phptst \
xampp.html(a href =“./ chap4 / fupload.html”......)
d:\ phptst \ chap4 \
fupload.html,
fupload.php
d:\ phptst \ chap4 \ up \ file \
(对于上传的文件)
(1)最初,Apache的根文件夹设置为d:\ phptst \,fupload.html是间接调用并运行的 通过xampp.html,其中包含指向fupload.html的链接,此处出现“30KB”阈值问题。
(2)将Apache的root更改为d:\ phptst \ chap4 \,并调用直接运行fupload.html,问题就消失了!
=============================================== ==================================
基于上述细节和现象,希望有人可以解释一下本质上的原因以及问题究竟是什么。