【问题标题】:Having trouble uploading a file上传文件时遇到问题
【发布时间】:2011-02-14 04:47:34
【问题描述】:

我在上传文件时遇到问题。首先我有一个类:

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]: Unable to move 'c:\xampp\tmp\php13.tmp' to 'about.pdf' in...

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

【问题讨论】:

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

标签: php file-upload


【解决方案1】:

The manual 说:

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

根据手册,这是唯一发出警告的情况,所以我认为这是您尝试移动文件时发生的情况。

move_uploaded_file() 既知道safe mode 又知道open_basedir。但是,限制仅放置在目标路径上,以允许移动上传的文件,其中 filename 可能与此类限制冲突。 move_uploaded_file() 只允许移动那些通过 PHP 上传的文件,从而确保此操作的安全性。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2017-12-26
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多