マルチバイト対応版pathinfo
ないらしい。バイトで使いたかったから書いた。とりあえずunix系のみ対応。
/** * マルチバイト文字列対応pathinfo */ function mb_pathinfo() { $info = array( 'dirname' => '', 'filename' => '', 'basename' => '', 'extension' => '', ); $num = func_num_args(); if ($num == 0) { return $info; } $args = func_get_args(); // path $path = array_shift($args); // dir and base while(1) { $lastSlashPos = mb_strrpos($path, "/"); if ($lastSlashPos === FALSE) { $info['basename'] = $path; break; } else if ($lastSlashPos == 0){ $info['dirname'] = mb_substr($path, 0, 1); $info['basename'] = mb_substr($path,1); break; } else if ($lastSlashPos == (mb_strlen($path) - 1)){ $path = mb_substr($path,0, $lastSlashPos); } else { $info['dirname'] = mb_substr($path, 0, $lastSlashPos); $info['basename'] = mb_substr($path,$lastSlashPos + 1); break; } } // file and extension $lastDotPos = mb_strrpos($info['basename'], "."); if ($lastDotPos === FALSE) { $info['filename'] = $info['basename']; } else { $info['filename'] = mb_substr($info['basename'],0, $lastDotPos); $info['extension'] = mb_substr($info['basename'], $lastDotPos + 1); } // default if ($num == 1) { return $info; } // output $result = array(); foreach($args as $value) { switch($value) { case PATHINFO_DIRNAME: $result['dirname'] = $info['dirname']; break; case PATHINFO_BASENAME: $result['basename'] = $info['basename']; break; case PATHINFO_EXTENSION: $result['extension'] = $info['extension']; break; case PATHINFO_FILENAME: $result['filename'] = $info['filename']; break; } } if (count($result) == 1) { return array_shift($result); } else { return $result; } }