2012-05-14 43 views
1

我的网站的主文件(的index.php)的代码是在这里:如何防止用户看到“包含文件”?

<?php 
include 'header.php'; 
include 'sidebar.php'; 
include 'content.php'; 
include 'footer.php'; 
?> 

但我不希望任何用户看到这些文件包括写“www.domain.com/header.php”。我应该在这些文件中插入一个php代码还是可能的?

回答

2

您可以在主文件中定义一个常量,并用它在你的包含文件DETEC它们是否真的包括或不包括:

的index.php

<?php 
define('REALLY_INCLUDED', true); 
include'header.php'; 

的header.php

<?php 
if(!defined('REALLY_INCLUDED') || !REALLY_INCLUDED) { 
    exit(); 
} 
... 
+0

...然后你忘记常量在某处并暴露该文件。 “哎呀呀”。如果你想要一些保密的东西,不要把它放在文档的根目录中。 –

+0

这会引发一些不必要的警告。在定义期间添加引号:'define('REALLY_INCLUDED',true);'并使用正确的函数来检查常量是否被定义:'if(!defined('REALLY_INCLUDED')||!REALLY_INCLUDED){...' –

+0

如果在另一个包含文件中调用了包含文件,该怎么办?第一个被Javascript调用?第一个不能定义这个常量,并检查这个常量是否已经同时被设置。它不会工作。我建议@AndreasEriksson的回答为 –

9

您有几种选择。

  1. 保持文件的根目录以外(所以他们不会自动获得自己的URI)
  2. 配置你的服务器,因此拒绝某个变量/常数设置为他们服务
  3. 测试,并然后将其设置在允许包含它们的每个文件中。如果没有设置,则为exit
+0

+1,用于将所有这些文件从webroot中移出。 – Arkh

7

这里有一个PHP给你。

if(basename(__FILE__) == basename($_SERVER['PHP_SELF'])){exit();} 

总之,如果调用文件本身就退出执行。

消息来源:http://thephpcode.blogspot.se/2009/07/creating-include-only-php-files.html

+1

不错的工作,男人。在我看来,这是一个完美的答案。有时,将变量或常量应用于包含的文件是不可能的(也许很难),因为它们是通过AJAX调用的 –

相关问题