$ _FILES为空,enctype已设置,我之前使用过它

时间:2013-04-15 12:07:43

标签: php file upload isnullorempty

FILES是空的,但不应该。我之前上传过文件。该文件足够小,我正在使用enctype(对于许多其他人来说这是问题)。我正在上传txt文件。我也在另一个php文件中使用了同样精确的设置来将更大的txt文件上传到同一目录,并且它可以正常工作(我实际上只是复制了其他文件中的代码!)。

这是我的表格(最上面的一个提交底部):

<form name=fileForm action='FTtoXML.php' enctype="multipart/form-data" method='post'>
<input type='file' name='file' id='file' onChange=document.forms['saveForm'].submit()>
</form>

<form name=saveForm id=saveForm action='FTtoXML.php' enctype="multipart/form-data" method=post>
<input type=hidden id=gameToSave name=gameToSave value='yes'>
</form>

然后一些调试php代码:

if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "no file error<p>";
echo "var_dump: ".var_dump($_FILES)."<br>";
echo 'file_uploads: '. ini_get('file_uploads'). '<br />';
echo 'upload_tmp_dir: '. ini_get('upload_tmp_dir'). '<br />';
echo 'upload_max_filesize: '. ini_get('upload_max_filesize'). '<br />';
echo 'max_file_uploads: '. ini_get('max_file_uploads'). '<br />';
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

输出:

var_dump: array(0) { }  
file_uploads: 1
upload_tmp_dir: /tmp
upload_max_filesize: 10M
max_file_uploads: 
Upload: 
Type: 
Size: 0 kB
Temp file:

所以你可以看到没有名字,类型等等。然后当我尝试打开文件时,

if (file_exists("uploads/" . $_FILES["file"]["name"]))
{
echo "filealreadyexists<br>";
}

这是真的,输出: filealreadyexists

所以如果它不存在,似乎是一个空文件名被视为存在?因此,稍后当我尝试移动文件时......

move_uploaded_file($_FILES["file"]["tmp_name"],  "uploads/mydoc.txt");

...它不起作用,当我尝试打开文件时......

$file = fopen("uploads/mydoc.txt", "r") or exit("Unable to open file!");

...它说“无法打开文件!”因为该目录中不存在该文件。

1 个答案:

答案 0 :(得分:2)

将您显示的HTML更改为:

<form name='saveForm' action='FTtoXML.php' enctype="multipart/form-data" method='post'>
<input type='file' name='file' id='file' onChange=document.forms['saveForm'].submit()>
<input type=hidden id=gameToSave name=gameToSave value='yes'>
</form>

这种方式都是一种形式。您提交的底部表单不包含<input type='file'