PHP包含其他PHP文件的问题

3
我有一个网页,其中包含许多php文件,我想知道如何阻止用户单独查看php include文件?

你能澄清一下你的问题吗? - Haim Evgi
请问您能否详细解释一下吗?包括使用include()函数的多个页面和用户访问权限? - Phill Pafford
我有一个名为includes的文件,其中包含许多PHP脚本。 - HELP
5个回答

6

一种流行的方法是在包含文件中定义一个常量:

define ("INCLUDE_OK", true);

然后要检查每个子包含文件:

if (!defined("INCLUDE_OK")) die ("This file can't be executed directly");

另外,正如@mikerobi在他现已删除的回答中所说,将include文件存储在Web根目录之外的文件夹中。


你如何将文件存储在网站根目录外的文件夹中? - HELP
@blah 的引用方式与包含 Web 根目录外的文件相同。例如:include("../folder/name.php"); - Pekka
@Pekka 我的意思是,您如何将文件存储在网站根目录之外的文件夹中? - HELP
@blah 这取决于您的服务器设置。您现在使用什么上传文件?在共享托管包上,有时不可能,因为FTP“根”目录与Web根目录相同。 - Pekka
现在我正在使用本地主机,但我可能会使用类似GoDaddy的东西。 - HELP
@blah 然后这将取决于Godaddy是否提供超越Web根目录的访问。我认为他们会,但你应该检查一下。 - Pekka

2
如果用户根本不应该调用PHP文件,那么它们就不应该在文档根目录中。例如,如果您的文档根目录是/var/www/html,我会创建一个/var/www/include目录并将它们放在其中。这样用户就无法调用它们了,用户应该可以引用它们作为../include/myinclude.php。请注意保留HTML标签。

1
在您的主文件中,可以这样做:
<?php
    define('AAA',true);
?>

在所有的包含文件中,将以下内容写在最顶部:

<?php
    defined('AAA') or die('Access denied.');
?>

或者,您可以使用htaccess文件。


1

你的包含 PHP 文件不应该在没有调用函数的情况下执行任何操作,而且你应该确保文件扩展名是 php 或者其他使用 php 编译的扩展名(例如 includes.php)。如果你有一个叫做 includes.inc 的文件,一些服务器可能会直接显示该文件的源代码,这本身就存在安全漏洞。如果你遵循这些规则,甚至不需要检查其他变量等。


0
你可以在主页面上设置一个变量,并在包含的页面上建立一个简单的检查。如果变量未设置,则不显示该页面。这并不美观,但它可以工作...
//On the main page
$check = true;
include(../someFile.php);

//someFile.php
if($check == true){
  //Display your content
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接