Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> PHP&MySQL -> サーバー内の全てのファイルから、文字列検索

サーバー内の全てのファイルから、文字列検索

サイト内の全てのURLをhttp://からhttps://に変換する作業とかで、サーバーの全てのファイルから、指定した文字列が含まれるファイルのみを出力する処理を作成したら、作業が楽だろう、という事で、作成しましたw

<?php
// 指定したディレクトリ以下の全てのファイル一覧を再帰的に返す関数
// $ngdirには、スキャンを除外するディレクトリ名を入れる。
// $extensionsがある場合は、拡張子が含まれている場合のみ返す(拡張子は小文字で入力)。
// $find_stringsがある場合は、その文字が含まれているばいのみ返す。
function scandir_r(
$dir,
$ngdir = array(),
$extensions = array(),
$find_strings = array()
){
$list = scandir($dir);
$results = array();
foreach($list as $record){
if(in_array($record, array(".", ".."))){
continue;
}
$path = rtrim($dir, "/")."/".$record;
if(is_file($path)){
$flag = 1;
if($extensions && strpos_inarray(strtolower($path), $extensions) === FALSE){
$flag = 0;
}
if($flag && $find_strings && strpos_inarray(file_get_contents($path), $find_strings) === FALSE){
$flag = 0;
}
if($flag){
$results[] = $path;
}
}
else{
if(is_dir($path)){
if(in_array(basename($path), $ngdir)){
continue;
}
$results = array_merge($results, scandir_r($path, $ngdir, $extensions, $find_strings));
}
}
}
return $results;
}

// $haystackの中に、$needlesが含まれているかどうかを返す関数。
// strposの配列バージョン。ただし、戻り値はfalseかtrueのみ。
function strpos_inarray($haystack, $needles){
if(is_array($needles)){
$flag = FALSE;
foreach($needles as $needle){
if(strpos($haystack, $needle) !== FALSE){
$flag = TRUE;
break;
}
}
return $flag;
}else{
return strpos($haystack, $needles);
}
}

// ディレクトリ一覧を取得
$tmp = scandir_r("./", // ここで指定したディレクトリ以下を再帰的に検索
array("cache", "images"), // 読み込まないディレクトリ名
array(".txt", ".htm", ".html", ".shtml", ".php", ".xml", ".inc", ".js"), // 検索対象のファイルの拡張子
array("http://"), // ここが検索したい文字列
);

// 出力
foreach($tmp as $path){
echo $path."\n";
}
?>


最初に記事を書いた日:2017/09/07

この記事をシェアする

このエントリーをはてなブックマークに追加

関連記事

Meteoric Streamについて

管理人

Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> PHP&MySQL -> サーバー内の全てのファイルから、文字列検索