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
,然后立即删除。请修复代码格式,您需要再次缩进所有内容请修复代码格式,您需要再次缩进所有内容