0

私が欲しいのは、特定のサイトのホストとサブフォルダーを取得できるようにすることです。例: から取得http://example:81/test/http://example:81/test/pagename.phpます。

また、同じ URLhttp://example:81/test/や、http://example:81/test/test2/somepage.php.

http://example:81/test/images/page.phpstill should behttp://example:81/test/や notなど、フォルダー自体内のファイルの構造を取得するべきではありませんhttp://example:81/test/images/

使ってみた

$_SERVER['HTTP_HOST'] // only provides example:81
$_SERVER['REQUEST_URI'] // provides full path example:81/test/images/

基本的に、サブフォルダーにある場合でも、index.phpファイルのURLを取得したいです。

これを達成する方法はありますか?

4

2 に答える 2

3

完全な URL を取得するには、おそらく独自の文字列を作成する必要があります。

<?php
$url = 'http'.(isset($_SERVER['HTTPS'])?'s':'').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

その詳細が必要な場合は、 parse_url() を使用できます

<?php
$details = parse_url($url);
print_r($details);

次のような出力が得られます。

Array
(
    [scheme] => http
    [host] => example.com
    [port] => 81
    [path] => /test/test2/
    [query] => somepage.php
)

編集:

ファイルへのパスが必要な場合は、 を使用$_SERVER['PHP_SCRIPT']して、呼び出されたスクリプトのファイル名をドキュメント ルートに相対的に$_SERVER['SCRIPT_FILENAME']取得するか、ドキュメント ルートを含むサーバー パスを取得できます。組み込みの定数もあり__DIR____FILE__含まれている場合でも、現在のスクリプトまでのサーバー パスがあります。これらはすべて、dirname() で変数のディレクトリを取得するために使用でき、basename() でファイル名だけを取得するために使用できます。$_SERVER['DOCUMENT_ROOT']Web ルートまでのパスを持つものもあります。

したがって、このスクリプトが存在するのと同じディレクトリの下のパスを取得するには、スクリプト/var/www/test/index.phpが呼び出された場合にdirname(__FILE__).'/some/sub/dir/'.

print_r を実行するだけで、すべてのサーバー変数を表示できます。または、定義済みのすべての php モジュールと変数の適切な出力を取得するために$_SERVER呼び出すことができます。phpinfo()

于 2013-05-01T22:31:04.930 に答える
0

私のプロジェクトでも同様の問題がありました。subfolderスクリプトファイル名(index.phpなど)を介して取得できるようにしたかったのですが、いくつかの方法を試しましたが、次の(醜い)方法が機能しました。秘訣は、すべての .php ファイルが存在できる可能性のあるすべての「場所」をメソッドに「フィード」することです。

script nameこれらの場所の 1 つに が見つかった場合、それらの場所のLEFTsubtractの部分。この部分は(ある場合) である必要があります。subfolder

はい、醜いですが、私にとってはうまくいきました...

$string = $_SERVER["SCRIPT_NAME"];
$subfolder = NULL;
// tries to find the 'subfolder' by checking all possible PHP calls
$places = array("/","plugins/","system/php");
foreach($places as $key=>$val) {
   $pos = strpos($string,$val);
   if ($pos !== FALSE && !isset($subfolder)) {
     $subfolder = substr($string,0,$pos-1);
     break;
   }
} 
于 2013-05-01T22:55:36.253 に答える