Я настраиваю среду тестирования для проекта клиента для приложения, которое уже было запрограммировано кем-то другим. Я создал подкаталог под названием iftc
в учетной записи хостинга, который мы обычно используем для таких целей.
Теперь все включенные файлы не найдены, поскольку они ссылаются через
include($_SERVER['DOCUMENT_ROOT'].'/Includes/Connect.php');
И так далее.
Если вы не настроите совершенно новую учетную запись хостинга только для целей тестирования для этого конкретного клиента, могу ли я изменить значение $_SERVER['DOCUMENT_ROOT']
каким-то образом, чтобы включить вложенную папку iftc
, в которой находятся файлы?
Есть несколько способов сделать это, но лучше всего просто найти и заменить все использование $_SERVER['DOCUMENT_ROOT']
простым вызовом функции.
Таким образом, ваш пример станет следующим:
include(get_my_path() . '/Includes/Connect.php');
Определите текущий режим работы:
define('RUN_MODE_PRODUCTION', true); // in live mode define('RUN_MODE_PRODUCTION', false); // debug mode
Теперь для определения функции:
function get_my_path() { if(RUN_MODE_PRODUCTION === true) { return '/my/path/'; } return '/my/other/path'; }
Переопределение фактических значений в $_SERVER
– плохая идея. Если кто-то еще позже приступит к работе над проектом, не будет ясно, что происходит.
Это очень упрощенная версия начальной загрузки среды, которую я использую в производстве каждый день.
SetEnv
RewriteRule ^$ /home \[E=VAR:VAL\]
Когда я настраивал свою массовую виртуальную среду для разработки, я столкнулся с этой проблемой. См. http://blog.simonholywell.com/post/1516566788/team-development-server#virtual_document_root
Поскольку я не мог переопределить $_SERVER['DOCUMENT_ROOT']
используя любой из вышеперечисленных методов, я должен был сделать это в auto_prepend_file
.
Я бы не рекомендовал использовать эту технику для решения этой конкретной проблемы, однако в этом случае ее лучше решить на уровне приложения.
Вы не можете изменить переменную среды DOCUMENT_ROOT
до PHP. (Если вы не играете с скриптом CGI-оболочки).
У Apache есть директива SetEnv
, но это не будет работать для DOCUMENT_ROOT
(специальное требование CGI env). Может дать это альтернативное имя, но DOC_ROOT2
и т. Д.
Но вы можете глобально переопределить эту переменную в PHP, используя параметр php.ini auto_prepend_file
, который также можно установить с помощью .htaccess:
php_value auto_prepend_file ./override_docroot.php
И этот скрипт затем «глобально» адаптирует вашу среду:
<?php $_SERVER["DOCUMENT_ROOT"] = "...";
Это настроено через веб-сервер, а не через PHP. Например, в Apache это директива DocumentRoot
.
Почему бы не использовать относительные пути вместо этого? Вы можете быть полностью независимы от того, где находится приложение, если вы используете пути, такие как ../Includes/Connect.php
.