我有一个大问题,我无法解决..
我必须上传多个文件,这就是我使用的
HTML:
<form action="" method="post" enctype="multipart/form-data">
Seleziona uno o più file<br />
<input name="upload[]" type="file" multiple="multiple" />
<input type="hidden" name="pathFileToUpload" value="<?php echo $dirToScan ?>">
<input type="submit" value="Carica file" />
</form>
PHP:
$target_dir = $_POST['pathFileToUpload'];
$total = count($_FILES['upload']['name']);
for ($i = 0; $i < $total; $i++) {
$tmpFilePath = $_FILES['upload']['tmp_name'][$i];
if (move_uploaded_file($tmpFilePath,$target_dir))
echo "<script>alert('upload')</script>";
else
echo "<script>alert('Not uploaded')</script>";
}
所以,我可以看到文件正确传递给服务器,所以$ tmpFilePath包含php中文件的临时路径,而$ target dir是正确的,但每次上传都出错而且move_uplaoded_file返回false。
我也尝试用一些路径替换$ target_dir,我确信它们存在,但没有。
该函数有权在服务器中移动文件,因为首先只有一个上传文件,它才能完美运行......
PS:我已经在论坛中搜索了,但是没有发现任何我的情况,我尝试使用$ _SERVER ['Document_root']找到很多解决方案。'uploads /'但已经没有了......答案 0 :(得分:1)
move_uploaded_file
function应该接收您要创建的文件的名称作为第二个参数:
bool move_uploaded_file ( string $filename , string $destination )
在您的代码中看起来$target_dir
变量只是文件夹的名称,而不是完整的目标(文件夹+要创建的新文件),否则您就知道了php
到覆盖目录,并没有任何意义。
您可以使用从用户处获得的文件的原始名称:
$target_dir = $_POST['pathFileToUpload'];
$total = count($_FILES['upload']['name']);
for ($i = 0; $i < $total; $i++) {
$tmpFilePath = $_FILES['upload']['tmp_name'][$i];
$name = basename($_FILES["upload"]["name"][$i]);
if (move_uploaded_file($tmpFilePath, $target_dir . "/" . $name))
echo "<script>alert('upload')</script>";
else
echo "<script>alert('Not uploaded')</script>";
}
或者给文件一个新的随机名称。