2012-03-29 76 views
1

我目前正嘗試通過簡單的html,然後php上傳一個CSV文件到數據庫。我的問題是我想知道怎麼會事工作/什麼實際發生(我想這就是爲什麼我有這麼多的問題)上傳文件html/php

所以無論如何我的HTML如下:

<html> 
<form action="mysite.php" method="POST"> 
<input type="file" name="file"><br /> 
<input type="submit" value="Now upload it!"> 
</form> 
</html> 

我的PHP就是:

<?php 
echo 'Success'; 
?> 

在我真正將文件存儲在我喜歡的文件的實際存儲位置的數據庫中之前,

它是否作爲服務器上的臨時文件創建? 保存在服務器ram上? 它實際上沒有做任何事情,因爲它沒有告訴做任何事(又名:保存到DB)

感謝

+2

咳,到目前爲止它真的不算什麼(直譯),從失蹤「的multipart/form-data的」形式上傳文件時需要編碼開始。你應該研究一下程序,從這裏開始:http://php.net/manual/en/features.file-upload.php – 2012-03-29 19:51:08

+2

它甚至沒有上傳文件。您需要正確的enctype。 '

'。在完成排序之後,我會建議在接收腳本中執行一個'print_r($ _ FILES)'來查看信息是如何發佈的。 – MetalFrog 2012-03-29 19:52:56

+0

在你的mysite.php文件中使用'print_r($ _FILES);',我認爲你可以繼續前進。 – hjpotter92 2012-03-29 19:53:26

回答

2

是的,它會在服務器上的臨時文件,但在你的情況下,它不會因爲你錯過了編碼類型:

<form enctype="multipart/form-data" action="__URL__" method="POST"> 

這裏的上傳php file uploading

你可以在文件中手動通過爲變量名稱執行var_dump($ _ POST)和爲文件數據執行var_dump($ _ FILES)來查看要上傳的內容以幫助理解。

正如您在參考文件中看到文件上傳後所看到的,您需要將其從臨時位置移至其最終目的地。

+0

擊中它。由於缺少編碼類型,它甚至不是臨時文件。謝謝。 – EGHDK 2012-03-30 03:03:59

0

當你上傳的文件,它被存儲在服務器上,之後,如果要導入這個CSV到數據庫你必須使用php腳本解析(CSV Parser)它並插入數據庫。或者,如果您只想存儲文件路徑,而不是CSV中的數據,則只能在DataBase中存儲文件路徑。

0

只要腳本正在運行,文件就會臨時存儲。這些信息可以在$ _FILES中找到。

1

我強烈建議你閱讀this

從本質上講,該文件是通過HTTP上傳和PHP將其存儲在服務器上的臨時文件。

您可以使用全局$_FILES數組獲取該臨時文件的句柄。

0

該文件應存儲在服務器上的臨時文件中,並且您可以使用超全局的$_FILES找到關於它的信息。你可以通過改變你的腳本開始了傾倒了超全局,看看裏面有什麼:

<?php 
print_r($_FILES); 
?> 

PHP提供了一個選擇的有用的功能來處理文件上傳,你應該使用這些,而不是僅僅達到到文件系統 - 請記住,任何文件上傳都會視爲用戶輸入,因此會成爲安全風險!如果該文件是你要找的人,你應該通過檢查啓動:

$filename = $_FILES['attachment']['tmp_name']; 
if (!is_uploaded_file($filename)) { 
    // error 
} 

而且你可以使用move_uploaded_file()功能,可以將這個文件的地方更方便:

if (move_uploaded_file($_FILES['attachment']['tmp_name'], '/more/useful/path') { 
    // all good 
} 

最後,你應該記住不僅僅是文件本身,還有報告的文件名和文件大小,都是用戶提交的數據,並且確保在使用前妥善處理這些數據。

有得心應手的東西在這裏每噸:http://uk.php.net/manual/en/features.file-upload.php