验证一堆PHP文件的语法,语法是缓慢的验证的PHP文件更有效地
我们使用php -l file.php
验证的许多PHP文件的语法的持续集成设置的一部分。我们实际上做了这样的事情:`find。 -name“* .php”| xargs的--max-ARGS = 1 PHP -l”因为PHP可执行文件只需要一个参数。
这是窘况慢和主要是因为它涉及到发射了一个全新的分析器/解释器(更不用说处理),以每个PHP文件,以验证它的语法,我们有成千上万。
有一个更快的方法?
验证一堆PHP文件的语法,语法是缓慢的验证的PHP文件更有效地
我们使用php -l file.php
验证的许多PHP文件的语法的持续集成设置的一部分。我们实际上做了这样的事情:`find。 -name“* .php”| xargs的--max-ARGS = 1 PHP -l”因为PHP可执行文件只需要一个参数。
这是窘况慢和主要是因为它涉及到发射了一个全新的分析器/解释器(更不用说处理),以每个PHP文件,以验证它的语法,我们有成千上万。
有一个更快的方法?
什么搜索例如
`find . -mtime -7 -name "*.php" | xargs --max-args=1 php -l
添加时间find命令,只确认已修改在上周的文件吗?
我假设你的大部分代码库不会每隔几天更改一次?
更新
你可能也想尝试
`find . -newer /path/to/file -name "*.php" | xargs --max-args=1 php -l
找到比给定的,非常好用的一个较新的所有文件,特别是如果你的版本控制的变化有一定系统-newer标志文件每次结账或使用:
touch -t 201303121000 /path/to/file
创建一个虚拟文件,用于更新
这是一个很好的解决方案。 Git没有版本控制修改日期,所以运行'git checkout branch'会触及该分支中修改过的每个文件。这允许更小的时间范围,因此更少的文件被检查。 –
我已经放弃了对php -l
完全出于同样的原因,但在我的情况(和也许在你的身上)没关系。
因为我正在使用PHPUnit进行单元测试,所以我不需要对正在测试的文件进行lint操作。如果该文件不能通过linter,它也不会通过任何测试(甚至只包含该文件的测试)。
如果没有覆盖文件的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.
}
}
该代码是完全未经测试。另外,如果你有一个大项目,你可能需要玩内存限制的游戏和/或将“棉绒”分成块,以阻止它杀死你的CI系统。
你真的需要每次重新验证每个php文件吗?你是否为你的find添加一个'-mtime n',以便它只验证最近更新的东西? – Zoredache
我认为这更多的是[SO]的主题,但我的第一个想法是检查你是否可以使用像PHP-FPM这样的优点,如果你总是需要检查所有内容,问题依然存在。 – Sven
可能相关:http://stackoverflow.com/questions/3601031/is-there-a-good-robust-php-lint-or-code-quality-tool – GreenMatt