2012-12-31 49 views
4

我使用pluploader與Laravel,和我的管理方式,創建一個新的文章時,執行以下步驟工作:飼養TMP上傳的文件

  • 類型來創建新項目所需的詳細信息
  • 選擇要上傳的照片爲文章
  • 當點擊Create按鈕,以下操作完成:
    • 保存上傳的細節在會話陣列中的每個照片。這意味着,如果3個文件要上載,每次上傳有一個單獨的POST操作
    • 一旦照片已保存的會話數組中,它創造了文章
    • 在數據庫中記錄它發出的id創建其應該得到的照片,並將其移動到相應的文件夾,並在數據庫中

現在添加照片記錄功能的文章,問題是每個POSTtmp_filename,臨時文件被刪除,所以當它試圖實際移動照片...沒有照片 移動。

我是對的,如果是的話,我該如何解決這個問題?任何保留tmp刪除的方法直到X函數結束?

回答

3

我說得對不對,

是的,你是對的。 PHP在請求完成後刪除上傳的臨時文件。這在PHP手冊中也有明確記錄:

如果文件沒有被移走或重命名,該文件將在請求結束時從臨時目錄中刪除。

這個信息在這裏找到:POST method uploadsDocs

如果是這樣,我該如何解決該問題?

知道這確實表明如果你想保留它,你應該保留一份或重命名該文件。

保留tmp刪除到X功能結束的任何方法?

就像書面一樣,刪除將在請求完成時啓動。所以在PHP中,通常所有函數都在之前執行請求結束,所以即使是X函數如果您在相同的請求中調用它。

如果您不要在相同的請求中調用它,則需要引入會話管理並在臨時文件被自動刪除之前複製或重命名臨時文件。由於PHP中的任何其他操作都應該通過多個請求完成。見SessionsDocs

看得那麼清楚:

+0

是的,我打算在另一個tmp目錄上保留一個副本,然後從那裏取出 – Alex

2

你可以做最簡單的事情是簡單的把文件放到其它地方被上傳後。

不過,我建議你這樣做,而不是:

  • 如果照片被上傳,創建照片記錄的時候了,併發送回一個記錄id到瀏覽器。
  • 讓瀏覽器插入一個輸入域的照片ID的引用(例如,<input type="hidden" name="photos[]" value="1234">
  • 當文檔的形式保存,文檔與照片的身份聯繫起來。

這樣,你不甚至不需要一個會話

+0

是的,我決定將照片移動到臨時目錄,然後從那裏移動到它的最終目的地 – Alex