for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Funivan\Cs\Tools\Php\FileStartLine;
use Funivan\Cs\FileTool\FileTool;
use Funivan\Cs\Fs\File;
use Funivan\Cs\Fs\FileFilter;
use Funivan\Cs\Report\Report;
/**
* @author Ivan Shcherbak <[email protected]> 2016
*/
class FileStartLineReview implements FileTool {
const NAME = 'php_file_start_line_review';
* @var array
private static $regexp = [
'~^<\?php(\s+|$)~',
'~^<\?(\s+|$)~',
'~#!/usr/bin/env php(\s+|$)~',
];
* @inheritdoc
public function getName() {
return self::NAME;
}
public function getDescription() {
return 'Check php files first line';
public function canProcess(File $file) {
return (new FileFilter())->notDeleted()->extension(['php'])->isValid($file);
public function process(File $file, Report $report) {
$fileContent = $file->getContent()->get();
foreach (self::$regexp as $regexp) {
if (preg_match($regexp, $fileContent) === 1) {
return;
$message = 'File must begin with `<?php` or `<?` or `#!/usr/bin/env php`';
$report->addMessage($file, $this, $message, 1);