2013-04-18 76 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是生锈的,但应该做的诀窍。调试选项涵盖了所有的基础:我只是覆盖了这个(和其他任何你可能使用的定义)。