6

一連のPHPファイルの構文の検証は遅いです

php -l file.php継続的インテグレーションのセットアップの一環として、多くのphpファイルの構文を検証するために使用します。私たちは実際に次のようなことをします:`find。-名前"*.php" | xargs --max-args = 1 php -l "は、php実行可能ファイルが引数を1つだけ取るためです。

これは非常に遅く、主に、構文を検証するためにPHPファイルごとに新しいパーサー/インタープリター(プロセスは言うまでもなく)を起動する必要があり、数千もあります。

より速い方法はありますか?

4

2 に答える 2

2

たとえば、検索に時間を追加するのはどうですか

`find . -mtime -7 -name "*.php" | xargs --max-args=1 php -l

先週変更されたファイルのみを検証するための find コマンドに?

コードベースのほとんどは数日ごとに変更されていないと思いますか?

更新しました

-newer フラグを試してみることもできます

`find . -newer /path/to/file -name "*.php" | xargs --max-args=1 php -l

指定されたものよりも新しいすべてのファイルを見つけるので、非常に便利です。特に、チェックアウトするたびにバージョン管理が特定のシステムファイルを変更する場合は、代わりに次を使用します。

touch -t 201303121000 /path/to/file 

-newer で使用するダミー ファイルを作成する

于 2013-01-07T14:09:58.183 に答える
1

php -l私の場合(そしておそらくあなたの場合)は問題ではありませんが、私はまったく同じ理由で諦めました。

単体テストにPHPUnitを使用しているので、テスト対象のファイルをリントする必要はありません。ファイルがリンターに合格しない場合は、テストにも合格しません(ファイルが含まれているだけのテストでも)。

ファイルの100%をPHPUnitでカバーしていない場合は、次のようなものでリンターの効果を偽造できる可能性があります。

class FakeLinterTest extends PHPUnit_Framework_TestCase {
    public function testLintAllTheFiles() {
        foreach ($this->listAllPHPFiles() as $file) {
            include_once($file);
        }
    }

    private function listAllPHPFiles() {
        // Traverse your entire source tree.
    }
}

そのコードは完全にテストされていません。また、大きなプロジェクトがある場合は、メモリ制限のあるゲームをプレイしたり、「lint」をチャンクに分割してCIシステムを破壊しないようにする必要がある場合があります。

于 2013-01-07T09:52:05.643 に答える