Я настраиваю среду тестирования для проекта клиента для приложения, которое уже было запрограммировано кем-то другим. Я создал подкаталог под названием 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 .