2017-10-18 219 views
0

我試圖從HTML表單上傳文件,以便文件轉到特定文件夾,並將路徑上傳到數據庫。 數據庫部分工作正常,但文件不去我的目標文件夾。 我將文件夾權限設置爲777,並在我的php.ini文件file_uploads = on中。無法將文件上傳到服務器文件夾

<?php 

require 'config.php'; 

$connection = new mysqli($servername, $username, $password, $db); 

foreach ($_FILES['upload']['name'] as $key => $name) { 

    if(move_uploaded_file($_FILES['upload']['name'][$key], '/upload_test/' . 
    $name)){ 
    echo "Uploaded"; 
} else { 
    echo "Debug ", print_r($_FILES); 
}; 

$path = '/upload_test/' . $name; 

mysqli_query($connection, "insert into docs (path) values ('$path')"); 
} 
?> 
<script src="addInput.js" type="text/javascript"></script> 

<form method="POST" action="upload.php" enctype="multipart/form-data"> 
    <div id="dynamicInput"> 
     <input type="file" name="upload[]" multiple><input type="button" 
     value="+" onClick="addInput('dynamicInput');"> 
    </div> 
    <input type="submit" value="Upload"> 
</form> 

當我試圖把它上傳返回此:

Debug: Array(
    [upload] => Array(
     [name] => Array([0] => test.docx) 
     [type] => Array([0] => application/vnd.openxmlformats-officedocument.wordprocessingml.document) 
     [tmp_name] => Array([0] => /tmp/phputnLek) 
     [error] => Array([0] => 0) 
     [size] => Array([0] => 12551) 
    ) 
) 
+0

的可能的複製[如何獲得用foreach鍵值?](https://stackoverflow.com/questions/3418628/how- to-get-key-values-with-foreach) – Twinfriends

+1

上傳目錄是否真的位於文件系統的根目錄? – jeroen

+1

你是什麼意思的文件系統的根?所有文件都在一個文件夾/ multiple_file_upload中。有腳本。上傳文件夾在這個內部:/ multiple_file_upload/upload_test – Serrano

回答

2

基於您的評論,似乎您試圖上傳至錯誤的目錄:

if (move_uploaded_file($_FILES['upload']['tmp_name'][$key], '/upload_test/' . $name)) { 

注意路徑'/upload_test/' . $name是您的文件系統的根,因爲它以斜槓開頭/

如果要移動的文件相對於當前正在運行該腳本的一個目錄,你將需要:

if (move_uploaded_file($_FILES['upload']['tmp_name'][$key], 'upload_test/' . $name)) { 
                  ^relative to the current path 

爲相對路徑往往會導致混亂,你還可以設置一個變量,用於定義相對於文件系統根目錄的網站根目錄或使用php提供的值,$_SERVER['DOCUMENT_ROOT']

例如:

define('WEBROOT', '/var/www/html'); 
... 
if (move_uploaded_file($_FILES['upload']['tmp_name'][$key], 
    WEBROOT . '/multiple_file_upload/upload_test/' . $name)) { 

或:

if (move_uploaded_file($_FILES['upload']['tmp_name'][$key], 
    $_SERVER['DOCUMENT_ROOT'] . '/multiple_file_upload/upload_test/' . $name)) { 
+0

工作!這是你的代碼和@Klaus所說的組合! 謝謝你們! – Serrano

+0

@Serrano是的,我錯過了關於'tmp_name'的部分,我將編輯它以完成。 – jeroen

+0

@jereon如果不是直接上傳到/ upload_test,我想根據數據庫中的id創建一個子文件夾? – Serrano

1

你必須臨時文件移動到新的目標!你的情況你試圖將原始文件名移動到目標文件夾。

這應該這樣做...

move_uploaded_file($_FILES['upload']['tmp_name'][$key], '/upload_test/' . $name); 
+0

不幸的是,沒有工作。它具有相同的行爲。 – Serrano