2014-09-10 105 views
0

我的表單太多了。其中一個領域是如下:爲什麼我無法使用PHP中的Session上傳文件?

<form action="go_to_preview.php" role="form" method="post" enctype="multipart/form-data"> 
    <input type="file" name="equip_image" id="equip_image"> 
</form> 

現在文件go_to_preview.php的目的是顯示用戶在標籤的形式填寫的數據。所有填寫的數據也包含在隱藏字段中。此表單上還有一個提交按鈕。如果用戶發現他/她已填寫的內容是完美的,則用戶單擊文件go_to_preview.php上的提交按鈕。只要用戶點擊提交按鈕,我就會將通過$_POST收到的數據添加到數據庫中。 現在我的問題是我無法從包含文件控制的頁面上載用戶選擇的文件。隨着$_POST(這是目前數據的數組到隱藏字段),我要送的$_FILES陣列中的會話如下:

//go_to_preview.php 
session_start(); 
$_SESSION['FILES'] = $_FILES; 

//final.php 
session_start(); 
$files_var = $_SESSION['FILES']; 
//use $files_var 
unset($_SESSION['FILES']); 

到目前爲止一切順利。現在,當我提交表單時,我必須將所選文件上傳到服務器。爲此,我在final.php文件中編寫了以下邏輯:

move_uploaded_file($_SESSION['FILES']['equip_image'], $target); 
unset($_SESSION['FILES']); 

函數得到正確執行,但文件沒有上傳到服務器。 有人可以在這方面幫助我嗎? 在此先感謝。 如果你沒有得到我的疑問清楚你也可以參考我的以下問題,讓我的問題的明確的想法: How to get the $_FILES array data as it is after form submission in following scenario?

+0

@Flosculus:爲了得到清晰的想法,你可以參考我的問題http://stackoverflow.com/questions/25752228/how-to-get-the-files-array-data-as-it-is-after- form-submission-in-following-sc – user2839497 2014-09-10 10:23:41

+0

對不起,我刪除了那條評論,因爲我忘記了文件數據實際上並沒有存儲在'$ _FILES'中。儘管如此,你是否將上傳的文件移至永久的地方?因爲它僅在創建請求期間是暫時的。 – Flosculus 2014-09-10 10:25:09

+1

爲了澄清,您正在將圖像移動到會話中,然後嘗試在稍後的請求中從同一會話中檢索圖像?問題是PHP會話可能非常短暫,所以你會遭受頻繁的數據丟失。如果你想做異步上傳,你最好使用隊列 - 比如PHPResque。如果你無法做到這一點,那麼至少應該使用一個天真的實現,將圖像移動到一個文件夾中,並將該文件夾視爲一個隊列。上傳文件後 – 2014-09-10 10:25:17

回答

5

基於您的代碼序列你想存儲在會話,後來您上傳的文件在final.php上使用它們進行處理或顯示。您上傳的所有文件都會發送到某個臨時文件夾,並且您應該在連接關閉之前將其移至某個永久存儲區。由於服務器將在您的連接關閉後立即刪除臨時文件。所以你應該把你上傳的文件放在應用程序中的永久空間中,例如將具有寫入權限的文件夾上傳到Apache,然後您可以在會話中存儲指向文件的鏈接。

+0

+1我不確定上一個問題的答案是否解決了這個問題。 – Flosculus 2014-09-10 10:32:53

+0

+1用於解釋TEM文件。 – 2014-09-10 10:36:19

+1

基於他的問題,他希望用戶填寫表單,但不希望存儲數據,直到用戶在審覈後進入最終提交階段,因此他正在尋找將數據存儲在會話中,這對於上面提到的文件來說是不可能的。 – 2014-09-10 10:37:31

相關問題