Определите корневой путь один раз в одном месте - PullRequest
4 голосов
/ 05 августа 2011

Мне нравится ссылаться на изображения, файлы CSS и php, используя их абсолютный путь, который начинается с root, с адресом, начинающимся с "/".

Мне нужно включить php-файлы, которые находятся в "/ bin / res / include". Я понял, что не могу использовать абсолютные пути в php, как в html. После некоторых исследований я обнаружил, что лучший метод, который соответствует моим потребностям, это

define("PHP_ROOT", "/home/a7503679/public_html/bin/res/include/");

и затем включить файл

include_once(PHP_ROOT."filename.php");

Я не хочу вставлять первое определение на каждую html-страницу. Могу ли я сделать глобальное определение? Могу ли я определить эту константу один раз в одном месте и сделать ее доступной для всех html-страниц? Если да, то как и где находится global place?


  • Я не могу использовать dirname(__FILE__);, потому что он дает только полный путь к папке, в которой я сейчас нахожусь, которая может быть не корневой.
  • Я не могу использовать $_SERVER['DOCUMENT_NAME'], потому что я пользуюсь услугой общего хостинга.

[ОБНОВЛЕНИЕ: решение] Спасибо всем, особенно RiaD за идею, вот что я сделал:

Отредактировал мой файл .htaccess в корне моего сайта и добавил следующую строку,

#Loads an init php located at <fullpath>/<path-to-folder-with-php-files-to-include>/init.php
php_value auto_prepend_file /home/a7503679/public_html/bin/res/include/init.php

Теперь все мои html-файлы будут включать этот файл init.php, поэтому вы (как и я) должны поместить туда весь общий php-код, который вам понадобится на каждой html-странице, который в моем случае был:

<?php
define("PHP_ROOT", "/home/a7503679/public_html/bin/res/include/"); #this solves the problem
include 'lang.php'; #translations file
?>

Раньше мне нужно было включать это lang.php на каждой странице, и теперь это делается автоматически. Если мне нужно включить любой другой файл php, используя его абсолютный путь, я просто наберу include PHP_ROOT.'filename.php';

Ответы [ 3 ]

3 голосов
/ 05 августа 2011

Вы можете использовать auto_prepend_file в вашем .htaccess

PS: $_SERVER['DOCUMENT_ROOT'] должно работать (также на общих хостингах)

1 голос
/ 05 августа 2011

Я думаю, что вы хотите изменить include_path в php.ini , чтобы включить ваши собственные пути включения.Затем вы можете просто включить файлы без каких-либо определителей пути, и, если они не присутствуют в текущем каталоге, PHP выполнит их поиск по вашим путям включения.Если вы не можете изменить свой php.ini, позвоните по номеру set_include_path в файле конфигурации, который, как вы знаете, вам все равно придется включить на каждую страницу.:)

0 голосов
/ 05 августа 2011

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

...