我需要使用PHP的copy()
函數將文件從一個位置複製到另一個位置。我故意不使用rename()
。PHP copy()如何處理內存
這些文件是500MB到1GB。似乎在啓動PHP腳本後需要大約10-20秒才能移動它們(每個執行一個文件)。
我的服務器被拒絕這些文件,因爲max_execution_time
,post_max_size
,upload_max_filesize
和memory_limit
值,所有這一切都設置高的離譜的上傳,但是服務器,當我試圖上傳只是超時。
現在我擔心,如果這個copy()
操作正在運行,而網站正在處理大量的流量,服務器將失敗。
所以我的問題是,PHP的copy()
的運行方式會超載服務器的內存和/或執行時間限制嗎?
我知道PHP腳本需要花費很多時間才能完成,但我希望時間本質上只是一段低內存的「等待時間」,因爲PHP坐回來並讓服務器操作系統移動文件...我不認爲PHP需要將文件加載到緩衝區或類似的東西來拷貝它,但是在這個層次上的內存討論是我理解的一個話題。
任何人都可以解釋PHP copy()
如何使用內存,以及是否有任何與內存過載相關的風險?
複製我懷疑會使用os函數(當然這也是你的選擇)它不會讀整個文件到內存 – 2013-08-28 20:43:11
我不知道內部,但'copy()'不需要很多記憶。通常,文件複製(如果沒有完全委託給OS例程)只是使用一個kb的小緩衝區來獲得讀寫系統調用的合理開銷。大多數IO緩衝將由文件系統緩存完成,這些緩存不在PHP的範圍之內,並且不受'memory_limit'的影響。然而,很多東西與PHP有點尷尬,所以copy()可能也是。 – dronus
似乎在歷史的某個時刻'copy()'確實花費了太多的內存來做一些尷尬的事情:https://bugs.php.net/bug.php?id=29922 – tmsimont