8

まず、コマンドラインで PHP を実行する方法がわかりません。Web でいくつかの記事を読んでいますが、どれも CLI (コマンド ライン インターフェイス) が必要だと言っています。

基本的に、PHPファイルがあり、次のようなものを呼び出したいです:

php -l somefile.php

しかし、ファイルではなくstringをチェックしたいのです! これはどのように行うことができますか?STDINSTDOUT、またはSTDERRを使用すると、これにまったく役立ちますか?

もしそうなら、どのように?誰かがここで例を提供できますか?

また、上記のコードをどこに配置すればよいですか? コマンドラインにアクセスできない (とは思わない) または、実行する PHP ファイル自体に配置するだけですか? その場合、コマンドライン内でこのコードを実行しますか?

私はこのPHPコマンドラインがどのように機能するかについて完全に無知です...誰かがこれを正確に明らかにするのを手伝ってもらえますか?

4

3 に答える 3

15

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 -
)
于 2013-08-14T22:07:45.440 に答える
5

(ファイル内ではなく) lint コードが必要な場合、唯一のオプションはラッパーを作成することです。

$HOME/bin が /usr/bin の前にあると仮定すると、ラッパーを $HOME/bin/php にインストールすることができます。これには、コマンドライン linting 用の別のオプションがあります。ラッパーは一時ファイルを作成し、そこにコードを置き、実行/usr/bin/php -l fileして一時ファイルを削除します。

HTH。

于 2012-08-28T04:32:06.887 に答える