2017-10-18 162 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