Поиск каталога установки приложения PHP

PHP $_SERVER['...'] переменные, такие как для 'PHP_SELF', 'SCRIPT_NAME', 'REQUEST_URI' меня немного смущает. Я видел (по крайней мере, некоторые) предыдущие вопросы по этому поводу и могу провести некоторое тестирование в некоторых средах, но я столкнулся со средами, в которых происходят неожиданные вещи.

Я пишу приложения, которые должны быть установлены в любом подкаталоге ниже корня документа. Например, предположим, что корень документа /var/www/html и что приложение установлено в /var/www/html/sub/dir , Мне необходимо require() файлы в /var/www/html/sub/dir (или подкаталоги к этому) и ссылки на файлы в www.example.com://sub/dir , Позвоните ‘/ sub / dir’ SUB_DIR. Я также хочу переписать правила для дружественных URL, таких как www.example.com/sub/dir/route/key1/val1/key2/val2 ,

у меня есть .htaccess для Apache и web.config для IIS, чтобы сделать мои переписывает, чтобы отправить все через /var/www/html/sub/dir/index.php, Я не сталкивался с необходимостью выяснить, nginx или другие.

Я делал что-то вроде следующего, но с большим вниманием относился к одним проблемам и к разделителям каталогов Windows v. Real world.

$docRoot = $_SERVER['DOCUMENT_ROOT'];
$reqUrl = $_SERVER['REQUEST_URI'];
$pwd = __DIR__;  /* Occuring in www.example.com/sub/dir/index.php) */
/* Expected example value for $pwd: /var/www/html/sub/dir */
$appLinkDir = substr($pwd, strlen(docRoot));
/* Expected example value for $appLinkDir: /sub/dir */
$workingRequest = substr($_SERVER['REQUEST_URI'], strlen(appLinkDir));
/* Expected example value for $workingRequest: /route/key1/val1/key2/val2 */

Я столкнулся со средой, где $ pwd — это / var / www / html вместо / var / www / html / sub / dir. Я предполагаю, что приложение было установлено в / var / www / html (не / var / www / html / sub / dir), но они делали глобальные изменения в /sub/dir/index.php (или что-то еще). В любом случае, неожиданное значение $ pwd дало мне неожиданные значения для $ appLinkDir и $ workingRequest.

Проблемная среда была получена от стороннего рецензента кода, который предположил, что мое приложение должно быть установлено в /var/www/html/sub/dir когда он на самом деле ожидал узнать, где он был установлен.

Любые хорошие (или даже плохие) идеи о том, как я могу получить правильные значения для $appLinkDir а также $workingRequest ?

0

Решение

__DIR__ дает вам путь к каталогу, в котором файл php находится на диске.

Он не изменится, если вы не переместите php-файл на диск.

Так что, если файл находится под /var/html/sub/another/dir/index.php __DIR__ было бы /var/html/sub/another/dir/,

Всегда используйте __DIR__ для включения других ресурсов PHP.

Теперь для части перезаписи URL:

Я столкнулся с подобной проблемой, и я просто передал весь URI запроса в мой php-скрипт и провел там разбор.

Например:

<?php
echo $_SERVER['REQUEST_URI'];

С переписать (для lighttpd в качестве ссылки):

url.rewrite-once = (
# I don't want to route PNG, CSS files with PHP..
"^/_assets/(.*)$" => "/_assets/$1",
"/(.*)$" => "index.php?$1")

Если вы получаете доступ /test/blub/blab/ PHP-скрипт вызывается и печатает полный URI:

/test/blub/blab/
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]