2010-10-09 68 views
0

有趣的问题我似乎遇到过。我有一个表单上传图像并将其存储在数据库表中。表单上传图像文件OK并使其可用于处理。问题如下:使用move_uploaded_file到指定的目录不起作用,但是使用copy()到这个目录呢。PHP move_uploaded_file/copy issue

的代码当前如下:

$file = $_FILES['doc_path']; 

    $ext = array_pop(explode('.', $file['name'])); 
    $filename = uniqid() . '.' . $ext; 

    if ($file['error'] == UPLOAD_ERR_NO_FILE && ! strlen($this->filename)) { 
    throw new Exception('Please select a file to upload'); 
    } elseif ($file['error'] == UPLOAD_ERR_NO_FILE) { 
    return true; // already have a file 
    } elseif ($file['error']) { 
    throw new Exception('File upload error'); 
    } elseif (! $file['size']) { 
    throw new Exception('File is of zero length'); 
    } else { 

    $path = 'uploads/' . $filename; 


    if (! move_uploaded_file($file['tmp_name'], $path)) { 
    throw new Exception('Could not upload file'); 
    } 

    return $filename; 
    } 

我已经检查目标目录存在,并且该目录是可写的。使用move_uploaded_file()不会产生错误,只会捕获“无法上传文件”异常。

本来想过如果这是一个权限问题,那么用move_uploaded_file代替copy就行不通了?

+0

你有没有得到这个修复?我有同样的问题。 – Scott 2011-07-21 16:04:45

+0

oops,没有扩展下面的评论线程。我找到了print_r($ _ FILES);对我非常有帮助。谢谢。 – Scott 2011-07-21 17:27:32

回答

0

使用move_uploaded_file()不会产生错误,只会捕获“无法上传文件”异常。

这可能是由于您的错误报告设置。

error_reporting(E_ALL);echo error_get_last();显示什么?

+0

嗨,error_get_last报告:阵列([型] => 2048 [消息] =>只有变量应该通过引用传递[文件] => /application/modules/admin/forms/Page.php [行] => 211)这是指行$ ext = array_pop ....看不出有什么不同。 – simnom 2010-10-09 15:26:02

+0

@simnom确实存在'$ file ['tmp_name']'?请参阅手册:'如果文件名不是有效的上传文件,那么不会发生动作,和move_uploaded_file()以将返回FALSE.' – 2010-10-09 15:27:57

+0

的move_uploaded_file语句之前添加回声$文件[“不对tmp_name”]生产“的/ tmp/phpfyaV0G “所以我假设是的。 – simnom 2010-10-09 15:30:41

0

@simnon -

我认为这可能是一个路径问题。无论是在你的来源还是你的目标。

尝试改变:

$path = 'uploads/' . $filename; 

要:

$path = '/uploads/' . $filename; 
+0

嗨,不用怕,试过了,没有什么区别。 – simnom 2010-10-09 15:25:04