2010年8月5日木曜日

PHP: mkdir の recursive と「表」などバックスラッシュ(0x5C)を含む文字

php の mkdir($pathname, $mode, $recursive) で $recursive=true とすると入れ子構造のディレクトリの作成が可能です。
しかしながら、ディレクトリ名が SJIS の場合は「表」などバックスラッシュ(0x5C)を含む日本語文字をディレクトリ名に使用するとうまく処理してくれません。
以下のように独自に入れ子構造を処理する関数を定義する必要があります。
class sample {
 function mkdir($pathname, $mode, $recursive) {
  if (!$recursive) {
   return mkdir($pathname, $mode);
  }

  if (!is_dir(dirname($pathname))) {
   if (!$this->mkdir(dirname($pathname), $mode, $recursive)) {
    return false;
   }
  }
  return mkdir($pathname, $mode);
 }
}
$recursive=true としない mkdir はバックスラッシュ(0x5C)を含む日本語文字も正しく扱いますので心配ないです。

0 件のコメント:

コメントを投稿