У меня возникла проблема с 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 и следуя советам, как
- Определить константу, как DOCUMENT_ROOT с базовым директором файла. (Как тот, что он говорит здесь в SO ->https://stackoverflow.com/a/22912261/1001242)
- также попытался с различными опциями, как DIR, имя_базовой_папки (FILE) и т.д.,
- Добавлен мой каталог приложения (/ 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 /»), что и стало основной причиной. Следовательно, я разделил их на два и теперь отлично работает.
Спасибо всем. Очень признателен.
константы не нужны кавычки – Rupam
рупам, спасибо. Я использовал метод getDocumentRoot(), чтобы получить ссылку. Я сейчас поправил это в своем посте. – itsraghz
Проблема всегда была там, в первый раз, когда вы использовали include, и во второй раз, который вы использовали, требуется. разница между этими функциями, которые требуют выброса фатальной ошибки, если файл не существует, и включают в себя не порождать фатальную ошибку. – 4EACH