使用fread()
可以流式傳輸大文件以強制下載。 但是,在流式傳輸過程中,所有的php請求都會被阻塞,直到流式傳輸完成。如何在流式傳輸過程中處理傳入的請求?凍結期間流出大文件
2
A
回答
1
如果使用session_start
來利用腳本的會話功能並且不會更改任何默認值,那麼缺省行爲是基於文件的會話處理。
文件一次只能通過打開進程打開。因此,如果腳本啓動並呼叫session_start
,則該特定會話文件被鎖定。如果具有相同會話ID的另一個請求啓動,則下一個對session_start
的調用將暫停,直到文件鎖再次被鎖定爲空。
在正常情況下,這完全沒有問題,因爲在很短的時間間隔內很少有多個具有相同會話ID的請求,但是如果一個請求執行異常長的例如因爲它將大量數據傳輸回調用客戶端,因此獲取文件鎖的時間相當長。
幸運的是,在大多數情況下,在此次執行時甚至不再需要會話,因此可以在腳本結束時儘早關閉會話,並釋放文件鎖定。之後,可以例如傳輸大量數據而不干擾具有相同會話ID的其他請求。
另一種解決此問題的方法是切換到基於數據庫的會話處理。在這種情況下,必須花更多的心思來不丟失書面數據,但總的來說這是可能的。
相關問題
- 1. 在AsyncTask期間UI凍結
- 2. Maya GUI在子流程調用期間凍結
- 3. 在文件打開期間凍結Python函數
- 4. 文件打開期間/之後偶爾會凍結數據導出窗口
- 5. Parallel.ForEach在最終迭代期間凍結
- 6. Kohana 3.2凍結流視頻
- 7. Jmeter在加載大型結果文件(.csv)時凍結
- 8. 將CNN張量流模型凍結爲.pb文件
- 9. NSIS安裝程序運行期間的文件下載在「連接」處凍結
- 10. 你能選擇什麼文件凍結瓶凍結?
- 11. 凍結大教堂操縱
- 12. 在大文件上傳期間,Firefox全部凍結; Ajax進度條不可行; IE6正常工作
- 13. 從S3流出一個大文件行
- 14. 流出大數據表excel文件
- 15. 騾流在一定時期內會凍結
- 16. Ruby:流式傳輸大型AWS S3對象凍結
- 17. Unity Admob插件 - Androidmanifest - 凍結退出
- 18. SSRS導出凍結,條件格式
- 19. TextMate凍結試圖打開一個大文件
- 20. C#.Net在遍歷大量文件時凍結
- 21. 在FreeBSD下的c/C++下複製大文件凍結系統
- 22. 下載大文件:: readAll凍結幾秒鐘
- 23. PyQt4,QThread並打開大文件而不凍結GUI
- 24. git克隆項目與大文件凍結
- 25. 上傳大文件用POST凍結系統
- 26. 網站正在凍結,而在php下載大文件
- 27. SSH2.SFTP node.js備份腳本與大文件凍結
- 28. 嘗試讀取和解碼大文件時C#GUI凍結
- 29. 在解析JSON數據期間在UITableView中滾動期間凍結
- 30. ClientAbortException:在大文件上傳期間出現java.io.IOException
你使用的是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