move_uploaded_file不能在我的本地机器上运行

时间:2015-02-01 14:11:59

标签: php

我是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。我在与上传脚本文件相同的目录中创建uploads文件夹。

1 个答案:

答案 0 :(得分:0)

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

name原始上传文件的名称,tmp_name是上传后文件的位置。 Manual Page

下面的修正版。我还添加了对目标目录的检查,并在不可用的情况下自动创建它。

<?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>