カテゴリー
ツール

PHP で書くバッチのひな形

<?php
$files = list_files(dirname(__FILE__), array());

foreach($files as $file){
  if(preg_match("/\.html$/i", $file)){
    // 処理
  }
}

// ディレクトリ内のファイルを再帰的に取得する
function list_files($dir, $contents){
  foreach(scandir($dir) as $value){
    if($value == "." || $value == "..") {
      continue;
    }
    $fullPath = $dir."\\".$value;
    if(is_file($fullPath)) {
      array_push($contents, $fullPath);
    } elseif (is_dir($fullPath)) {
      $contents = list_files($fullPath, $contents);
    }
  }
  return $contents;
}
?>

dirname(__FILE__)

__FILE__ は php ファイルの場所が格納されている定数です。__FILE__ は ファイル名も含まれているため、dirname を使用してディレクトリ部分のみ取得します。

scandir($dir)

scandir は引数で指定したフォルダの中身を配列で返します。サブディレクトリ内を再帰的に取得することはできないので、自前でその処理を書いたものが list_files 関数になります。

PHP で日本語ファイル名を扱う場合は、PHP 7.1 以上である必要があります。

PHP7.1で日本語ファイル名問題(5c問題)が解決へ

Windows版 PHP 7.1 で日本語パス(パス文字列のエンコーディング)が対応されることによる影響