使用fread()
可以流式傳輸大文件以強制下載。 但是,在流式傳輸過程中,所有的php請求都會被阻塞,直到流式傳輸完成。如何在流式傳輸過程中處理傳入的請求?凍結期間流出大文件
2
A
回答
1
如果使用session_start
來利用腳本的會話功能並且不會更改任何默認值,那麼缺省行爲是基於文件的會話處理。
文件一次只能通過打開進程打開。因此,如果腳本啓動並呼叫session_start
,則該特定會話文件被鎖定。如果具有相同會話ID的另一個請求啓動,則下一個對session_start
的調用將暫停,直到文件鎖再次被鎖定爲空。
在正常情況下,這完全沒有問題,因爲在很短的時間間隔內很少有多個具有相同會話ID的請求,但是如果一個請求執行異常長的例如因爲它將大量數據傳輸回調用客戶端,因此獲取文件鎖的時間相當長。
幸運的是,在大多數情況下,在此次執行時甚至不再需要會話,因此可以在腳本結束時儘早關閉會話,並釋放文件鎖定。之後,可以例如傳輸大量數據而不干擾具有相同會話ID的其他請求。
另一種解決此問題的方法是切換到基於數據庫的會話處理。在這種情況下,必須花更多的心思來不丟失書面數據,但總的來說這是可能的。
相關問題
- 1. Maya GUI在子流程調用期間凍結
- 2. Parallel.ForEach在最終迭代期間凍結
- 3. Kohana 3.2凍結流視頻
- 4. Jmeter在加載大型結果文件(.csv)時凍結
- 5. 將CNN張量流模型凍結爲.pb文件
- 6. 你能選擇什麼文件凍結瓶凍結?
- 7. 凍結大教堂操縱
- 8. 在大文件上傳期間,Firefox全部凍結; Ajax進度條不可行; IE6正常工作
- 9. 騾流在一定時期內會凍結
- 10. Unity Admob插件 - Androidmanifest - 凍結退出
- 11. SSRS導出凍結,條件格式
- 12. Ruby:流式傳輸大型AWS S3對象凍結
- 13. PyQt4,QThread並打開大文件而不凍結GUI
- 14. C#.Net在遍歷大量文件時凍結
- 15. 嘗試讀取和解碼大文件時C#GUI凍結
- 16. git克隆項目與大文件凍結
- 17. 下載大文件:: readAll凍結幾秒鐘
- 18. 在FreeBSD下的c/C++下複製大文件凍結系統
- 19. 在解析JSON數據期間在UITableView中滾動期間凍結
- 20. 流利NHIbernate凍結了很多
- 21. 啓動批處理流時C#凍結
- 22. C#Wav文件播放凍結GUI
- 23. 設備凍結,同時刪除文件
- 24. FileHelper讀取csv文件凍結
- 25. Django pip凍結導致空文件
- 26. GitHub Enterprise:在發佈期間強制執行代碼凍結?
- 27. ASP .NET MVC在新項目創建期間凍結Visual Studio
- 28. IE6/7在jQuery AJAX請求期間凍結
- 29. 部署到Heroku:在寫入對象期間凍結
- 30. 相機在通話期間打開應用程序時凍結
你使用的是Apache嗎?如果是這樣,請查看大文件的mod_xsendfile:https://tn123.org/mod_xsendfile/ – 2015-02-10 10:30:57
您的意思是說,如果流在'streaming.php'上運行,並且我調用'anotherpage.php',則後者將不會運行流式傳輸結束了嗎? – 2015-02-10 10:31:40
在fread之前調用'session_write_close'。 – GhostGambler 2015-02-10 10:53:59