Php 上载文件时遇到问题

Php 上载文件时遇到问题,php,file-upload,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 functi

我上传文件时遇到问题。首先,我有一门课:

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\u upload\u file(about.pdf)[function.move upload file]:无法打开流:中没有此类文件或目录

警告:移动上传的文件()[function.move upload file]:无法将中的“c:\xampp\tmp\php13.tmp”移动到“about.pdf”

无法将文件上载到最终目标

说:

如果文件名是有效的上载文件,但由于某种原因无法移动,则不会执行任何操作,
move\u upload\u file()
将返回FALSE。此外,将发出警告

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

move\u uploaded\u file()
safe模式
open\u basedir
aware。但是,仅在目标路径上设置限制,以允许移动文件名可能与此类限制冲突的上载文件
move\u upload\u file()
只允许移动通过PHP上传的文件,从而确保此操作的安全性

我的结论是:代码中没有错误,PHP配置不允许将文件移动到目标目录。您应该研究
安全模式
打开\u basedir
施加的限制,以了解移动操作失败的确切原因。

说明:

如果文件名是有效的上载文件,但由于某种原因无法移动,则不会执行任何操作,
move\u upload\u file()
将返回FALSE。此外,将发出警告

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

move\u uploaded\u file()
safe模式
open\u basedir
aware。但是,仅在目标路径上设置限制,以允许移动文件名可能与此类限制冲突的上载文件
move\u upload\u file()
只允许移动通过PHP上传的文件,从而确保此操作的安全性

我的结论是:代码中没有错误,PHP配置不允许将文件移动到目标目录。您应该研究
安全模式
open_basedir
施加的限制,以了解移动操作失败的确切原因。

如果我以“my_文件”的形式上载文件,
“$repository/$this->name.pdf”
将计算为
np/my_file.pdf
。这将把您的目标目录放在tmp目录中。tmp目录应该已经存在并且是可写的,因此请确保
np
目录存在于
tmp
目录中。如果文件丢失,
move\u uploaded\u file()
函数将不会自动创建该文件。由于
np
目录丢失,我得到了与您相同的错误

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

如果我上传一个文件作为“我的文件”,那么
“$repositry/$this->name.pdf”
将计算为
np/my\u file.pdf
。这将把您的目标目录放在tmp目录中。tmp目录应该已经存在并且是可写的,因此请确保
np
目录存在于
tmp
目录中。如果文件丢失,
move\u uploaded\u file()
函数将不会自动创建该文件。由于
np
目录丢失,我得到了与您相同的错误


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

请修复代码格式,您需要再次缩进所有内容请修复代码格式,您需要再次缩进所有内容