2012-02-28 131 views
0

后失踪上传后,print_r输出的图像场如下PHP:文件上传

Array 
(
    [name] => foo.png 
    [type] => image/png 
    [tmp_name] => /tmp/php63EvNo 
    [error] => 0 
    [size] => 19115 
) 

由于error为零,而filesize非零我认为上传成功。

后续调用移动上传文件失败:move_uploaded_file(...): failed to open stream: Permission denied

在检查/tmp,在tmp_name命名的文件不存在。

是什么原因导致此行为/如何纠正?

谢谢!


额外的信息: LAMP栈,运行PHP5,CakePHP的2.0

形式: PHP /蛋糕代码:其被渲染

echo $form->input('Foo.image', array('type' => 'file')); 

HTML:

<input type="file" name="data[Foo][image]" id="FooImage"/> 
+1

尝试搜索该文件。你可能错位或检查文件夹权限。 – Joseph 2012-02-28 04:27:30

+1

我们可以看到'move_uploaded_file'部分吗? – 2012-02-28 04:27:50

+0

@Joseph - 文件夹权限的确是问题 - 预期位置上的“chmod -R 777”修复了问题。 如果你回答这个问题,我会给你复选标记。 – bguiz 2012-02-28 05:16:40

回答

1

/tmp中临时上传的文件在e要求 - 他们不是长期存在的。如果您关心文件,则在收到上传的请求期间必须使用move_uploaded_file

0

最有可能的权限问题。还要考虑使用cakePHP文件夹变量。上传组件我看起来像这样:

$file = $this->request->data['Client']['image']; 

$filename = $file['tmp_name']; 
$filePath = WWW_ROOT . DS . 'files' . DS . $file['name']; 

if(move_uploaded_file($filename, $filePath)) 
    return '/files/'.$file['name']; // saves location of uploaded file