サーバー内の全てのファイルから、文字列検索
サイト内の全ての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";
}
?>
<?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
この記事をシェアする
関連記事
- ・外部メールサーバーからメール送信するPHPの関数(簡略版)
- ・TinyMCEにelFinderを搭載した環境で、ファイルを選択できるようにする方法
- ・秒速でPHPのフォームにreCAPTCHA v3を導入するサンプルコード
- ・htaccessのRewriteでGETパラメータを無理やり引き継ぐPHPコード
- ・RewriteRuleが効いているURLで、?以降の文字列を取得する方法
- ・ワードプレスでコメントを完全無効にする方法【コメントスパム対策】
- ・MacでPHP環境のローカルサーバーを立ち上げる方法
- ・画像ファイルをリサイズして、データで返す
リサイズした結果を、ファイルではなく変数に返す。 - ・PHPで、指定したディレクトリ以下のファイル一覧を再帰的に取得
- ・Googleストリートビューで建物内部が表示されないようにする
Google Maps API v3