2011-12-27 86 views
0

我有兩臺服務器。服務器A擁有所有數據庫。服務器B如何查詢服務器A的數據庫並通過fsockopen()接收結果? 目前,我只能通過套接字傳遞實際文本(即,如果服務器A的php代碼打印出如echo中的內容)。我如何通過這個打開的套接字中的查詢結果(資源)?通過PHP中的fsockopen()傳遞資源

+0

讓我給你這片披薩。等等,我不能以數字方式傳輸它,我可以嗎?我只會發一張照片;這同樣好,對吧? – outis 2011-12-28 04:04:06

+1

更嚴重的是,通過網絡發送資源就像發送本地路徑名一樣。另一臺計算機可能通過訪問它來找到一個文件,但它不會與計算機上的文件相同。 – outis 2011-12-28 04:06:45

回答

1

如果使用fsockopen是您能夠與服務器B的數據庫進行通信的唯一方式,則序列化查詢結果或將其編碼爲JSON格式並將它們寫入套接字是可能的。

是不是可以從服務器A授予對mysql服務器的只讀訪問權限,所以您可以直接查詢?否則,REST服務將是fsockopen的一個很好的選擇。

如上所述,您無法通過套接字傳遞資源,因爲它無論如何對服務器A都沒有任何意義。如果您試圖通過套接字傳遞它可能會返回一個字符串(即資源#1)

+0

我將如何使用REST傳遞資源? – YWSW 2011-12-27 20:20:54

+1

您無法通過任何方式傳遞資源;它只在腳本內有效,它是在腳本生命週期中創建的。您將需要提出一個備用方法來從服務器A與數據庫進行通信。 – drew010 2011-12-27 20:27:20

1

您無法通過fsockopen傳遞PHP resource type*­Docs*,因爲fwrite/read會將數據轉換爲(二進制)字符串。請參閱:

轉換爲資源

由於資源變量舉行特別處理程序打開文件,數據庫連接,圖形畫布區域等,轉換爲資源沒有意義。

將資源轉換成別的東西也是如此,例如,一個字符串。

0

你在做什麼?只需允許遠程mysql並讓數據庫服務器完成其工作。