4

ネスト/ネストされたフォルダーに関係なく、スクリプト内で使用できるように、ハードコーディングせずにサイトURL を取得し、構成ファイル内の定数に保存しようとしています。この構成ファイルは、Web サイトのメイン インストール ディレクトリ内のフォルダーに保存されます。

例:

www.mydomain.com に Web サイトをインストールする

www.mydomain.com/my_folder/configuration.php にある構成ファイル

configuration.php ファイルで定数を宣言して、インストールされたパスをハードコードしなくても常に動的に取得できるようにします。そうdefine("MY_SITE_URL", ???? )

????の代わりに何が必要ですか?上記のコードで、メインの Web サイトがネストされたフォルダー内にインストールされている場合でも機能するようにするにはどうすればよいですか?

例: すべてのページには、ファイルの先頭に同じ configuration.php が含まれます。

サイト 1 に Web サイトをインストールします。

Web サイトのルート ディレクトリ: www.mydomain.com/demos/site1/

構成の場所: www.mydomain.com/demos/site1/my_folder/configuration.php

サブフォルダー: www.mydomain.com/demos/site1/1/index.php

index.php で MY_SITE_URL をエコーすると、www.mydomain.com/demos/site1/ が返されます。

サブフォルダー: www.mydomain.com/demos/site1/1/2/index.php

構成の場所: www.mydomain.com/demos/site1/my_folder/configuration.php

index.php で MY_SITE_URL をエコーすると、www.mydomain.com/demos/site1/ が返されます。

サイト 2 に Web サイトをインストールします。

Web サイトのルート ディレクトリ: www.mydomain.com/demos/site2/

構成の場所: www.mydomain.com/demos/site2/my_folder/configuration.php

サブフォルダー: www.mydomain.com/demos/site2/1/index.php

index.php で MY_SITE_URL をエコーすると、www.mydomain.com/demos/site2/ が返されます。

サブフォルダー: www.mydomain.com/demos/site2/1/2/index.php

構成の場所: www.mydomain.com/demos/site2/my_folder/configuration.php

index.php で MY_SITE_URL をエコーすると、www.mydomain.com/demos/site2/ が返されます。

TLD は変更される可能性があることに注意してください。つまり、www.mydomain.tk、www.mydomai.org、www.mydomain.net、www.mydomain.co.ca などに Web サイトをインストールしても、コードが役に立たなくなることはありません。

私がこれまでに持っているもの:

スクリプトをまとめてみました。ほぼ到達しましたが、100% ではありません。ここにあります:

function domain_url()
{
    $pageURL = 'http';
    if(isset($_SERVER["HTTPS"]))
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") 
    {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    } 
    else 
    {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }

    //Remove any GET params from url
    $remmove_get = strtok($pageURL, '?');
    //Removes trailing slash only at the end of string. This slash is received only when accessing a page within sub folders.
    $pageURL = preg_replace('{/$}', '', $remmove_get);

    //Remove page name
    $pageURL = dirname($pageURL);

    return $pageURL;
}
define("MY_SITE_URL", domain_url().'/'); 

現在のコードの問題:

www.mydomain.com/demos/site1/ および www.mydomain.com/demos/site1/1/ でコードを実行すると、MY_SITE_URL が www.mydomain.com/demos/site1/ となります。これは正しいです。

しかし、www.mydomain.com/demos/site1/1/2/index.php でコードを実行すると、MY_SITE_URL をエコーすると www.mydomain.com/demos/site1/1/ が表示されますが、実際にはwww.mydomainが必要でした: .com/demos/site1/

これを解決するには?

4

3 に答える 3

0

常に2番目のディレクトリが必要な場合は、使用できます

$boom = explode("/", $_SERVER['REQUEST_URI']);
$domain_url = $_SERVER["SERVER_NAME"].'/'.$boom[1].'/'.$boom[2];
echo $domain_url;

サイトが 2 番目のディレクトリにない場合は、次を使用できます: (このコードはもう少し簡潔にする必要があります)。site1 をサイトの名前に置き換えるだけです

$site_search = "site1";
$url = $_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI'];
$domain_url = substr($url, 0, strpos($url, $site_search)+strlen($site_search));;
echo $domain_url;   

更新 これにより、/my_folder より前のすべての URL が取得されます

$domain_url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$domain_url = substr($url, 0, strpos($url, '/my_folder'));
define("MY_SITE_URL", domain_url().'/'); 

ちなみに、Code-Igniterフレームワークを試す必要があります。フレームワークは、この種のことを非常に簡単にします。

于 2012-08-03T23:46:34.050 に答える
0

これを試して:

define('PROTOCOL', array_key_exists('HTTPS', $_SERVER) && $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://');
define('DOMAIN', $_SERVER['HTTP_HOST']);
define('FOLDER', (dirname($_SERVER['SCRIPT_NAME']) == '/' ? null : dirname($_SERVER['SCRIPT_NAME'])) . '/');
define('BASE_URL', PROTOCOL . DOMAIN . dirname(FOLDER));

これらの 4 つの定数は、探しているものをカバーする必要があります。この投稿でこれについてもう少し書きました-http://bit.ly/MPls0E

于 2012-08-03T23:51:03.777 に答える