php — заголовочный файл — проблема с относительными путями

У меня есть веб-приложение на php. У меня есть файл header.php, в котором есть открывающий тег html, метаданные, файл css, js.

У меня есть несколько папок в этом приложении. Я указал относительные пути к файлам css, js в файле header.php. Проблема, с которой я сталкиваюсь, заключается в том, что когда я включаю этот файл header.php в какой-либо другой файл, скажем, ./test-folder/my-file.php, относительные пути разрываются.

поэтому, чтобы решить эту проблему, я указал абсолютные пути, где это когда-либо было необходимо. Но мне приходится менять эти пути каждый раз, когда я загружаю на сервер. Можно ли это сделать каким-то другим способом?

заранее спасибо

Анжи


person Anji    schedule 27.04.2011    source источник


Ответы (4)


Не используйте статическое значение для пути, вместо этого определите константу для корня документа и используйте эту константу.

define('ROOT_PATH',$_SERVER['DOCUMENT_ROOT']);

При включении файлов вы можете использовать эту константу.

include ROOT_PATH.'/some_dir/file.php';
person Shakti Singh    schedule 27.04.2011
comment
Спасибо за ответ. Итак, в каком файле мне нужно определить ROOT_PATH? header.php подойдет? - person Anji; 27.04.2011
comment
@Anji: У вас должен быть один файл config, который будет содержать переменные конфигурации и будет включен, как только ваше приложение запустится. - person Shakti Singh; 27.04.2011
comment
разве это не будет той же проблемой, включая файл config? - person Anji; 27.04.2011
comment
@anji: Нет, это не может быть так, что вы помещаете свой config файл в каталог document_root и можете включать напрямую, как include 'config.php' Включение файла конфигурации должно быть в вашем корневом index.php файле - person Shakti Singh; 27.04.2011

У вас плохая архитектура в вашем приложении. Попробуйте поискать информацию о MVC.< br> Этот ответ может быть полезен: https://stackoverflow.com/questions/5721353/what-is-good-neat-architecture-in-programming/5793753#5793753
Итак:

person OZ_    schedule 27.04.2011

Относительные пути относятся к текущему рабочему каталогу (cwd). Если вы просто включаете другой файл, который cwd не меняет.
Если вы хотите иметь пути, которые (в некоторой степени) относятся к текущему пути к файлу сценария, вы можете использовать например

require dirname(__FILE__).'/some_dir/file.php';

или с php 5.3

require __DIR__.'/some_dir/file.php';

см. также: http://docs.php.net/language.constants.predefined

person VolkerK    schedule 27.04.2011

Если я правильно понял ваш вопрос, вы просто хотели бы узнать корневую папку вашего приложения без необходимости его жесткого кодирования.

Более простой способ - определить константу, как ответила Шакти.

Однако на самом деле вы можете иметь файл с уникальным именем, например «foobar», в корневой папке, а затем идти вверх по дереву из текущего каталога, пока не найдете foobar.

person mmhan    schedule 27.04.2011
comment
извините, я не мог понять, о чем файл foobar. - person Anji; 27.04.2011
comment
Скажем, у вас есть foobar в /var/www/public_html/, а ваш cwd неизвестен, но наверняка что-то вроде /var/www/public_html/my/current/folder/. После того, как вы получили текущий рабочий каталог, пока foobar не найден, поднимитесь на один уровень выше. Вы получили свой корневой каталог, когда нашли файл foobar. - person mmhan; 27.04.2011
comment
да .. так что в основном foobar используется для получения корневого каталога. Благодарность - person Anji; 27.04.2011