【これだけ】PHPでURLを取得する方法【現役エンジニアが解説】

PROGRAM

今回は、PHPでURLを取得する方法について、リクエストURLのパスと実際に動作するPHPファイルのパスに分け、簡単に解説していきます。

リクエストURLのパスの取得方法

クライアント側がWebサーバにアクセスする際に要求したURLのパスを取得する場合がほとんどと思われます。

この場合、スーパーグローバルな連想配列である$_SERVERの中にREQUEST_URIのキーで参照することで取得できます。

$_SERVER['REQUEST_URI']

上記のコードのように参照することで、リクエストURLのパスが取得できますが、この場合はホスト名の部分は取得されません。

実際に動作するPHPファイルのパスの取得方法

index.phpにアクセスを集約しているような場合には、実際に動作するPHPファイルのパスを取得したい場合もあると思います。

その場合には、リクエストURLのパスの場合同様に、$_SERVERの中を参照しますが、キーは変わり、SCRIPT_NAMEのキーで取得することになります。

$_SERVER['SCRIPT_NAME']

上記のコードで実際に動作するPHPファイルのパスを取得できますが、ホスト名は取得されないので、ホスト名を取得したい場合は、$_SERVERに対し、HTTP_X_FORWARDED_HOSTやHTTP_HOST、SERVER_NAME、SERVER_ADDRのキーで参照し、別途取得する必要があります。

index.phpにアクセスを集約している場合にパラメータを特定する方法

WordPressやフレームワーク等では、全てのアクセスをindex.phpに集約しているケースはよく見受けられます。

この場合、プログラムではURLの中にあるパラメータを取得する必要がありますが、これはSCRIPT_NAMEとREQUEST_URIを使って抽出できます。

// ディレクトリ部分を取得
$dir_path =  mb_substr($_SERVER['SCRIPT_NAME'],0,-(int)mb_strlen(basename($_SERVER['SCRIPT_NAME']),"UTF-8"),"UTF-8");
// パラメータ部分を取得
$param_path = mb_substr($_SERVER['REQUEST_URI'],(int)mb_strlen($dir_path,"UTF-8"),NULL,"UTF-8");

上記のコードのように、REQUEST_URIからSCRIPT_NAMEのディレクトリ部分を差し引くことで、パラメータとなるパスのみを取得することができます。