2012-02-29 54 views
1

我的問題是我無法在遠程服務器上包含文件。無法在遠程服務器上包含文件

<?php 
    echo "Including\n"; 
    require_once("http://xx.xxx.xxx.xx:8080/path/to/myfile.inc"); 
    echo "Done..\n"; 
?> 

腳本在require_once函數失敗。 我運行的腳本:PHP -d allow_url_include =開的script.php 但爲了確保我已經在php.ini

設置allow_url_include並於allow_url_fopen到,如果我複製到http://xx.xxx.xxx.xx:8080/path/to/myfile.inc我所服務的瀏覽器文件。 我也試圖包括其他遠程文件(在標準端口80),但仍然沒有運氣

我真的很困惑的地方是,一切工作從我的本地計算機在我的辦公室(mac,ubuntu),但不是我們的服務器我已經在2個不同的服務器上進行了測試,虛擬和專用。 我可以用fopen()獲取文件。

+3

您通常會**不想**包含遠程文件。如果他們輸出任何PHP代碼,它將在您的系統上執行! – ThiefMaster 2012-02-29 12:08:48

+0

加上它真的很慢。 – 2012-02-29 12:09:53

+0

我瞭解安全方面。我可以完全控制兩臺服務器,並可以限制文件訪問服務器。在實踐中,所有的服務器都在同一個網絡上,所以我希望它不會太慢,但我要測試一下。只是好奇它爲什麼它在一些機器上運行而不是其他機器? – user918712 2012-02-29 12:35:26

回答

0

Require_Once只能用於本地文件。如果你想獲得一個遠程文件,使用file_get_contents。請記住,如果您嘗試從遠程服務器那樣包含PHP,它將會非常不安全,或者PHP將在遠程服務器上執行。

+0

從文檔說,我應該能夠使用require_once:[http://php.net/manual/en/features.remote-files.php](http://php.net/manual/en/features。 remote-files.php),它也可以在我的本地計算機上運行 – user918712 2012-02-29 12:41:02

+0

如果您閱讀文檔,它會說:另外,可以使用URL ...自PHP 5.2.0起,必須爲這些allow_url_include啓用。 – MichaelH 2012-02-29 12:45:42

2

這可以通過在php.ini上設置allow_url_includeon來完成。

但是,正如評論所說,這將打開應用程序的開發

巨大

安全漏洞。

+0

但是,如果您絕對必須包含來自遠程服務器的內容,請考慮添加額外的身份驗證和緩存! – symcbean 2012-02-29 13:07:31

+0

@symcbean謝謝。我知道這是不安全的,我可以避開包括遠程服務器上的文件,但問題是爲什麼它在某些機器上無法使用。 Starx:正如我在帖子中寫的 - 我確實設置了allow_url_include到On – user918712 2012-02-29 13:19:57

+0

我想你可以使用像stunnel(https://www.stunnel.org/index.html)這樣的東西來確保服務器之間的通信。 – ven 2013-04-18 00:08:21