2016-11-12 139 views
2

我試圖構建一個基本的上傳表單,將多個文件添加到由PHP處理的文件夾中。上傳多個文件HTML5/PHP

的HTML代碼,我已經是:

<form id="form" action="add-files-php.php" method="POST" enctype="multipart/form-data"> 
    <div class="addSection">Files To Add:<br><input type="file" name="files[]" multiple /></div> 
    <div class="addSection"><input type="submit" name="submit" value="Add Files" /></div> 
</form> 

而且PHP以流程爲:

$file_path = "../a/files/article-files/$year/$month/"; 
foreach ($_FILES['files']['files'] as $file) {  
    move_uploaded_file($_FILES["file"]["name"],"$file_path"); 
} 

我可以沒有任何錯誤運行PHP,但文件沒有加入到路徑文件夾。

我在哪裏出錯了?

回答

1

我在我的一個項目中實際上有類似的代碼。嘗試一下。

foreach ($_FILES['files']['name'] as $f => $name) { 
    move_uploaded_file($_FILES["files"]["tmp_name"][$f], $file_path); 
} 

看看下面的頁面: http://php.net/manual/en/function.move-uploaded-file.php

編輯: 無處在你提供的代碼,它表明你實際上給你的文件的文件名,你只是參考的路徑,而不是一個路徑+文件名+擴展名

move_uploaded_file($_FILES["files"]["tmp_name"][$f], $file_path . $name); 

修改我的原始代碼示例像第二個,應該工作。

+0

感謝。實際上我只是在http://www.w3bees.com/2013/02/multiple-file-upload-with-php.html上看到一個非常類似的代碼,但不幸的是,你給我的代碼仍然不是'上傳文件。在你的例子中'$ name'涉及什麼? –

+0

在我的示例中使用了$名稱,用於在生成錯誤消息時引用該文件...但是,我將其從我的示例中剝離出來。 重要的是: – 2016-11-12 12:25:05

+0

輸入的名稱,是相同的,其用於參照在$ _FILES [] – 2016-11-12 12:25:35

1

反覆調整$_FILES['files']['error']陣列,並檢查文件實際上上傳到服務器:

$dest_dir = "../a/files/article-files/$year/$month"; 
foreach ($_FILES["files"]["error"] as $key => $error) { 
    if ($error == UPLOAD_ERR_OK) { 
    // The temporary filename of the file stored on the server 
    $tmp_name = $_FILES["files"]["tmp_name"][$key]; 
    $name = basename($_FILES["files"]["name"][$key]); 
    // Handle possible failure of the move_uploaded_file() function, too! 
    if (! move_uploaded_file($tmp_name, "$dest_dir/$name")) { 
     trigger_error("Failed to move $tmp_name to $dest_dir/$name", 
     E_USER_WARNING); 
    } 
    } else { 
    // Handle upload error 
    trigger_error("Upload failed, key: $key, error: $error", 
     E_USER_WARNING); 
    } 
} 

與您的代碼的最大的問題是,你試圖移動$_FILES['files']['name'],而不是$_FILES['files']['tmp_name']。後者是上傳到temporary directory的臨時文件的文件名,用於上傳文件時存儲文件。

P.S.

使用相對路徑很容易出錯。考慮使用含到項目的根路徑恆定的幫助,例如:

的config.php

<?php 
define('MY_PROJECT_ROOT', __DIR__); 

絕對路徑upload.php的

<?php 
require_once '../some/path/to/project/root/config.php'; 

$dest_dir = MY_PROJECT_ROOT . "https://stackoverflow.com/a/files/article-files/$year/$month";