2012-08-28 6 views
8

まず、コマンドラインでPHPを実行する方法が混乱しています。私はウェブ上でいくつかの記事を読んできており、皆さんはCLI(Command Line Interface)が必要だと言います。PHP構文lintによるチェックと、ファイルではなく文字列での操作方法

基本的に、私は、PHPファイルを持っている、と私はこのような何かを呼びたい:

php -l somefile.php 

をしかし、私は文字列、ないファイルをチェックしたいですよ!これはどうすればできますか?使用することができますSTDINSTDOUT、またはSTDERRこれはまったく手伝ってください。

もしそうなら、どうですか?誰かがここに例を挙げることはできますか?

また、上記のコードはどこに配置しますか?私はコマンドラインにアクセスできない(私は思っていません)、またはPHPファイル自体の中に置くだけですか?その場合、コマンドライン内でこのコードを実行しますか?

私はこのPHPコマンドラインの仕組みが完全に間違っています...誰かがちょっと光を当てるのを助けてくれますか?

答えて

4

ファイル内ではないリントコードが必要な場合は、唯一のオプションはラッパーを記述することです。

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

HTH。

+0

サーバはPHPコマンドラインへのアクセスをブロックしていますか?もしそうなら、この方法を使うのは無意味です。私は、すべてのまたはほとんどのサーバーに対応する必要があるソフトウェアを構築しています... –

+0

これはあなたの助けに感謝します! +1、私は私の答えとしてこれを受け入れる前に、より多くの回答を待つだろう。 –

+0

@SolomonClosson私はあなたがホスティングプロバイダについて質問していると思います。 AFAIKのほとんどのプロバイダは、PHPやコアダンプのバグのためにApacheサーバー全体を停止させたくないため、PHPをCGIとして実行します。 Apache 2.xを実行している場合はそうです。彼らがApache 1.xを何らかの方法で実行している場合、自動的に保護されますが、PHPをApacheモジュールとして実行しているホスティングプロバイダは見ていません。さて、PHPはCGIとして利用できるので、バイナリが存在する可能性がありますので、実行するためのアクセス権があります。 – g13n

14

あなたは例の中に配管することにより、STDINからphp -lでコードを確認することができます。

$ 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 - 

ダッシュErrors parsing --No syntax errors detected in - STDINの略です。これは一般的にそのために使用されています。

もう1つの方法は、自分のコードを書きたい(またはコピー&ペーストする)コードを書くことです。 BTW

$ php -l -- 
<?php echo "1" 
^Z 

Parse error: syntax error, unexpected end of file, expecting ',' or ';' in - on line 2 

Errors parsing - 

:これは、--とリントスイッチを使用してコードを入力すると、それ自身のライン上にはCtrl + Dする(Linux)/ はCtrl + Z(ウィン)を入力し、それを終了することによって機能します、通常は実行するためのコードを提供することを意図している-rスイッチは、このケースでは動作しませんし、それがエラーを与える:

$ php -l -r "echo 1" 
Either execute direct code, process stdin or use a file. 

ほとんどの場合、それはコードを実行するためのものとするために、それのthatsされているので、何の毛羽立ちありません。また、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 - 
) 
+0

私のLinuxでは良いことですが、CTRL + Dはバックグラウンドになるので、CTRL + D(入力の終わり)です。 – Wrikken

+0

私はそれが端末に依存すると思います。 Windows XPでgit bashを使っています。それとも、おそらくWindowsのPHPのバイナリですか? – hakre

+0

ナー、それはシェルの違いだけです。 CTRL + ZはUnixのように== Windowsで処理する 'SIGTSTP'を送る== EOFを送る。 PHPのバイナリでは何もできません。 – Wrikken

1

私はphpstanをチェックアウトすることをお勧め。これはPHPで構築されたリンターであり、phpunitのように動作しますが、lintingのコードでは動作します。あなたは設定を書くことができ、lintingレベルを制御し、フォルダをインクルード/無視することができます。

また、適切な終了コードもあります。

https://github.com/phpstan/phpstan

ことができません使用して、私はthis script hereを使用し、それがうまく動作する場合。

関連する問題