仅当文件大小超过特定大小时,PHP文件上载才会失败

时间:2014-11-22 08:22:48

标签: php apache

我有一个PHP文件上传代码段(HTML和PHP代码),上传工作正常,文件较小,几KB,20KB,但是,从30KB或以上开始,上传将失败,$ _FILES ['userfile'] ['error']显示错误代码2:表示“UPLOAD_ERR_FORM_SIZE”,表示表格上的MAX_FILE_SIZE设置,目前为200000(200KB,足够大);我检查了所有相关的PHP设置,似乎没问题。

下面列出了所有源代码,PHP设置和PC环境,有人可以提供解决方案吗?提前谢谢。

HTML代码

<!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代码(fupload.php)

<?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设置

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:

二手PC环境

Latest XAMPP, Windows 7
C: available size: 14.5GB
D: available size: 36.2GB

1 个答案:

答案 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,问题就消失了!

=============================================== ==================================

基于上述细节和现象,希望有人可以解释一下本质上的原因以及问题究竟是什么。