2012-11-07 65 views
4

我想從一個URL包含一個文件,但是我得到了下面的錯誤。get around allow_url_include = 0錯誤

Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in /Applications/MAMP/htdocs/diningtime/testsite/salims/index1.php on line 58 

Warning: include(http://localhost/diningtime/templates/100/index.php): failed to open stream: no suitable wrapper could be found in /Applications/MAMP/htdocs/diningtime/testsite/salims/index1.php on line 58 

Warning: include(): Failed opening 'http://localhost/diningtime/templates/100/index.php' for inclusion (include_path='.:/Applications/MAMP/bin/php/php5.4.4/lib/php') in /Applications/MAMP/htdocs/diningtime/testsite/salims/index1.php on line 58 
Test 

只是想知道是否有這個嗎?

我的PHP包括代碼是

<?php include "$location/index.php"; ?> 

我很欣賞你這個幫助。

+0

爲什麼要通過HTTP請求而不是通過本地文件路徑從同一服務器「包含」文件?你有*需要*做出HTTP請求嗎? – deceze

+0

是的,當網站正在運行時,它將從另一臺服務器上拉出來,所以我需要測試這個概念。 – AppleTattooGuy

+0

假設這是一個遠程文件,而不是欺騙指出只是一個錯誤包含的本地文件...你問如何啓用它? 'ini_set('allow_url_include',1);'或編輯你的php.ini文件。 – ficuscr

回答

20

您在包含路徑時使用了完整的URL,它告訴PHP嘗試執行HTTP請求來獲取該文件。這是不是你是如何做到這一點的。除非...100/index.php輸出PHP代碼,否則您將獲得一些HTML或其他內容作爲包含結果,而不是文件中的php代碼。記住 - 你是通過URL獲取的,這意味着它是一個HTTP請求,這意味着Web服務器將EXECUTE該腳本並提供其輸出,而不是簡單地提供其源代碼。

Web服務器沒有辦法告訴該腳本的HTTP請求是來自同一服務器上另一個PHP腳本的包含調用。隱藏在俄羅斯的一些黑客想要竊取你的源代碼就可以很容易地要求該腳本。你想讓你的源代碼像這樣對世界可見嗎?

對於本地文件,你不應該使用一個完整的URL。這是非常低效的,並且不會做你想做的事。爲什麼不簡單地有

include('/path/to/templates/100/index.php'); 

而不是,這將是一個本地文件的請求,沒有HTTP階段包括?

+1

感謝您的回答,基本上當網站是活的我需要從通用文件中提取源代碼,因此有人可以從一系列模板中爲那些網站選擇。如果我可以通過HTTP包含文件,最佳做法是什麼?我很感激你的幫助... – AppleTattooGuy

+2

允許通過網址包括可怕的糟糕。如果您允許用戶直接指定要包含的文件,則您基本上允許它們從任何地方加載任意代碼,並且您的服務器將愉快地衝洗廁所。重新思考你的設計...... –

+0

嗨,這解釋了我的邏輯。但有一個疑問,用戶在瀏覽器端如何能夠包含文件。謝謝@MarcB – sun

1

我有類似的問題。

考慮到'Marc B's'的帖子,很明顯使用絕對URL並不是一個好主意,即使可以通過將php.ini編輯爲'ficuscr'狀態來實現。我不確定此解決方法是否適用於您的特定情況,因爲它仍然需要根據文件夾結構中的位置對每個頁面進行調整,但如果像我一樣在您的文件夾中包含大量內容網站。

<?php $root="../";?> 
<?php include($root . 'folder-A/file_to_be_included_1.php');?> 
<?php include($root . 'folder-A/file_to_be_included_2.php');?> 
<?php include($root . 'folder-B/file_to_be_included_3.php');?> 
<?php include($root . 'folder-B/file_to_be_included_4.php');?> 
<?php include($root . 'folder-B/sub-folder/file_to_be_included_5.php');?> 

對我來說,這意味着如果我移動頁面到文件夾結構中的另一個位置,例如在其當前位置的子文件夾,所有我需要做的就是修改​​成爲<?php $root="../../";?>例如