私は非常に大規模なPHPコードベース(主に手続き型)に取り組んでいます。これは、過去10年間、私の前に来た開発者によってまとめられており、現在、データベースの負荷が高くなっています。一部のファイルを覗くと、40〜60以上のMySQLクエリが実行されていることがわかります。この大きな不快なファイルで何に使用されているかを追跡するために時間を費やすと、クエリが実行され、結果が使用されなかったことがよくわかります。コードベースの問題領域を特定できれば、リファクタリングを開始できると思います。
さまざまな監査ツールに関するStackOverflowの投稿をたくさん見てきました。
- https://stackoverflow.com/questions/4273244/auditing-a-php-codebase?lq=1
- PHPファイル用の静的コードアナライザー(Lintなど)はありますか?
ただし、スクリプト内のクエリの使用状況を分析するものはまだ見つかりません。たとえば、ファイルに含まれるSELECT、INSERT、およびUPDATEクエリの数。そしてもっと興味深いことに、それらのうちのいくつがループ構造の中に含まれていますか?基本的な問題のいくつかを特定するために、ダーティな再帰ファイル検索をすばやく作成しました。
$it = new RecursiveDirectoryIterator($path);
foreach(new RecursiveIteratorIterator($it) as $file)
{
if(stristr($file, "/.") == false && stristr($file, "/..") == false)
{
$contents = file_get_contents($file);
// Regular MySQL queries...indicative of SQL injection points
$mysql_count = substr_count($contents, "mysql_query(");
$select_count = substr_count($contents, 'SELECT ');
$insert_count = substr_count($contents, 'INSERT INTO');
$update_count = substr_count($contents, 'UPDATE ');
if($mysql_count > 0 || $select_count > 0 || $insert_count > 0 || $update_count > 0)
{
$out[] = array('file' => $file,
'mysql_count' => $mysql_count,
'select_count' => $select_count,
'insert_count' => $insert_count,
'update_count' => $update_count
);
}
$contents = null;
}
}
var_dump($out);
ただし、ループ内には何も見つかりません。また、クエリを分析して、JOINSの高いしきい値が含まれているかどうかを確認することもできます。私はこのようなツールを書くことができますが、それがすでに存在するのになぜ車輪を再発明するのですか?
問題のある/高ストレス/非効率的なクエリを潜在的に持つ可能性のあるPHPファイルを識別するためのツールはありますか?
私の目標は、レガシー手続き型コードのリファクタリングが最も有益となるポイントを特定することです。