move_uploaded_file无法在我的本地计算机上工作


move_uploaded_file wont work on my local machine

我是PHP领域的新手。这是我尝试上传文件:

<?php  
    if(isset($_FILES['file'])) {
        $file = $_FILES['file'];
        if($file['error'] === 0) {
            $distination = 'uploads/';
            $file_ext = pathinfo($file['name'], PATHINFO_EXTENSION);
            $filename = $distination . uniqid('', true) . '.' . $file_ext;
            if(!move_uploaded_file($file['name'], $filename)) {
                echo "File upload failed!";
            }
        }
    }
?>
<form action="testupload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload">
</form>

move_uploaded_file的返回值始终false 。我在与上传脚本文件相同的目录中创建上传文件夹。

您的主要问题是您使用name而不是数组中的tmp_name$_FILES

name是上传文件的原始名称,tmp_name是上传后文件的位置。手册页

修复版本如下。我还添加了对目标目录的检查,如果不可用,则自动创建它。

<?php  
    if(isset($_FILES['file'])) {
        $file = $_FILES['file'];
        if($file['error'] === 0) {
            $distination = 'uploads/';
            if(!file_exists($distination)){
                mkdir($distination, 0777, true);
            }
            $file_ext = pathinfo($file['name'], PATHINFO_EXTENSION);
            $filename = $distination . uniqid('', true) . '.' . $file_ext;
            print_r($file);
            if(!move_uploaded_file($file['tmp_name'], $filename)) {
                echo "File upload failed!";
            }
        }
    }
?>
<form action="testupload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload">
</form>