4

私は 2000 以上の php ファイルを含むかなり大きな Eclipse プロジェクトを持っていますが、使用されていないファイルがたくさんあるのではないかと思います。

他のファイルに記載されていないすべての php ファイルのリストを生成したいと思います。言及したとは、次のようなことを意味します。

  • include('file.php')
  • require_once('file.php')
  • $linktoimportantpage = "file.php"

そのため、そのプロジェクト内の他のファイル名の文字列を含まないほぼすべてのファイル。

これを行う方法はありますか?

4

4 に答える 4

3

私が書いたこのスクリプトは、あなたが探しているものを実行するはずです。プロジェクト内のすべての 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
)
于 2013-09-16T05:46:47.957 に答える
1

Eclipse 内でそれができるかどうかはわかりません (現時点では、PHP プラグインはそれほど強力ではありません)。

いくつかのソース アナライザー ツールを試すことができます。たとえば、次の関連する Q&Aをご覧ください。

于 2013-09-10T13:24:03.550 に答える
0

プロジェクトで未使用の php ファイルのインポートを grep する短いスクリプトを作成しました。

使用法: /path/to/file.sh application/directory

スクリプトに実行権限があることを確認してください。例えば:chmod 777 /path/to/file.sh

#!/bin/bash

MYPATH=$1

find "$MYPATH" -name \*.php -exec basename {} \; > /tmp/patterns

for p in $(cat /tmp/patterns); do
    grep -R $p "$MYPATH" > /dev/null || echo $p;
done
于 2013-09-16T18:37:39.157 に答える