php包含won';访问web目录之外的文件


php include won't acess files outside of web directory

我有一个名为connect.php的文件,它提供了访问mysql数据库的详细信息,为了安全起见,它被保存在我的web目录之外,但我无法使用require()或include()访问我的页面。为了测试原因,我创建了一个非常简单的程序,名为test.php:

<?php
echo "This one works!";
?>

如果我把它放在我的web目录中,并使用调用它

include('Test.php');

然后打印消息。如果我把它留在web目录中,并做一个绝对路径:

include('/home/eddy/web/html/Test.php');

那就行了,但如果我把它放在其他地方并尝试链接到它:

include('/home/eddy/security/Test.php');

include('../../security/Test.php');

然后它什么也不做。

echo 'X';
echo include('/home/eddy/security/Test.php');
echo 'Y';

返回"XY";

我没有出现错误消息,我相信系统管理员出于安全原因已经关闭了错误警告。

有什么想法吗?

首先尝试在您的文件中打开错误报告,通过在php文件的顶部包含以下内容来进行包含:

ini_set('display_errors',1); 
error_reporting(E_ALL);

根据您的服务器配置,它应该显示错误。

然后,就您的问题而言,您需要检查您对/home/eddy/security/文件夹以及文件/home/eddy/security/Test.php 的所有权和写/读权限

您需要检查的是,该文件夹和文件与您的普通webroot文件夹具有相同的所有权,并且该文件夹和文件夹具有读取权限。假设您的Web服务器用户是www数据,您可以尝试以下操作:

chown -R www-data:www-data /home/eddy/security
chmod 744 /home/eddy/security
chmod 644 /home/eddy/security/Test.php

您运行的是哪种类型的web服务器?根据经验,如果是Apache,那么你可以读取服务器默认webroot目录之外的文件,所以我很想知道错误报告和/或权限是否真的为你解决了这个问题。