2011-10-09 43 views
2

每當我嘗試移動它不工作,並顯示「圖像文件沒有上傳」 ......我只是想知道哪裏出錯文件...爲什麼move_uploaded_file不起作用?

$target = '/var/www/student/public/myimage.jpg'; 
$destination = '/var/www/student/public/images/myimage.jpg'; 

if(move_uploaded_file($target, $destination)) { 
    echo "Image file is successfully loaded";       
} else { 

    echo "Image file not uploaded."; 
} 
  • 我已檢查錯誤日誌(tail -f /var/log/apache2/error.log),但什麼也沒找到。
  • 目標和目的地兩個目錄都有權限。

有人可以告訴我如何找出錯誤。任何想法 ?

+4

什麼是您正在使用的* actual *代碼?您提供的代碼顯然不起作用,因爲* target *必須已經*通過PHP的HTTP POST上傳機制上傳*。 – animuson

+2

爲什麼這個標記爲zend框架?而你使用的功能是錯誤的。閱讀它的PHP文檔(http://php.net/move_uploaded_file)。 – Corbin

+0

文件已被其他腳本上傳,我將此文件移動到服務器中的其他文件夾中... – Student

回答

3

那麼你可以使用一個文件rename()

rename($target, $destination); 
+0

是的。文件已被其他腳本上傳到服務器。我只是在移動它。謝謝 – Student

0

move_uploaded_file()僅適用於http post文件。 http://php.net/manual/en/function.move-uploaded-file.php

到服務器上已經移動一個文件,你將不得不復制文件並取消與舊文件

$target = '/var/www/student/public/myimage.jpg'; 
$destination = '/var/www/student/public/images/myimage.jpg'; 
if (copy($target, $destination)) { 
    unlink($target); 
} else { 
    echo "Unable to copy $target to $destination."; 
} 
+1

甚至還有一個優化版本。它被稱爲[重命名](http://www.php.net/manual/en/function.rename.php)。 – vstm

+0

-1:要移動文件,可以使用rename()而不是copy()。在大文件上,兩者之間有很大的差異。 'rename()'只是修改文件表來指向新的位置; 'copy()'創建一個全新的文件副本。 –

+0

複製是一個有效的選項,因爲有時您只有文件讀取權限。重命名不能在具有讀取權限的文件上工作。除非我有root權限,否則我無法授予文件權限。 –

2

在文件中的當前請求上傳?

move_uploaded_file將拒絕移動未上傳的文件。 (即$target必須等於$_FILES[$field_name]['tmp_name']

如果已經先前上傳,move_uploaded_file會拒絕工作(如果它甚至還在那裏 - PHP會刪除它,如果你不處理文件上載如果我沒有記錯)

如果它實際上是已上載到這個請求,你會想如果你不使用HTTP POST上傳方法使用rename

+0

它已經被其他腳本上傳... – Student

+0

如果它已被上傳到另一個頁面,它將在您嘗試調用此命令時已經被刪除,_and_即使它仍然存在,move_uploaded_file也會拒絕工作。你必須處理上傳的文件上傳的請求,否則PHP會刪除它,如果我沒有記錯的話。 – tobyodavies