我无法上传文件。首先,我有一个班级:
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'中......
无法将文件上传到最终目的地。
答案 0 :(得分:3)
如果 filename 是有效的上传文件,但由于某种原因无法移动,则不会执行任何操作,
move_uploaded_file()
将返回FALSE。此外,还会发出警告。
这是根据手册发出警告的唯一情况,因此我假设这是您尝试移动文件时发生的情况。
move_uploaded_file()
同时感知safe mode
和open_basedir
。但是,仅对目标路径施加限制,以允许移动 filename 可能与此类限制冲突的上载文件。move_uploaded_file()
通过仅允许移动通过PHP上传的文件来确保此操作的安全性。
我的结论:您的代码中没有错误,您的PHP配置不允许您将文件移动到目标目录。您应该研究safe mode
和open_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
,然后立即删除。