2009-12-01 79 views
0

我有幾臺筆記本電腦需要每天從我們的服務器獲取信息。每檯筆記本都有一個server2go安裝(基本上是Apache,PHP,MySQL作爲可執行文件運行),用於啓動本地網頁。該網頁調用使用下面的代碼我們的服務器上的網址:使用PHP同步大量文本

$handle = fopen($downloadURL , "rb"); 
$contents = stream_get_contents($handle); 
fclose($handle); 

的$ downloadURL獲取大量信息從我們的服務器上的MySQL數據庫,並返回結果輸出到設備。我現在將結果作爲自己的SQL語句返回(即 - 如果我查詢數據庫「SELECT name FROM names」,我可能會返回設備文本字符串「INSERT INTO names SET names ='JOHN SMITH'」)。這將從在線數據庫獲取信息,並將其返回到設備中的SQL語句,以便插入筆記本電腦的數據庫中。

我遇到的問題是數據量太大。從服務器檢索信息時,筆記本電腦網頁會保持超時。我已將PHP超時限制設置得非常高,但仍遇到問題。任何人都可以想出一個更好的方法來做到這一點?如果我以較小的塊將數據刷新到設備,stream_get_contents會保持連接到服務器嗎?

感謝您的任何意見。

回答

1

如果您只是發送數據並在接收端生成sql,該怎麼辦?這將爲您節省大量的字節傳輸。

數據更新是否增量?即你可以發送自上次更新以來的更改嗎?

如果您確實需要發送大量數據,您可能需要查看壓縮或壓縮方式,然後在另一側解壓縮。 (沒有看過如何做,但我認爲它可以在php中實現)

+0

我也投票贊成gzip壓縮...也許是一個小小的SOAP web服務(所以你可以訪問會話並限制傳輸,這樣你就可以發出多個請求並以塊的形式獲得響應) – Catalin 2011-05-23 09:08:21

0

編寫一個腳本,用於編譯服務器上數據庫中的文本文件,然後下載該文件。

+0

簡單地返回echo語句中的文本不提供什麼?瀏覽器是否比僅使用文本的網頁更快地下載文本文件? – Jonathon 2009-12-01 05:25:25

+0

您的問題很可能發生在從數據庫創建相對較慢的文本文件中,從而達到腳本的最大執行時間。如果幾臺機器同時嘗試這樣做,這隻會增加。如果您將服務器上的輸出創建爲文本文件,則可以規避最長執行時間,並且每天只能執行一次。 – ty812 2009-12-01 08:35:29

+0

@MartinHohenberg,這是一個有關解決超時問題的有趣解決方案。 – milesmeow 2012-11-23 20:18:17

0

您可能想考慮使用第三方文件同步服務,例如Windows Live Sync或Dropbox來獲取跨所有機器。然後,只要有一個守護進程將文件加載到數據庫中,只要文件被更改。這樣,你就避免了必須完全處理同步件。

0

您正在使用stream_get_contents(或者您甚至可以使用file_get_contents而不需要額外的行到open流),但是如果文本的數量非常大,就像標題所說的那樣,您將填滿記憶。

我在爲遠程服務器編寫腳本時遇到了這個問題,這裏的內存是有限的,所以不起作用。我找到的解決方案是使用stream_copy_to_stream,而不是將文件直接複製到內存中。

這是complete code這一功能。