PHP绝对路径不起作用

时间:2015-06-14 05:15:43

标签: php virtualhost

我已经设置了一个简单的虚拟主机。

只是在底部添加了这些行

<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;); ,我得到输出

1 个答案:

答案 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