Я хотел бы найти базовый url моего приложения, поэтому я могу автоматически ссылаться на другие файлы в моем дереве приложений …
Так что заданный файл config.php в базе моего приложения, если файл в подкаталоге включает его, знает, что префикс url с.
application/config.php application/admin/something.php application/css/style.css
Поэтому, когда вы получаете доступ к http://www.example.com/application/admin/something.php
, я хочу, чтобы он мог знать, что файл css находится в $approot/css/style.css
. В этом случае $approot
является « /application
», но я хотел бы узнать, установлено ли приложение в другом месте.
Я не уверен, если это возможно, многие приложения (phpMyAdmin, Squirrelmail, я думаю) должны установить конфигурационную переменную для начала. Это было бы более удобно, если бы он просто знал.
Я использую следующее в структуре homebrew … Поместите это в файл в корневую папку вашего приложения и просто включите его.
define('ABSPATH', str_replace('\\', '/', dirname(__FILE__)) . '/'); $tempPath1 = explode('/', str_replace('\\', '/', dirname($_SERVER['SCRIPT_FILENAME']))); $tempPath2 = explode('/', substr(ABSPATH, 0, -1)); $tempPath3 = explode('/', str_replace('\\', '/', dirname($_SERVER['PHP_SELF']))); for ($i = count($tempPath2); $i < count($tempPath1); $i++) array_pop ($tempPath3); $urladdr = $_SERVER['HTTP_HOST'] . implode('/', $tempPath3); if ($urladdr{strlen($urladdr) - 1}== '/') define('URLADDR', 'http://' . $urladdr); else define('URLADDR', 'http://' . $urladdr . '/'); unset($tempPath1, $tempPath2, $tempPath3, $urladdr);
Вышеприведенный код определяет две константы. ABSPATH содержит абсолютный путь к корню приложения (локальная файловая система), в то время как URLADDR содержит полный URL-адрес приложения. Он работает в ситуациях mod_rewrite.
Вы можете найти базовый url с следующим кодом:
define('SITE_BASE_PATH','http://'.preg_replace('/[^a-zA-Z0-9]/i','',$_SERVER['HTTP_HOST']).'/'.str_replace('\\','/',substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT']))).'/');
Короткие и лучшие.
REQUEST_URI в сочетании с dirname () может сообщить вам ваш текущий каталог, относящийся к URL-адресу:
<?php echo dirname($_SERVER["REQUEST_URI"]); ?>
Итак, http://example.com/test/test.php печатает «/ test» или http://example.com/ prints «/», которые вы можете использовать для генерации ссылок, чтобы ссылаться на другие страницы относительно текущего пути.
РЕДАКТИРОВАТЬ : только что переосмыслил, что вы можете спрашивать о пути на диске, а не о пути URL. В этом случае вам нужна функция getcwd () PHP:
<?php echo getcwd(); ?>
Если вы не отследите это самостоятельно, я не верю, что это будет определение. Вернее, вы просите PHP отслеживать то, что вы произвольно определяете.
Долгий и короткий из них, если я правильно понимаю ваш вопрос, я не верю, что то, о чем вы просите, существует, по крайней мере, не как «основной» PHP; данная структура может предоставить «корневой» URL-адрес относительно структуры каталогов, которую он понимает.
Имеет ли это смысл?
Поместите это в свой config.php (который находится в корневом каталоге вашего приложения):
$approot = substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT']));
Я думаю, что так и будет.
URL-адрес приложения может быть найден
$protocol = (strstr('https',$_SERVER['SERVER_PROTOCOL']) === false)?'http':'https'; $url = $protocol.'://'.$_SERVER['SERVER_NAME'].dirname($_SERVER['REQUEST_URI']);
этот код вернет URL-адрес любого приложения, будь он онлайн или на автономном сервере.
Я не сделал надлежащую проверку для надлежащего '/'. Пожалуйста, измените его для косой черты.
этот файл должен быть помещен в корневой каталог.
пример: если URL приложения:
http://localhost/test/test/test.php
то этот код вернется
http://localhost/test/test
благодаря
Одним из решений было бы использовать относительные пути для всего, поэтому не имеет значения, где установлено приложение. Например, чтобы перейти к вашей таблице стилей, используйте это:
../css/style.css
Если вам нужен путь к файловой системе, вы можете использовать $_SERVER['DOCUMENT_ROOT']
Если вам просто нужен путь к файлу, который появляется в URL-адресе после домена, используйте $_SERVER['REQUEST_URI']
Я никогда не нашел способ сделать это так.
Я всегда устанавливаю конфигурационную переменную с контуром сервера на один уровень выше веб-корня. Тогда это:
Это работает как прелесть для меня, везде, где я развертываю, с правилами перезаписи или без них:
$ baseDir = 'http: //'.$_SERVER [' HTTP_HOST ']. (dirname ($ _SERVER [' SCRIPT_NAME '])! =' / '? dirname ($ _ SERVER ["SCRIPT_NAME"]).' / ': '/');
Это то, что я использовал в своем приложении, которое прекрасно работает, я также использую пользовательский порт, поэтому мне тоже пришлось это учитывать.
define('DOC_URL', ($_SERVER['HTTPS']=='on'?'https':'http').'://'.$_SERVER['SERVER_NAME'].(!in_array($_SERVER['SERVER_PORT'], array(80,443))?':'.$_SERVER['SERVER_PORT']:'')).dirname($_SERVER['REQUEST_URI']);
Затем я использую его, набрав следующее …
<img src="<?php echo DOC_URL; ?>/_img/logo.png" />