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


163

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

どのように可能ですか?


1
ユーザー定義関数を含む他のファイルを使用せずにfunction_exists()を実行することは、他の方法で確認できるPHPバージョンのテストを除いて、あまり効果的ではありません。テストする機能は何ですか?
Matt Gibson

この関数のテストを探しています:sg_load()
Steve

2
Sourceguardianのphp拡張機能が有効になっているかどうかを確認することは、本当に必要なことのように思えますか?
マットギブソン

2
phpinfo()が教えてくれます。
jpic

回答:


256

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

とにかく、phpコマンドには、コマンドラインからコードを実行するための2つのスイッチがあります。

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

次のように、phpの-rスイッチを使用できます。

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

上記のPHPコマンドは、次のように出力 noして戻ります 0

>>> 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比べると不自然ですが、facebookで作成されたphp用の素晴らしいインタラクティブシェルをインストールしてタブ補完や履歴などを取得したくない場合-aを使用します

>>> php -a
Interactive shell

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

私のボックス* es *(UbuntuとArchでテスト済み)のように、それがあなたのボックスで動作しない場合おそらくPHPの設定が曖昧であるか壊れています。このコマンドを実行すると:

php -i | grep 'API'

あなた見るべきです:

Server API => Command Line Interface

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

あなたがない場合は、あなたのPHPのコマンドは、CLI(コマンドラインインタフェース)SAPI(サーバーAPI)を使用していることがわかり、その後、実行php -h | grep codeているクレイジースイッチを見つける- year-がために、これが変更されていないようご使用のバージョン/セットアップでコードを実行することができます。

別の例として、私のボックスで確実に機能するようにします。

>>> 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/etc/php/cgi/php.ini/etc/php/apache/php.iniGentooのボックスに。で使用されているiniファイルを確認しますphp -i | grep ini


多分あなたのphpの設定が壊れています。私はそれを理解するためのヒントを含めて私の答えを更新しました。
jpic

php -aに関するメモを追加しました。
jpic

6
phpshは作成者(Facebook)によって管理されなくなっていることに注意してください。Googleグループページの誰かが2012年に「phpshは実際にはサポートされていないか、役に立たなくなった」と述べています。改善されたphpコンソールについては、Boris REPLを調べてみてください。
Ben Creasy

3

コマンドラインで:

php -i | grep sourceguardian

そこにある場合は、テキストが表示されます。そうでなければ、あなたは物を得ません。


4
私は盲目であるか、この答えは質問とは何の関係もありません。この答えは、「PHPコードを.phpファイルに保存せずに、コマンドラインから直接PHPコードを実行する方法」という質問にどのように答えるかを示しています
trejder 2014年

15
@trejderしばらくの間、私は間違った質問に答えたかどうか疑問に思いましたが、その後、編集履歴とコメントを確認しました。これは、OPが本当に必要であると思われるものに答えます。特定のPHP拡張機能がロードされているかどうかを調べます。質問は言い換えられたので、今はあまりよく合いません。
Matt Gibson、

3

使用できます:

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

短いタグ「<?=」も役立ちます。

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

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


2
これは、7年前の承認された回答よりも問題が多いようです。使用してphp -r、あなたがPHPタグを開く心配する必要はありません。
miken32

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.