web-dev-qa-db-ja.com

コマンドラインからPHPコードを実行する方法

私はif(function_exists("my_func")) echo 'function exists';のような単一のphpステートメントを別々のphpファイルを使わずにコマンドラインで直接実行したいのです。

それはどのように可能ですか?

145
Steve

コマンドラインでPHPを実行する場合は、 phpsh、まともなPHPシェル をインストールすることをお勧めします=。それはもっと楽しいです。

とにかく、phpコマンドは、コマンドラインからコードを実行するためのtwoスイッチを提供します

-r <code>        Run PHP <code> without using script tags <?..?>
-R <code>        Run PHP <code> for every input line

Phpの-r switchを使用できます。

php -r 'echo function_exists("foo") ? "yes" : "no";'

上記のPHPコマンドはoutputnoおよびreturns0ご覧のとおり:

>>> php -r 'echo function_exists("foo") ? "yes" : "no";'
no
>>> echo $? # print the return value of the previous command
0

別の面白いスイッチはphp -aです。

-a               Run as interactive Shell

それはphpshと比較したラメの一種ですが、インストールしたくない場合は PHP向けの素晴らしいインタラクティブシェルタブ補完、履歴などを取得するためのfacebook 、次にuse -a such as

>>> php -a
Interactive Shell

php > echo function_exists("foo") ? "yes" : "no";
no
php > 

それが機能しない場合私の箱のようなあなたの箱*es*(testedUbuntuおよびArchで)、次におそらくPHPセットアップがファジーまたは壊れている。このコマンドを実行する場合:

php -i | grep 'API'

あなたshouldを参照:

Server API => Command Line Interface

しない場合、これは多分別のコマンドがCLI SAPIを提供することを意味します。 php-cliをお試しください。OSで利用可能なパッケージまたはコマンドの可能性があります。

行う場合phpコマンドがCLI(コマンドラインインターフェイス)SAPI(サーバーAPI)を使用していることを確認したら、php -h | grep codeを実行してどのクレイジースイッチを見つける-これは年間変更されていないので/バージョン/セットアップでコードを実行できます。

私のボックスで動作することを確認するための別の例:

>>> php -r 'echo function_exists("sg_load") ? "yes" : "no";' 
no
>>> php -r 'echo function_exists("print_r") ? "yes" : "no";' 
yes

また、拡張機能がCGIまたはApache SAPIではなくCLIにロードされる可能性があることに注意してください。複数のPHP SAPIが異なるphp.iniファイルを使用している可能性が高い、例: /etc/php/cli/php.ini vs /etc/php/cgi/php.ini vs /etc/php/Apache/php.ini Gentooボックスで。 php -i | grep iniで使用されているiniファイルを見つけます。

234
jpic

コマンドラインで:

php -i | grep sourceguardian

それがそこにあれば、それからあなたはいくつかのテキストを得るでしょう。そうでなければ、あなたはものを得ることはありません。

2
Matt Gibson

以下を使用できます。

 echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php

短いタグ "<?="も役立ちます:

 echo '<?= function_exists("foo") ? "yes" : "no";' | php
 echo '<?= 8+7+9 ;' | php

終了タグ「?>」はオプションですが、最後の「;」を忘れないでください!

0
fred727