私が書いたこのスクリプトは、あなたが探しているものを実行するはずです。プロジェクト内のすべての PHP ファイルを検索します。次に、各ファイルの内容でそのファイル名を検索します。ファイル名が存在する場合、明らかに削除したくないので、配列から削除できます。その後、プロジェクトで「言及」されていないファイルの配列が残ります (配列にはファイル パスも含まれます)。
まず、スクリプトを設定しましょう。
$path = realpath('/path/to/your/files');
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
$php_files = array();
次に、各ファイル名を配列に追加してループし、後で検索できるようにします。
foreach ($objects as $name => $object)
{
// only add php files to the array
if($object->getExtension() !== 'php')
{
continue;
}
$php_files[$name] = $object->getBasename();
}
もう一度ループしますが、今度は各ファイルを検索します。
foreach ($objects as $name => $object)
{
$path_parts = pathinfo($name);
// again, only search php files to the array
if($path_parts['extension'] == 'php')
{
// get the contents of each php file
$file_contents = file_get_contents($name);
// check each file name for an include
foreach($php_files as $path => $filename)
{
// check if the file exist in this file contents
if(strpos($file_contents, $filename) !== false)
{
// remove it from array if it exists in a file
unset($php_files[$path]);
}
}
}
}
配列を印刷して、決して含まれないまま残っているファイルを確認します。
print_r($php_files);
これは、次の方法で配列を返します。
Array
(
[/path/to/file1.php] => file1.php
[/path/to/file2.php] => file2.php
[/path/to/file3.php] => file3.php
)