ラボ > PHP:PATHやURL関連、ファイル関連

PHP URLやPATHからファイル名とファイル名抜きが欲しい(parse_url())

URLからファイル名だけ取得したい(PATHやURLのパース)

作成日:2018-02-09, 更新日:2019-11-25

基本

現状(2018/02/09時点)で、そんな便利な関数は無いと思われる。

つくってみる

下記のような感じで取得してみる。
1.対象のPATHをパースする(parse_url())
2.パースした結果に「path」が含まれていたらファイルに関する情報取得(pathinfo())
3.「2」の結果で、「filename」と「extension」があればファイル名が存在する→結合してファイル名
4.元のPATHからファイル名が最後に現れる位置を探す(strrpos())
5.「4」の結果で分割。

function parsePath($path) {
   $pathUrl = parse_url($path);
   $pathInfo = (isset($pathUrl['path']))? pathinfo($pathUrl['path']): array();
   
   $fileName = ''; // ファイル名
   if ( isset($pathInfo['filename']) && isset($pathInfo['extension']) ) {
      $fileName = $pathInfo['filename'] . '.' . $pathInfo['extension'];
   }
   
   //$withQuery = ''; // getパラメーターつきファイル名・・・保留中
   //if ( isset($pathUrl['query']) ) {
   //   $withQuery = $fileName . '?' . $pathUrl['query'];
   //}
   
   $pos = false;
   if ( $fileName != '' ) {
      $pos = strrpos( $path, $fileName );
   }
   
   if ( $pos===false ) {
      $resultUrl  = $path;
      $resultFile = '';
   }
   else {
      $resultUrl  = substr($path, 0, $pos);
      $resultFile = substr($path, $pos);
   }
   
   return array(
      $resultUrl,  // ファイル名の前
      $resultFile, // ファイル名(パラメータ付き)
      $fileName,   // ファイル名
   );
}

var_dump(parsePath($path));

※getパラメーターにファイル名が含まれていると・・・知らない。

関連項目

PHP ファイルの拡張子が欲しい