2009-11-05 71 views
2

我正在編寫一個工具,允許有人連接到網頁並生成可供即時下載的文件。PHP fwrite vs.輸出管道

寫這些文件,我可以使用PHP功能,如FOPEN或FWRITE,或者我可以創建一個腳本,它可以被稱爲一個系統調用,生成的輸出如:

PHP downloadGen.php> filetocreate .xml

解決方案的fwrite版本使用更多的內存,並且也比管道版本慢。有沒有人看到執行下載代作爲系統調用的任何問題?我可以同時運行多少個電話會有限制嗎?

無論如何,我希望有人有經驗,類似的東西,並能提供一些建議......

回答

0

最簡單,最有效的方法(自PHP 5.0中可用)是簡單地使用file_put_contents()插入內容到文件中。您將文件名指定爲第一個參數,並將要輸入到文件中的數據字符串(二進制或簡單文本 - 它是二進制安全函數)。

然後它會在您指定的路徑上生成文件。

並回答你的第二個問題,除非你有:

  1. 數量龐大的用戶,
  2. 你不斷寫大文件,或
  3. 你的服務器是胡扯

然後你會好起來的。

+0

使用file_put_contents的問題是,我將不得不將整個輸出存儲在變量中,然後將其轉儲到文件中。 – 2009-11-05 06:23:02

1

解決 的fwrite的版本使用更多的內存,並且也比管道版本

確實慢 ?我會打賭美元甜甜圈這是相反的(但以一種微不足道的方式),你只是測量錯誤。

存儲器 -

經由的fopen/fwrite的構建過程中的文件不是在服務器上創建一個單獨的過程中應消耗更少的存儲器。也許你認爲這是另一種方式,因爲你正在測量你的腳本消耗了多少內存。但那php downloadGen.xml系統調用正在啓動另一個進程。那裏的PHP代碼將使用盡可能多的內存,就像你在你的web服務器綁定的過程中一樣,加上cli php過程的所有開銷。所以差異應該可以忽略不計。

「速度」 -

這同樣適用於速度。啓動PHP解釋器會消耗處理器週期。如果你這樣做是同步進行的,那麼將代碼/輸出代碼放在主腳本中應該更快。但只是勉強。