2015-06-14 6 views
-1

Я создал простой виртуальный хост.PHP абсолютный путь не работает

JUST добавил эти строки в нижней

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    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> 

То, что я в принципе хочу, а в том числе файлы в PHP из файлов внутри папки напоминания, если я дам абсолютный путь, как «/ тест /», он должен рассматривать папку напоминания как корень и искать тестовую папку изнутри напоминания.

Прямо сейчас, когда я печатаю echo DIR, я показан/var/www/Напоминание.

моя структура файла:

/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)); 
?> 

Я считаю, что если все в порядке, я должен получить сообщение «подключено успешно» (от db_connect), если я запустил registration_handler.php, но этого не происходит.

Когда я включаю один и тот же файл: require_once ("../ database/db_connect.php"); , я получаю вывод

+2

'То, что я в принципе хочу, ..., если я дам абсолютный путь, ..., следует рассмотреть папку напоминания поскольку root' php не работает так, как и он. – AD7six

+0

, но, когда я размещаю несколько файлов в таких местах, как hostgater, выполнение '/' дает мне путь к корню моих сайтов. –

ответ

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
+0

Я не заметил эту часть. В этом случае использование '__DIR__' должно быть безопасным, поэтому я обновил ответ. (Я так привык к тому, что люди используют код для старинной установки RHEL или CentOS, поэтому я всегда не решаюсь использовать что-либо «недавнее» в PHP.) – olav

Смежные вопросы