2010-04-11 75 views
14

人知道爲什麼:的第二個參數複製()函數不能是一個目錄

<?PHP 
$title = trim($_POST['title']); 
$description = trim($_POST['description']); 

// Array of allowed image file formats 
$allowedExtensions = array('jpeg', 'jpg', 'jfif', 'png', 'gif', 'bmp'); 

foreach ($_FILES as $file) { 
    if ($file['tmp_name'] > '') { 
    if (!in_array(end(explode(".", 
      strtolower($file['name']))), 
      $allowedExtensions)) { 
     echo '<div class="error">Invalid file type.</div>'; 
    } 
    } 
} 

if (strlen($title) < 3) 
    echo '<div class="error">Too short title</div>'; 
else if (strlen($description) > 70) 
    echo '<div class="error">Too long desccription.</div>'; 

else { 
    move_uploaded_file($_FILES['userfile']['tmp_name'], 'c:\wamp\www\uploads\images/'); 
} 

給出:

警告:move_uploaded_file()以[function.move上傳文件]:第二參數copy()函數不能是C:\ wamp \ www \ upload.php中第41行的目錄
Warning:move_uploaded_file()[function.move-uploaded-file]:無法移動'C:\ wamp \ tmp \ php1AB.tmp'至第41行的C:\ wamp \ www \ upload.php中的'c:\ wamp \ www \ uploads \ images /'
+9

是的。它不能是一個目錄 – 2010-04-11 19:43:59

+1

實際上這個警告是在php手冊 - http://php.net/manual/en/function.move-uploaded-file.php中解釋的。 – Hanseh 2010-04-11 19:52:13

回答

28

這是因爲你正在移動一個文件,它認爲你正試圖將該文件重命名爲第二個參數(在這種情況下是導演)。

它應該是:

move_uploaded_file($_FILES['userfile']['tmp_name'], 'c:/wamp/www/uploads/images/'.$file['name']); 
+1

這將產生一個解析錯誤 – 2010-04-11 20:01:24

+2

使用正斜槓而不是反斜槓 – Samuel 2010-04-12 20:39:20

+0

這個例子在這裏http://www.w3schools.com/php/php_file_upload.asp即使這樣,我沒有注意到第二個事實參數應該是一個文件,而不是一個目錄。 googledorf 3分 – 2012-12-05 13:52:11

7

您指定移動文件到一個目錄; PHP的move_uploaded_filecopy都不像shell的副本那麼聰明 - 您必須爲目標指定文件名而不是目錄。

所以,一個簡單的解決方案是採取源文件的basename並將其追加到目標目錄。

1

聽起來像move_uploaded_file的第二個參數應該是一個完整的文件名,而不僅僅是目錄名。此外,可能只是一個樣式問題,但你應該使用一致的斜槓'c:\wamp\www\uploads\images/'

1

因爲PHP不是shell。你試圖將文件複製到c:\wamp\www\uploads\images目錄,但PHP不知道你的意思是,當你(內move_uploaded_file功能)執行:

copy($_FILES['userfile']['tmp_name'], 'c:\wamp\www\uploads\images/'); 

此命令告訴它的文件重命名爲c:\wamp\www\uploads\images/,它不能這樣做,因爲這是現有目錄的名稱。

相反,這樣做:

move_uploaded_file($_FILES['userfile']['tmp_name'], 
    'c:\wamp\www\uploads\images/' . basename($_FILES['userfile']['tmp_name'])); 
1

,如果你想只要拷貝文件兩個不同的迪爾,試試這個:

if (move_uploaded_file($_FILES['photo']['tmp_name'], $target.$pic1)) 
{ 
    copy("C:/Program Files (x86)/EasyPHP-5.3.9/www/.../images/".$pic1, "C:/Program Files (x86)/EasyPHP-5.3.9/www/.../images/thumbs/".$pic1) 
} 

你應該寫完整的路徑爲「C:/ .. 。「

1

嘗試將擴展名添加到名稱文件。

$filename = $_FILES['userfile']['tmp_name'].".jpg"; 
相關問題