Настоящий URI файла PHP? - PullRequest
       1

Настоящий URI файла PHP?

2 голосов
/ 20 сентября 2011

Есть ли способ получить текущий URI файла в PHP независимо от того, в какой файл он включен?

, например:

a.php включено в b.php

Но я хочу получить URI каталога, в котором находится a.php.

Ответы [ 4 ]

3 голосов
/ 20 сентября 2011

Для файла не существует «реального» URL-адреса, поскольку это подразумевает соотношение 1: 1 между URL-адресами и файлами. Виртуальные каталоги позволяют файлу иметь много разных имен.

Однако, если вы просто хотите указать путь к файловой системе a.php, попробуйте __DIR__.

1 голос
/ 20 сентября 2011

Текущий URI обычно может состоять из $_SERVER['HTTPS'], $_SERVER.['HTTP_HOST'] и $_SERVER['REQUEST_URI'] (кроме хеш-идентификатора #foo, который даже не отправляется на сервер).

Вы можете найтидальнейшая ссылка здесь , но обычно проще print_r () $_SERVER массив.

Уточнение: файл может иметь один URL,много или ни одного вообще.


Редактировать: Если у нас есть этот макет файла:

  • /home/foo/htdocs/foo.php

    <?php
    include('./lib/utils.php');
    blah();
    
  • /home/foo/htdocs/lib/utils.php

    <?php
    function blah(){
    }
    

... где /home/foo/htdocs - корневой каталог документа, способ получения URL-адреса каталогагде utils.php лежит, чтобы прочитать __FILE__ из utils.php и заменить ведущий $_SERVER['DOCUMENT_ROOT'] протоколом и путем к сайту.Например:

<?php

if( isset($_SERVER['DOCUMENT_ROOT']) ){
    $directory = realpath(dirname(__FILE__));
    $document_root = realpath($_SERVER['DOCUMENT_ROOT']);
    $base_url = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on' ? 'https' : 'http' ) . '://' .
        $_SERVER['HTTP_HOST'];

    if( strpos($directory, $document_root)===0 ){
        echo $base_url . str_replace(DIRECTORY_SEPARATOR, '/', substr($directory, strlen($document_root)));
    }
}

Этот код может нуждаться в некоторой настройке (не все веб-серверы создают одинаковые переменные), и, конечно, нет никакой гарантии, что URL-адрес каталога будет доступным или полезным.

1 голос
/ 20 сентября 2011

Вы можете использовать realpath(__FILE__), чтобы получить каталог в файловой системе.Вы должны быть в состоянии перевести это в URI.

realpath ()

0 голосов
/ 20 сентября 2011

Используя ответ Йохана в разделе комментариев, мы имеем:
Этот ответ сильно зависит от вашей структуры каталогов, убедитесь, что вы взорвались последней папкой, которая ведет к вашему корню www! Это может быть либо htdocs, либо public_html, в зависимости от вашего хоста.

$my_domain = $_SERVER['HTTP_HOST'];
$this_uri_dir = explode('public_html', dirname(__FILE__)); //this assumes you don't have multiple folders named 'public_html'
echo 'http://'.$my_domain.$this_uri_dir[1].'/';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...