php -l
コードをパイプインすることで、STDIN からコードをチェックできます。例:
$ echo "<?php echo 'hello world'" | php -l
Parse error: syntax error, unexpected end of file, expecting ',' or ';' in - on line 2
Errors parsing -
;
ここでは、一重引用符で囲まれた文字列の後に最後のセミコロンがありません。追加すると、エラーはなくなり、PHP は次のように通知します。
$ echo "<?php echo 'hello world';" | php -l
No syntax errors detected in -
またはのダッシュ-
は STDIN を表します。そのためによく使われます。Errors parsing -
No syntax errors detected in -
もう 1 つの方法は、lint するコードを自分で作成する (またはコピーして貼り付ける) ことです。これは、lint スイッチを とともに使用し--
、コードを入力して、Ctrl + D(Linux) / Ctrl + Z(Win) を 1 行に入力して終了することで機能します。
$ php -l --
<?php echo "1"
^Z
Parse error: syntax error, unexpected end of file, expecting ',' or ';' in - on line 2
Errors parsing -
ところで、-r
通常は実行用のコードを提供することを目的としたスイッチは、この場合は機能せず、エラーが発生します。
$ php -l -r "echo 1"
Either execute direct code, process stdin or use a file.
ほとんどの場合、コードを実行することを目的としており、リンティングはありません。また、PHP の開始タグがありません。
これらすべてのオプションから、最初のオプションは、パイプを使用する場合におそらく最も理にかなっています (proc_open
さらに制御が必要な場合は、で操作することもできます)。PHP を使用した簡単な例を次に示しますexec
。
<?php
/**
* PHP Syntax Checking with lint and how to do this on a string, NOT a FILE
*
* @link http://stackoverflow.com/q/12152765/367456
* @author hakre
*/
$code = "<?php echo 'hello world'";
$result = exec(sprintf('echo %s | php -l', escapeshellarg($code)), $output, $exit);
printf("Parsing the code resulted in; %s\n", $result);
echo "The whole output is:\n";
print_r($output);
出力は次のとおりです。
Parsing the code resulted in; Errors parsing -
The whole output is:
Array
(
[0] =>
[1] => Parse error: syntax error, unexpected '"', expecting ',' or ';' in - on line 1
[2] => Errors parsing -
)