2013-09-21 201 views
24

我在網站上工作,我希望用戶能夠上傳文件。所以我正在努力學習如何做到這一點。我研究過,它說我必須使用函數move_uploaded_file()。我寫的代碼就像它在示例中(更改數據),但它不起作用。請幫助我,我是這些新手。這是我到目前爲止已經完成:Move_uploaded_file()函數不起作用

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
<body> 
    <form action="upload_file.php" method="POST" enctype="multipart/form-data"> 
     <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> 
     <input type="file"name="file"> 
     <input type="submit"> 
    </form> 
</body> 
<html> 

這是upload_file.php:

<!DOCTYPE html> 
<html> 
    <head> 
    <head> 
    <body> 
     <?php 
      $move = "/Users/George/Desktop/uploads/"; 
      echo $_FILES["file"]['name']."<br>"; 
      echo $_FILES["file"]['tmp_name']."<br>"; 
      echo $_FILES["file"]['size']."<br>"; 
      echo $_FILES['file']['error']."<br>"; 
      move_uploaded_file($_FILES['file']['name'], $move); 
     ?> 
    <body> 
<html> 
+0

你能解釋'但它不會工作嗎? –

+0

我沒有收到錯誤消息,但文件沒有保存,因爲我想。 – user2480054

+0

每個人都在手冊上發佈的解決方案,你在那裏檢查? http://php.net/manual/en/function.move-uploaded-file.php – elclanrs

回答

28

文件將被存儲在臨時位置,使用的不對tmp_name代替

if (move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'/../../uploads/'. $_FILES["image"]['name'])) { 
    echo "Uploaded"; 
} else { 
    echo "File was not uploaded"; 
} 
+0

仍然無法正常工作。但是,謝謝。 – user2480054

+0

您還應該檢查函數的返回值。關於目的地的目錄權限呢? –

+2

那麼,你的目標路徑不包含文件名... – elclanrs

11

這是一個工作示例。

HTML表單:

<form enctype="multipart/form-data" action="upload.php" method="POST"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="512000" /> 
    Send this file: <input name="userfile" type="file" /> 
    <input type="submit" value="Send File" /> 
</form> 

PHP代碼:

<?php 

    $uploaddir = '/var/www/uploads/'; 
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

    echo "<p>"; 

    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
     echo "File is valid, and was successfully uploaded.\n"; 
    } else { 
     echo "Upload failed"; 
    } 

    echo "</p>"; 
    echo '<pre>'; 
    echo 'Here is some more debugging info:'; 
    print_r($_FILES); 
    print "</pre>"; 

    ?> 
1

應該喜歡這個

move_uploaded_file($_FILES['file']['tmp_name'], $move); 

而且你不能在你的系統中的任何地方移動它.youcan僅將其移入在您的項目目錄中,必須在htdocs或www中取決於您使用的是wampp,lampp或vertrgo。

+0

我使用的是mamp,我嘗試過使用文檔,但仍然無法使用。謝謝。 – user2480054

5
$move = "/Users/George/Desktop/uploads/".$_FILES['file']['name']; 

就是這樣。

move_uploaded_file($_FILES['file']['tmp_name'], $move); 

這是兩個。

檢查是否uploads dir是可寫的

這三人。

返回值

成功返回TRUE。

如果filename不是有效的上傳文件,則不會執行任何操作,並且move_uploaded_file()將返回FALSE。

如果filename是一個有效的上傳文件,但不能移動一些 原因,則不會執行任何操作,並且move_uploaded_file()將返回 FALSE。此外,還會發出警告。

看看函數的返回值。

就是這樣。

+0

你說得對。謝謝! – user2480054

2

試試這個

$ImageName = $_FILES['file']['name']; 
$fileElementName = 'file'; 
$path = 'Users/George/Desktop/uploads/'; 
$location = $path . $_FILES['file']['name']; 
move_uploaded_file($_FILES['file']['tmp_name'], $location); 
1

你是不是指的該文件的保存臨時位置。使用tmp_name來訪問文件。

你總是可以看到發生了什麼得到使用貼:

echo "<pre>"; 
print_r($_FILES); 

如果您看到此文件的數組,你將有什麼事情的更好的理解和想法。

+0

那麼如果print_r($ _ FILES)打印一個空數組呢?我和OP一樣。 – Lewistrick

+1

@Lewistrick這意味着你可能忘記提及表單的enctype屬性。參考這個問題:http://stackoverflow.com/questions/3586919/why-would-files-be-empty-when-uploading-files-to-php – shivgre

7

嘗試使用copy()函數而不是move_uploaded_file()。它爲我工作

copy($_FILES['file']['tmp_name'], $path); 
+0

對我來說也是如此。謝謝。 –

3

也許你需要給你的文件更多的權限。

假設你的代碼是在/ var/WWW/MY_PROJECT

嘗試chmod -R 777 /var/www/my_project

+3

我**強烈**建議您瞭解這裏的安全風險。如果你真的需要這樣做,請將PHP添加到擁有該文件夾的組中,並使用「664」而不是「777」 – Jacksonkr

1

發佈此剪斷,我寫這樣,如果別人來這裏想上傳多個文件不會空手而歸。 :) 此腳本不執行任何驗證。它只是直接上傳。隨意根據需要自定義此基本代碼。

HTML表單

<form action="upload_file.php" method="POST" enctype="multipart/form-data"> 
    Select images: <input type="file" name="files[]" multiple> 
    <input type="submit"> 
</form> 

upload_file.php

$move = "\uploads"; 
foreach ($_FILES["files"]["tmp_name"] as $key => $value) 
{ 
    $tmp_name = $_FILES["files"]["tmp_name"][$key]; 
    $name = $move ."\\".basename($_FILES["files"]["name"][$key]); 
    move_uploaded_file($tmp_name, $name); 
} 
0

如果你是一個Windows機器上,也不會有上傳視頻或寫入到指定文件夾的任何問題路徑,除了語法錯誤。

但是在Linux用戶的情況下,即使沒有可見的語法錯誤,也可以解決此問題。

首先,我假設你在Linux環境中使用它,並且你需要將一些東西上傳到公用目錄中的項目文件夾中。

即使您擁有對項目文件夾的寫入和讀取權限,PHP也不會由最終用戶處理。它是和可以由www-data用戶或組處理。

所以,爲了使這個www-data獲得訪問 第一次輸入;

sudo chgrp "www-data" your_project_folder 

一旦完成,如果沒有對下面的寫入權限;

sudo chown g+w your_project_folder 

這將在Linux中訣竅。

請注意,這不是在Linux環境下,使用phpmyadmin和mysql運行時完成的。