无法上传文件

时间:2010-04-30 10:59:32

标签: php file-upload

我无法上传文件。首先,我有一个班级:

class upload

{
private $name;
private $document;
public function __construct($nme,$doc)
{
    $this->setName($nme);
    $this->setDocument($doc);
}
public function setName($nme)
{
    $this->name = $nme;
}
public function setDocument($doc)
{
    $this->document = $doc;
}
public function fileNotPdf()
{
    /* Was the file a PDF? */
    if ($this->document['type'] != "application/pdf") 
        {
            return true;
        }
        else
        {
            return false;
        }
}
public function fileNotUploaded()
{
    /* Make sure that the file was POSTed. */
    if (!(is_uploaded_file($this->document['tmp_name'])))
    {
        return true;
    }
    else
    {
        return false;
    }
}
public function fileNotMoved($repositry)
{
        /* move uploaded file to final destination. */
        $result = move_uploaded_file($this->document['tmp_name'],
        "$repositry/$this->name.pdf");

        if($result)
        {
            return false;
        }
        else
        {
            return true;
        }
}
}

现在是我的主页:

$docName = $_POST['name'];

$page = $_FILES['doc'];

if($_POST['submit'])

{
/* Set a few constants */
$filerepository = "np";
$uploadObj = new upload($docName, $page);
if($uploadObj->fileNotUploaded()) 
{
    promptUser("There was a problem uploading the file.","");
}
elseif($uploadObj->fileNotPdf())
{
    promptUser("File must be in pdf format.","");
}
elseif($uploadObj->fileNotMoved($filerepository))
{
    promptUser("File could not be uploaded to final destination.","");
}
else
{       
    promptUser("File has been successfully uploaded.","");
}
}

我得到的错误:

  

警告: move_uploaded_file(about.pdf)[function.move-uploaded-file]:无法打开流:没有这样的文件或目录......

     

警告: move_uploaded_file()[function.move-uploaded-file]:无法将'c:\ xampp \ tmp \ php13.tmp'移动到'about.pdf'中......

     

无法将文件上传到最终目的地。

2 个答案:

答案 0 :(得分:3)

The manual说:

  

如果 filename 是有效的上传文件,但由于某种原因无法移动,则不会执行任何操作,move_uploaded_file()将返回FALSE。此外,还会发出警告。

这是根据手册发出警告的唯一情况,因此我假设这是您尝试移动文件时发生的情况。

  

move_uploaded_file()同时感知safe modeopen_basedir。但是,仅对目标路径施加限制,以允许移动 filename 可能与此类限制冲突的上载文件。 move_uploaded_file()通过仅允许移动通过PHP上传的文件来确保此操作的安全性。

我的结论:您的代码中没有错误,您的PHP配置不允许您将文件移动到目标目录。您应该研究safe modeopen_basedir强加的限制,以了解移动操作失败的原因。

答案 1 :(得分:2)

如果我将文件上传为“my_file”,"$repositry/$this->name.pdf"将评估为np/my_file.pdf。这会将您的目标目录放在tmp目录中。 tmp目录应该已经存在且可写,因此请确保np目录中存在tmp目录。 move_uploaded_file()函数如果缺失则不会自动创建。在缺少np目录的情况下,我遇到了同样的错误。

另请注意,您不应将上载的文件保存到tmp目录的子目录中。我使用XAMPP,当我运行您的代码时,上传的文件将移至tmp/np,然后立即删除。