我有以下HTML和PHP代码来处理将多个文件上传到服务器中的文件夹。 只有一个文件(来自选定的上传文件)上传到服务器。 有人可以告诉我我做错了什么吗?我刚刚开始使用PHP / HTML,对此任务一无所知。
HTML:
<form action="upload_multi15_action.php" method="POST" enctype="multipart/form-data">
Select files to upload: <br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<br />
<input type="submit" value="Upload files">
</form>
&#13;
PHP:
$count=0;
echo '<pre>';
foreach($_FILES['userfile']['name'] as $to_upload){
$upload = "./".basename($to_upload);
move_uploaded_file($_FILES['userfile']['tmp_name'][$count], $upload) or
die("Possible file upload attack!\n");
$count = $count++;
$upload = '';
}
print "</pre>";
&#13;
我完全迷失了PHP代码的错误。
答案 0 :(得分:1)
更改此foreach($_FILES['userfile']['name'] as $to_upload){
到foreach($_FILES['userfile']['name'] as $key => $to_upload){
然后像这样使用$ key
move_uploaded_file($_FILES['userfile']['tmp_name'][$key], $upload)
答案 1 :(得分:0)
$count = $count++;
正如它在这里写的那样,我希望它总是为0.后增量运算符返回值,然后递增它。但是您将返回的值分配回同一个变量。因此,下次尝试移动上传的文件时,它已不再存在,因为您已经移动了第一个文件。
你真的不需要以这种方式保留一个计数器,你可以预先给你索引,就像我在这里做的那样。
<?php
echo '<pre>';
foreach($_FILES['userfile']['name'] as $count => $to_upload){
if($_FILES['userfile']['error'][$count] != 0) {
echo "Error {$_FILES['userfile']['error'][$count]} on $count<br>";
continue;
}
$upload = "./".basename($to_upload);
move_uploaded_file($_FILES['userfile']['tmp_name'][$count], $upload) or
die("Possible file upload attack!\n");
$upload = '';
}
print "</pre>";
作为旁注,您应该检查传入的名称。例如:正如其中所写,有人可以通过上传具有相同名称的PHP文件来替换您自己的上传文件。 [编辑]如果您希望文件是特定类型的文件,那么检查传入数据通常也是个好主意。例如,如果您期望图像文件,请确保getimagesize
可以解析文件。
或者,如果您不想使用foreach
中的索引,并希望保留基于增量的方法,只需将$count = $count++;
更改为$count++;
这将删除分配后递增返回值返回$count
变量,导致$count
永不改变。