0

我有一个名为 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';

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

有任何想法吗?

4

1 回答 1

0

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

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

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

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

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

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

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

于 2013-08-20T23:08:40.247 回答