FILES是空的,但它不应该是空的。我以前上传过文件。文件足够小,我使用enctype(对许多其他人来说这是问题)。我在上传文本文件。我还在另一个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!");
…提示"无法打开文件",因为文件在目录中不存在
将显示的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'