Top / PHP / URL文字列の操作

URL文字列の操作・配列関数の活用例

phpでWebサイトを表示させる際、自身のURLのパス文字列の操作が必要になることが多いので、以下によく使う方法をメモ。

よくある処理

  1. .htaccess でURLを処理を行うphpに飛ばすよう指定する。
  2. 自分のURLを取り出す。
  3. フォルダ情報などを抜き出して同一フォルダのファイル一覧をメニューに表示する用途などに活用する。

.htaccessへの指定サンプル

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L]

1行目、RewriteEngineをONにする。
2行目、もし実際にそのファイルがあったら、index.phpに飛ばさずそのまま表示してね。という指定。
3行目、もし実際にそのフォルダ(ディレクトリ)があったら、index.phpに飛ばさずそのまま表示してね。という指定。
4行目、なんでもかんでも(=^(.*)$の部分)、index.phpにパスを引数にして飛ばしてね。という指定。

これで、ブラウザからURLを入れたパス名が引数としてindex.phpに渡されることになります。

自分のURLを取り出すコード

// index.php 中
$url=$_SERVER["REQUEST_URI"];
$url_arr=parse_url($url);
$path=$url_arr['path'];

$_SERVER["REQUEST_URI"] :ブラウザに入力されたURLそのもの。ほかにも$_SERVER["PHP_SELF"]をよく使いますが、この場合はリダイレクトされたphpファイル index.phpになってしまうので使えません。
parse_url関数:URL(URI)の形をした文字列を構成要素に分解してくれるとても便利な関数。($url_arr['scheme']:httpやhttpsの種類、$url_arr['host']:ドメイン名、$url_arr['query']:?マーク以降(パラメータ部分)、$url_arr['fragment']:#マーク以降、ページ内のアンカータグ情報、いずれもよく使うので覚えておくと便利です。)

フォルダ情報の取り出し

// 引き続き、index.php中
if(!strpos('/',$path)){
    $catetop='';
}else{
   $temp_arr=split('/',$path);
   $temp_arr2 = array_slice($temp_arr,0,count($temp_arr)-1);
   $catetop = implode('/',$temp_arr2);
}

split関数で配列に入れて、array_slice関数で末端の1個を削って、implode関数でまたパスの形に戻す。という流れです。
他にもやり方はいろいろあるでしょうけど、よく使うphpの配列操作関数でつくってみました。

なお、URLがディレクトリで終了していて末尾が/で終わっていない場合は、上記のソースコードでは意図した動きになりません。参考にされる方は、適宜修正を加えてください。^^;

2019-07-01 (月) 11:39:41
タグ: php URL文字列操作 parse_url関数 配列操作 implode関数 split関数 array_slice関数

閲覧回数 昨日:2pv TOTAL:5239pv