2014-12-21 4 views
1

У меня возникла проблема с PHP. Основываясь на показаниях из Интернета, я использую относительный путь для гибкости.Проблема с PHP включает в себя глобальный путь

Пока я ссылаюсь на пути непосредственно в каждом файле, как

require_once '../includes/connection.php'; // it works fine. 

Проблема начинается, когда я ссылаюсь на этом пути с глобальной постоянной

require_once getDocumentRoot() . '/includes/connection.php', 

, как говорится ниже ошибка.

Warning: require_once(/phpPractices/myApp/includes/connection.php): failed to open stream: No such file or directory in /Applications/XAMPP/xamppfiles/htdocs/phpPractices/myApp/dir1/list.php on line 19". 

Я читал так много потоков в SO и следуя советам, как

  1. Определить константу, как DOCUMENT_ROOT с базовым директором файла. (Как тот, что он говорит здесь в SO ->https://stackoverflow.com/a/22912261/1001242)
  2. также попытался с различными опциями, как DIR, имя_базовой_папки (FILE) и т.д.,
  3. Добавлен мой каталог приложения (/ phpPractices/MYAPP) в в include_path с помощью метода set_include_path() (как указано в PHP, How to set include path и http://php.net/manual/en/function.set-include-path.php)

Моя функция getDocumentRoot() определяется следующим образом.

Примечание:я мог видеть, что файл существует физически. Однако метод file_exists() возвращает false, что я не понимаю, почему. Возможно, это могло быть причиной беспокойства?

FYI, моя структура каталогов такова, как показано ниже.

htdocs 
    phpPractices 
    myApp --> Web App Root 
     includes 
     connection.php 
     inc 
     header.php 
     footer.php 
     global.php -- contains getDocumentRoot() method and included in header.php 
     index.php 
     dir1 --> my module specific dir 
     list.php --> which needs 'connection.php' 

Мой list.php содержит ниже

<?php 

include_once '../inc/header.php'; // it works fine as I do relative to the path 

//require_once '../includes/connection.php'; //works fine 
require_once getDocumentRoot() . '/includes/connection.php'; // FAILS! :(

?> 

Но ничего не помогает! Любые предложения по избавлению от этой проблемы будут высоко оценены.

Заранее благодарен!

РЕШЕНИЕ

Спасибо всем людям, кто ответил. У меня появилось новое решение, которое мне помогает :)

1. For all the menu items with links: 

    I use my getDocumentRoot() method which provides me - 
    '/phpPractices/myApp/' --> which is relative to my Web App. 

2. For all the include, require functions : 

    I defined a different constant as below & as per this link: 
     https://stackoverflow.com/a/1488293/1001242 

    define('APP_BASE_PATH', $_SERVER['DOCUMENT_ROOT'] . '/myApp'); 

    which returns me the complete absolute path which works fine for file inclusion. 

Я принимал участие в этих двух случаях. Для включения файла результат getDocumentRoot() «/ phpPractices/myApp» терпел неудачу, поскольку он пытался найти каталог с именем «phpPractices» в корне («/ phpPractices /»), что и стало основной причиной. Следовательно, я разделил их на два и теперь отлично работает.

Спасибо всем. Очень признателен.

+0

константы не нужны кавычки – Rupam

+0

рупам, спасибо. Я использовал метод getDocumentRoot(), чтобы получить ссылку. Я сейчас поправил это в своем посте. – itsraghz

+0

Проблема всегда была там, в первый раз, когда вы использовали include, и во второй раз, который вы использовали, требуется. разница между этими функциями, которые требуют выброса фатальной ошибки, если файл не существует, и включают в себя не порождать фатальную ошибку. – 4EACH

ответ

0

Update ваша функция getDocumentRoot() возвращает абсолютный путь

function getDocumentRoot() 
{ 
    return dirname(__FILE__); 
} 

или использовать dirname(__FILE__) в вашем требуют

+1

Это не сработает, потому что _ \ _ FILE _ \ _ содержит имя файла getDocumentRoot(). – Loenix

+0

Спасибо @ G45. Леона прав, поскольку __FILE__ предоставит каталог соответствующего файла. Следовательно, у меня есть diff-реализация getDocumentRoot(), которую я настроил и разделил выше в своем сообщении. Файл физически существует, но метод file_exists() возвращает false. – itsraghz

+0

@itsraghz pls перечисляет вашу структуру каталогов из webroot, где файлы, содержащие getDocumentRoot() и require_once getDocumentRoot(). '/includes/connection.php', – Gihan

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

  • Нет связанных вопросов^_^