PHP

PHPでURLに特定のディレクトリや文字列があるか判別

最終更新日:

例えばカレント表示など、特定のディレクトリの画面においてのみHTMLやCSSを変える、ということがしたい場合があります。そういうときに便利なURLで判別する方法をご紹介します。

コード

ディレクトリで判別する場合

まずURLを取得し、strposで、URLに特定の文字がある場合を判別しています。特定の文字を/ディレクトリ名/とスラッシュで前後を挟めば、特定のディレクトリ、またはそれ以下の階層の場合のみ動く処理を書くことができます。

特定の文字列があるか判別する方法は他にもstrstrpreg_matchなどがありますが、strposが最も早く、PHPの公式文書において推奨されています。

  1. <?php
  2. $path = $_SERVER['REQUEST_URI']
  3. if( strpos( $path, '/ディレクトリ名/' ) !== false ):
  4. //処理
  5. endif;
  6. ?>

ドメイン名(ホスト名)で判別する場合

利用するケースは特殊かとは思いますが、ドメイン名(ホスト名)で判別する場合は次のようにします。

  1. <?php
  2. $domain = $_SERVER['HTTP_HOST']
  3. if( strpos( $domain, 'xxx' ) !== false ):
  4. //処理
  5. endif;
  6. ?>

$_SERVER[‘REQUEST_URI’]と$_SERVER[‘HTTP_HOST’]の違い

$_SERVER['REQUEST_URI']$_SERVER['HTTP_HOST']の違いは以下の通りです。

$_SERVER[‘REQUEST_URI’]
https://www.example.com/sample/のうちのwww.example.comを取得
$_SERVER[‘REQUEST_URI’]
https://www.example.com/sample/のうちの/sample/を取得

注意点

ディレクトリで判別する場合、スラッシュで前後を挟むことで、うっかり他の画面でも書いた処理が動いてしまうということはないはずですが、同じ名称のディレクトリを他にも作ってしまうと、当然そのディレクトリでは動いてしまうので、その点は留意が必要です。

まとめ

たまに使うコードなので、私のコピペ用でした。