PHP:上传后文件丢失

时间:2012-02-28 04:26:15

标签: php cakephp file-upload

上传后,图片字段的print_r输出如下

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"/>

2 个答案:

答案 0 :(得分:1)

/tmp中的临时上传文件会在请求结束时被删除 - 它们不会长期保留。如果您关心文件,则必须在收到上传的请求期间使用move_uploaded_file

答案 1 :(得分: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