我已经设置了一个简单的虚拟主机。
只是在底部添加了这些行
<VirtualHost *:80>
ServerAdmin webmaster@yourdomain.com
DocumentRoot "/var/www/Reminder/"
<Directory "/var/www/Reminder">
AllowOverride all
Require all granted
php_admin_value open_basedir "/var/www/Reminder/"
</Directory>
php_admin_value open_basedir "/var/www/Reminder/"
ServerName test.mydomain.com
ErrorLog "logs/yourdomain.com-error_log"
CustomLog "logs/yourdomain.com-access_log" common
</VirtualHost>
我基本上想要的是,当我在Reminder文件夹中的文件中包含文件时,如果我给出一个绝对路径,比如&#34; / test /&#34; ,它应该将Reminder文件夹视为根,并从Reminder中搜索测试文件夹。
现在,当我输入echo DIR 时,我会看到/ var / www / Reminder。
我的文件结构是:
/var/www/Reminder/database/db_connect.php /var/www/Reminder/registration/registration_handler.php
这是我的db_connect.php所拥有的:
<?php
define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','password');
define('DBNAME','Reminder');
$conn=mysqli_connect(DBHOST,DBUSER,DBPASS) ;
if(!$conn) {
echo mysqli_connect_error();
}
else {
echo "connected successfully";
}
?>
这就是我的registration_handler所拥有的:
<?php
echo "hi";
echo __DIR__;
require_once("/database/db_connect.php");
mysqli_query($conn,"INSERT INTO users () VALUES ()") or die (mysqli_error($conn));
?>
我相信,如果一切顺利,我应该能够成功连接&#34;消息(来自db_connect),如果我运行registration_handler.php,但那没有发生。
当我包含相同的文件时:require_once(&#34; ../ database / db_connect.php&#34;); ,我得到输出
答案 0 :(得分:0)
open_basedir
选项仅限制允许从PHP代码访问的路径。它不会影响PHP代码中文件查找的工作方式。
这意味着如果您尝试打开open_basedir
(因为它超出了允许的目录范围之外),将/var/www/Reminder/
设置为/etc/passwd
将导致错误。它不会将/etc/passwd
的开放转换为/var/www/Reminder/etc/passwd
。
您可能想要的是使用__DIR__
常量以便通过相对路径打开。例如,要从/var/www/Reminder/database/db_connect.php
加载/var/www/Reminder/registration/registration_handler.php
,您可以使用以下内容:
$basedir = dirname(__DIR__);
require_once($basedir . '/database/db_connect.php');
我们使用dirname()
从__DIR__
的末尾删除最后一个路径组件。即:
__DIR__
:/var/www/Reminder/registration
dirname(__DIR__)
:/var/www/Reminder