2013-03-14 34 views
1

我讀過這麼多不同的輸入,所以我想我會問這裏。使用包含內部的完整鏈接是錯誤的嗎?

有什麼問題或危險有關使用PHP裏面全環節包括哪些內容?

實例,

<?php include('http://www.domain.com/blah.php'); ?> 


<?php 
define('WEB_ROOT', './'); // relative path to/
include('layout.php'); 
?> 

相比於使用

<?php 
include('../blah.php'); 
?> 
+0

如果你在同一個項目中,幷包括同一個項目的文件,他們爲什麼會使用完整的網址? – ripa 2013-03-14 06:55:54

+0

我們需要使用文檔根目錄路徑文件包括未根目錄路徑 – 2013-03-14 06:56:30

+0

我更喜歡'包括(目錄名(__ FILE __)「/ layout.php中」);' – 2013-03-14 06:58:54

回答

2

include('http://www.domain.com/blah.php')熄滅,使實際的HTTP請求發送到web服務器,返回URL的內容的web服務器已處理後它們就像您在瀏覽器中輸入該網址時看到的一樣。

include('../blah.php')包括從磁盤一個目錄更高的本地文件。

兩者是完全不同的事情,你做要包括URL時,你的意思是包括本地文件。即使這兩個文件應該是相同的文件,PHP也無法知道這一點。訪問URL和訪問本地文件路徑是完全不同的事情。無法推斷兩者是相同的。

+0

我很欣賞你的細節,因爲它現在在兩者之間有意義。我總是很好奇真正的區別。現在,要驗證你的答案和其他答案,說完整的網址是危險的...是define('WEB_ROOT','./');包括( './ layout.php中');就像完整的url一樣危險,還是仍在拉本地文件?我將使用多個目錄,用戶可以實際創建目錄,這就是爲什麼我想要使用某種在整個站點中通用的路徑,而不是使用../../來返回目錄。 – kdjernigan 2013-03-14 09:16:38

+0

只要路徑不以'http://'或其他*協議*開始,它始終是本地路徑。所以定義一個常量是好的,但是你應該定義一個* absolute *路徑,比如'define('ROOT',dirname(__ FILE__)。DIRECTORY_SEPARATOR)'。更好的選擇是使用基於類的編程和自動加載。這對保持代碼組織起來更好,並且讓你完全不用考慮包含路徑。 – deceze 2013-03-14 09:29:22

+0

你有自動加載引用類的例子的鏈接?以前從未這樣做過。 – kdjernigan 2013-03-14 10:26:29

0

<?php include('http://www.domain.com/blah.php'); ?>是很危險的,你可以不知道100%是什麼,你會得到的代碼!因爲PHP做HTTP請求,有人可以做ManInTheMiddel攻擊,並改變你將得到的代碼,並破解你的網站。

+0

如此完整的網址是壞的...但像define('WEB_ROOT','./');包括( './ layout.php中');會工作,並沒有危險的方式是正確的? – kdjernigan 2013-03-14 09:13:48

相關問題