【これだけ】PHPでURLを取得する方法【現役エンジニアが解説】
今回は、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のディレクトリ部分を差し引くことで、パラメータとなるパスのみを取得することができます。