127 lines
2.4 KiB
PHP
127 lines
2.4 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Syntaxpruefung
|
||
|
*/
|
||
|
class syntax_checker {
|
||
|
private $register;
|
||
|
private $count = 0;
|
||
|
private $error = array();
|
||
|
|
||
|
public function __construct() {
|
||
|
$this->register = array();
|
||
|
$this->path = ( defined('ABSPATH') )?
|
||
|
ABSPATH:
|
||
|
realpath( dirname(__FILE__) . '/../' );
|
||
|
|
||
|
echo 'Syntax-Check aller PHP-Dateien'.PHP_EOL;
|
||
|
}
|
||
|
|
||
|
public function find_files($patterns) {
|
||
|
foreach( $patterns as $pattern ) {
|
||
|
$files = glob($this->path . $pattern);
|
||
|
foreach( $files as $file ) {
|
||
|
$this->register_file($file);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private function register_file($file) {
|
||
|
$fi = pathinfo($file);
|
||
|
$file = $fi['dirname'] . '/' . $fi['basename'];
|
||
|
|
||
|
if ( strpos($fi['dirname'], 'library') !== FALSE ) {
|
||
|
$new_file = FALSE;
|
||
|
} elseif ( in_array($file, $this->register) ) {
|
||
|
$new_file = FALSE;
|
||
|
} else {
|
||
|
$new_file = TRUE;
|
||
|
}
|
||
|
|
||
|
if ( $new_file ) {
|
||
|
$this->register[] = $file;
|
||
|
}
|
||
|
|
||
|
return $new_file;
|
||
|
}
|
||
|
|
||
|
public function check_syntax() {
|
||
|
foreach($this->register as $file) {
|
||
|
$output = array();
|
||
|
exec(
|
||
|
'php -l -f "'.$file.'" 2>/dev/null ',
|
||
|
$output,
|
||
|
$return
|
||
|
);
|
||
|
array_pop($output);
|
||
|
|
||
|
|
||
|
if ( $return > 0 ) {
|
||
|
echo 'E';
|
||
|
$this->add_error($output);
|
||
|
} else {
|
||
|
echo '.';
|
||
|
}
|
||
|
$this->count++;
|
||
|
if ( ($this->count % 40) === 0 ) {
|
||
|
echo PHP_EOL;
|
||
|
}
|
||
|
}
|
||
|
echo PHP_EOL;
|
||
|
return $this->count;
|
||
|
}
|
||
|
|
||
|
private function add_error($output) {
|
||
|
foreach ( $output as $line ) {
|
||
|
$line = trim($line);
|
||
|
if ( empty($line) ) continue;
|
||
|
|
||
|
$this->error[] = $line;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function show_errors() {
|
||
|
if ( count($this->error) > 0 ) {
|
||
|
echo implode(PHP_EOL, $this->error) . PHP_EOL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function show_stats() {
|
||
|
echo $this->count . ' Dateien wurden ueberprueft.'. PHP_EOL;
|
||
|
echo count($this->error) . ' Fehler gefunden'.PHP_EOL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Erzeugung
|
||
|
*/
|
||
|
$linter = new syntax_checker();
|
||
|
|
||
|
/**
|
||
|
* Suchmuster fuer Dateien
|
||
|
*/
|
||
|
$patterns = array();
|
||
|
$patterns[] = '/*.php';
|
||
|
$patterns[] = '/*/*.php';
|
||
|
$patterns[] = '/*/*/*.php';
|
||
|
$patterns[] = '/*/*/*/*.php';
|
||
|
$patterns[] = '/*/*/*/*/*.php';
|
||
|
$patterns[] = '/*/*/*/*/*/*.php';
|
||
|
$patterns[] = '/*/*/*/*/*/*/*.php';
|
||
|
$patterns[] = '/*/*/*/*/*/*/*/*.php';
|
||
|
|
||
|
$linter->find_files($patterns);
|
||
|
|
||
|
/**
|
||
|
* Durchfuehrung der Syntaxpruefung
|
||
|
*/
|
||
|
$linter->check_syntax();
|
||
|
|
||
|
/**
|
||
|
* Ausgabe von Meldungen
|
||
|
*/
|
||
|
echo PHP_EOL;
|
||
|
$linter->show_errors();
|
||
|
echo PHP_EOL;
|
||
|
$linter->show_stats();
|
||
|
?>
|