2013-04-18 77 views
2

page1.php中:運行代碼包括

include 'page2.php'; 
echo $info; 

使page2.php:

$info = "some info"; 
if(!included){ 
    echo 'Why are you on this page?'; 
} 

if(!included){的目標是確定是否page2.php經由includepage1.php加載,或者如果用戶直接請求頁面。文檔中沒有返回這種值的函數。我怎樣才能創建這樣的功能?

+1

我想要這個,我想要那個嗎?什麼? –

+0

@ Mr.Alien做什麼,跳什麼 – Kermit

+0

@FreshPrinceOfSO跳舞不好:p –

回答

4

您有兩種基本選擇:

a)檢查與debug_backtrace如果你被列入

$bt = end(debug_backtrace()); // supposing that you don't include in functions/from other included files etc... 
if (!empty($bt) && in_array($bt["function"], array("include", "include_once", "require", "require_once"))) { 
    // you're being included! 
} 

b)定義一些常量,變量等。page1.php中的第2頁查看。 PHP的,如果它存在(definedisset

+0

debug_backtrace仍然像我記得那樣昂貴嗎?這將是一個很好的全面解決方案,但我很好奇。 – Codeacula

+0

它很貴。但是我建議你使用常量/變量的第二個解決方案,如果你不需要這樣一個緩慢的catch-all函數,你可以使用它。 – bwoebi

1
if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { 
    echo "wild and free!"; 
} 
+1

不......錯! '$ _SERVER [「PHP_SELF」]不包含完整路徑,只有URL中明顯的目錄結構,而__FILE__包含從文件系統根目錄開始的完整路徑。 – bwoebi

1

竊取/與bwoebi同意,你可以做一個定義。

在page1.php中:

define("PAGE1_NOT_USER", true); 

則page2.php中,爲你的代碼只希望在用戶請求運行:

if(!defined("PAGE1_NOT_USER")) 
{ 
    <code here> 
} 

我的PHP是生鏽的,但應該做的訣竅。調試選項涵蓋了所有的基礎:我只是覆蓋了這個(和其他任何你可能使用的定義)。