2012-02-28 112 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