web-dev-qa-db-ja.com

PHP cliスクリプトは何も出力しません

したがって、次のコマンドを使用して実行するphpスクリプトがあります。

php -f my_script.php myArguments

スクリプトはsvnを使用してバージョン管理されています。私はそれを更新し、コマンドをターミナルに実行するように貼り付けて実行しました。ただし、出力はありません。失敗メッセージではなく、何も表示されず、何も表示されません。始まらないようです。次のようなもの:

me:/srv/scripts# php -f my_script.php myArguments
me:/srv/scripts#

他のスクリプトは問題なく実行されます。

これを引き起こしているコードを実際には共有できず、この動作を意図的に再現することができなかったため、SSCCEを思い付くのは困難です。しかし、私はこれを2回見ました。変更を保存し、ファイルを元に戻して貼り付けると、正常に実行される可能性が高くなります。

しかし、私はこの奇妙な行動を引き起こしている原因がわからないことを懸念しています。 PHP開始しない、または何も出力しないように指示する空白文字または何かがありますか?

これがこの動作を見た後に私が試したものです:

  • シンプルになるようにスクリプトを変更するecho 'hello'

  • スクリプトの最初にナンセンスを置くと、解析できなくなります。

  • 作業スクリプトからコードを貼り付ける

  • 欲求不満で壁に頭を叩いて

  • 別のターミナル/ PuTTY ssh接続で試してください。

ここが面白いところです:実際には別の端末で機能します。それは期待どおりにすべてを行います。

それで、これを引き起こしている可能性のあるアイデア、または問題を特定するために私が試すべきことは誰にもありますか?

編集:

「別の端末」はまだ端末アプリケーションであり、新しいものです。

ファイルを実行するための十分な権限がありますが、実行していなくても、実行しないことを示すメッセージが表示されます。

構文エラーを出力するためにPHPを取得することを期待して、意図的に構文エラーを導入しました。それでも出力はありませんでした。

20
MirroredFate

display_errors は実行前に無効にされる可能性があります。 -dスイッチ を使用して手動でオンにすることができます:

php -d display_errors=1 -f my_script.php myArguments
21
Mike B

私は同じ問題に遭遇しましたが、display_errorsへの強制的な強制PHPまたは-lを使用した構文のチェックは役立ちませんでした

私は最終的に私たちの問題を解決しました、そしておそらくあなたはこの解決策のいくつかの助けを見つけることができます

Php.iniを使用せずにスクリプトをテストします。

php -n test_script.php

これは、本当の原因を突き止めるのに役立ちます-PHP=構成、他の誰かのスクリプト、またはあなたのスクリプト

私の場合、php.iniのauto_prepend_fileディレクティブを介して追加されている他の誰かのスクリプトの問題でした。 (より具体的には、後でいくつかのファイルと関数をデバッグして、追加するすべてのコードにデバッグを追加しました-余談ですが、このタイプの問題をデバッグしようとすると、fwrite(STDOUT, "debug text\n");を使用することが非常に重要になることがあります)

誰かがprependファイルで実行される関数を追加しましたが、@記号を使用して特定の関数呼び出しのエラーを抑制しました。 (同様の問題がある可能性がありますが、テストスクリプトに他のコードが含まれている場合、php.iniに特に関連していません)

関数が失敗し、PHPのサイレントデスを引き起こしました。私のテストスクリプトとは関係ありません。

@シンボルを使用すると、私が抱えていた正確な問題がどのように引き起こされるかについて、あらゆる種類の警告が表示されます http://php.net/manual/en/language.operators.errorcontrol.php

同様の症状の再現:

完全に機能するPHP環境を取得し、スクリプトの先頭にこれを追加してCLI出力を中断します@xxx_not_a_real_function_name_xxx();

そのため、php.iniに問題があるか、デバッグで発生する深刻な(そしてイライラする時間のかかる)結果を実現していない@を使用している可能性があります。

10
Tim

私はPHP CLIがメモリ制限の問題のために適切なスクリプトで静かに失敗することを経験しました。以下を試してみてください:

php -d memory_limit=512M script.php
0
Marco Marsala