2010-06-06 128 views
1

我有一個基於php的網站,它使用SSL並要求用戶在訪問任何頁面之前登錄。我想允許從另一個域訪問此網站,以便功能保持不變,但用戶的外觀,感覺和域更改(具有額外的優勢,我只能維護一個版本的代碼)。使用遠程URL和SSL使用readfile()

完成一些閱讀後,我在輔助服務器上的php文件中使用readfile()函數調用主服務器上的相應文件。例如,主服務器上的login.php是通過名爲login.php的文件從輔助服務器訪問的,該文件包含readfile(「http://www.primarydomain.com/login.php」)(除此之外)。

現在的問題 - 我甚至無法登錄!登錄頁面在初始調用時顯示正常,但當輸入並提交登錄用戶和密碼時,就好像遠程服務器沒有看到觸發表單處理的$ _SERVER ['REQUEST_METHOD']變量,只是作爲空表單加載。

任何想法我做錯了或我可能需要改變什麼配置?

謝謝!

+0

你可以顯示你用來做登錄的代碼嗎? – 2010-06-06 15:03:05

+0

您是否將[* context *](http://www.php.net/manual/en/function.stream-context-create.php)參數提供給['readfile'](http://php.net) /manual/en/function.readfile.php)?我想你需要通過上下文傳遞請求變量(用戶名,密碼)。當你傳遞一個URL到'readfile()'時,PHP將在該域上執行,只有輸出將被讀取。 – 2010-06-06 15:12:55

回答

0

創建一個PHP文件,然後將其用於跨多個站點的相同目的是一個好主意。但是,以這種方式使用該文件的方式取決於您的託管軟件包的一般基礎架構。

如果你有一個託管帳戶,允許所有的一個帳戶下受影響的網站的主機,你應該能夠調用常見的文件(在這種情況下login.php)使用include()require()功能。

<?php 
require('/home/1234/public_html/common/login.php'); 
?> 

在這種情況下,所有這一切的PHP文件的功能將如同它是調用頁面的一部分執行。

如果您在多個託管帳戶/服務器上有多個站點,則上述內容不再可用。使用readfile()函數將能夠收集如果通過瀏覽器訪問URL將會看到的輸出,但底層功能將會丟失 - 也就是說,您不能調用login.php文件並讓它實際上在輔助服務器上執行登錄現場。

在這種情況下,您確實需要獲取實際PHP文件的副本,並將它們放在輔助服務器/帳戶上以使用它們。

這可能會使管理文件的版本變得稍微困難​​一點,但這是處理此問題的常用方法,只要您記得將任何文件更新推送到所有受影響的站點,它都能正常工作。

+0

感謝您的信息。 作爲迴應,輔助站點將不會在同一個託管帳戶下進行管理 - 我打算允許客戶使用此方式訪問主站點,並在登錄時應用進一步的檢查以防止訪問「未經授權」的IP (任何不是來自我的客戶)。 也許可以按照Andy的評論所建議的使用上下文變量來完成我所需要的工作 - 我會進一步研究以瞭解它是否可行。 另外,是否有另一種方式來從主站點「包含」代碼,以便在執行時看到所有變量? Thx – ColmF 2010-06-07 14:55:42

+0

想要添加 - 我不希望允許客戶端在可能的情況下查看php代碼,因此我嘗試了這種方法。 – ColmF 2010-06-07 14:58:45

+0

這是一個不錯的主意,但不切實際。在增加宕機風險(您的所有客戶端站點都依賴於您的服務器始終可用並可隨時訪問)和效率降低之間(您完成此操作的所有頁面負載都會將中繼請求延遲到中央服務器) ,還有一百萬個其他不好的副作用。添加到您可能違約的合約條款中,永遠不會實際提供所購買的代碼。如果您擔心您的代碼被重新使用或誤用,請查看PHP混淆 - http://www.google.com.au/search?q=php+code+obfuscation – 2010-06-08 00:01:46