执行脚本,但不允许用户访问它

时间:2011-12-11 21:25:09

标签: php

  

可能重复:
  How to hinder PHP files to Global Access

对于我正在进行的项目,我要求(“xxxx.php”);将我网站的某些部分包含在我的网站中。

例如,我有header.php,我的网站只使用一个简单的require(“header.php”)来向世界展示。

现在,我该怎么做才能使页面包含header.php的内容,但是要让用户无法通过

访问它

http://mywebsite.com/header.php

5 个答案:

答案 0 :(得分:4)

将文件放在Web服务器的DocumentRoot之外的某个位置。

答案 1 :(得分:3)

设置网络服务器,以便:

  1. 您有一个可访问文件所在的公共目录,例如静态媒体+ index.php等等

  2. 拥有一个资源目录,位于公共文件夹之外。

  3. 将网络服务器设置为从公共目录

  4. 提供
  5. 包括这样的内容:

    需要( “../私人/ header.php文件”);

答案 2 :(得分:3)

您可以在索引文件中定义一个常量,然后在header.php中进行检查,以便检查此常量。

// check if the header.php file is accessed directly
if (!define('MY_SECRET_CONSTANT')) {
    exit();
}

答案 3 :(得分:1)

从答案中可以看出:有很多方法可以做到这一点,这里有两个非常简单的方法,不需要你改变你的目录结构:

index.php和其他包含header.php的文件中:

define('INCLUDED', true);
require 'header.php';

header.php

if(!defined('INCLUDED')){
  die('Forbidden'); // or you could redirect to home ... whatever you want :)
}

或者,您可以通过.htaccess禁止访问。因此,您甚至不必触摸您的代码:

<Files header.php>
  order allow,deny
  deny from all
</Files>

如果您的包含在一个目录中,您只能拒绝访问该目录。

答案 4 :(得分:1)

您可以使用htaccess来确保不会查看特殊文件。通过虚拟主机条目可以实现相同的目的。

最好的做法是创建一个/ web文件夹,它是应用程序的“根”,并存储应该可访问的所有内容。其他文件夹转到其他任何位置,并包含在脚本中,这些脚本被设计为可供用户访问。

您的结构可能如下所示:

/var/www/mySite/inc/header.php
/var/www/mySite/web/index.php (including ../inc/header.php)
/var/www/mySite/web/css/style.css

您的apache虚拟主机看起来像这样:

<VirtualHost *:80>
    ServerName www.mysite.com

    # Basic stuff
  DocumentRoot "/var/www/mySite/web"
    DirectoryIndex index.php
    <Directory "/var/www/mySite/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>

现在无法通过您的域访问inc文件夹,因为您的网络文件夹是每个人从网址传入的根目录。另一方面,您的脚本当然可以导航到低于该值,并且包括来自任何地方的脚本。