2016-07-13 71 views
0

我正在學習使用php進行文件上傳。爲此,我提到了一些鏈接。 在它們上傳代碼裏面說,我們必須使用:move_uploaded_file如何工作?

move_uploaded_file(upload_file_name, 'path to move') 

功能將文件移動到我們想要的目錄。

但在move_uploaded_file函數中,它們將臨時名稱作爲第一個參數傳遞。

爲什麼他們使用臨時名稱作爲第一個參數?他們爲什麼不用原來的名字?

move_uploaded_file($_FILES['photo']['tmp_name'], 'uploads/'.$new_file_name); 

爲什麼我們必須使用這個temp_name?有什麼理由可以使用嗎?

回答

1

上傳文件時,該文件將被保存在服務器的臨時文件目錄中,其文件名如/tmp/somefilename

使用move_uploaded_file您將移動該文件到任何您喜歡的/您允許的位置。

原始文件名喜歡它在用戶s computer is stored in $ _FILES ['userfile'] ['name']`。

+1

謝謝我明白 –

0

我會嘗試解釋php文件上傳,因爲我明白這個過程。

當你上傳php文件(使用POST請求)時,php應該填充$ _FILES全局變量和文件數據。要獲取文件數據(如大小,類型等),該文件應該在文件系統中可用。 因此,使用upload_tmp_dir指令從php.ini php將此文件保存到臨時文件夾,然後填寫$ _FILES全局變量。

之後,您可以使用php爲您提供的數據處理此文件。

同樣的php具有用於請求數據驗證一些配置指令,如:的upload_max_filesize的post_max_size。所以你可以設置全局驗證配置和PHP爲你做這個驗證。

爲什麼他們使用臨時名稱作爲第一個參數?

因爲這個函數只處理來自http請求的文件。

如果您將嘗試設置任何不存在於當前http請求中的文件作爲此函數的第一個參數,您將獲得false作爲結果。

如果你對更多的細節感興趣,你可以閱讀php source(這個函數處理post請求,據我所知)。

他們爲什麼不用原名?

由當前http請求上傳的文件不會以原始名稱存在於filesytem中(我認爲它是出於安全原因而實現的,也許是爲了避免與相同文件名發生衝突)。這就是爲什麼你不能使用這個原始名稱。

P.S. 如果我錯了,請更正我的錯誤(這將有助於我們所有人瞭解更多關於php內部進程)