3

私の質問は、CLI での PHP の使用に関するものです。PHP ファイルのコンテンツの PHP コマンドへのパイプが機能する理由がわかりません。

    cat file.php | php  

ComposerのインストールのようにComposer のインストール:

    curl -sS https://getcomposer.org/installer | php
4

3 に答える 3

6

PHP に引数を指定しない場合は、標準入力 (一般に と呼ばれますstdin) から読み取ります。出力バッファリングが無効になっている場合は、php引数なしで実行して<?php echo "test\n";+と入力するとEnter、「test」と表示されます。基本的stdinにはキーボードが書き込むストリームであり、基本には端末であり、書き込みます。stdoutecho

ここに画像の説明を入力

しかし、パイプ ( |) はその動作を変更します。最初のプログラムの標準出力は、2 番目のプログラムの標準入力になります。

ここに画像の説明を入力

これは、私たちの nix システム シェルが提供する非常に強力なものです :-)。

于 2013-05-01T21:14:41.000 に答える
0

「なぜそれが機能するのか」について: PHP バイナリの -cli バリアントは、stdinそこから入力スクリプトを読み取って処理するように設計されているため、機能します。

マンページには、さまざまな実行オプションがリストされています。最後の行を参照してください。

PHP は広く使用されている汎用スクリプト言語で、特に Web 開発に適しており、HTML に埋め込むことができます。これは、次の操作を可能にするコマンド ライン インターフェイスです。

パラメータ -f の後に実行するファイルの名前を指定すると、ファイルを解析して実行できます。

パラメータ -r を使用すると、.php ファイル内で eval() 関数を使用する場合と同じように、PHP コードを直接実行できます。

パラメータ -R または -F を使用して、標準入力を 1 行ずつ処理することもできます。このモードでは、入力行ごとに -R で指定されたコードまたは -F で指定されたファイルが実行されます。$argn で入力行にアクセスできます。入力行を処理している間、$argi には処理中の実際の行の番号が含まれます。さらに、パラメーター -B と -E を使用して、すべての入力行がそれぞれ処理される前と後にコードを実行できます (-r を参照)。入力は STDIN から読み取られるため、STDIN から読み取ると明示的に次の入力行が変更されるか、入力行がスキップされることに注意してください。

-r -f -B -R -F または -E のいずれも存在せず、単一のパラメーターが指定されている場合、このパラメーターは解析および実行するファイル名として使用されます (-f と同じ)。パラメータが存在しない場合は、標準入力が読み取られて実行されます。

于 2013-05-01T18:30:35.647 に答える
0

通常はそのようにはせず、単純にphp file.php. この場合、何らかの理由でそのようにしたい場合は、引用符で囲む必要があります

php -r "`cat file.php`"

編集これもできます。

このようにファイルの先頭にハッシュバンを置きます

#!/usr/bin/env php 
<?php

//code follows here

次に、で実行します

cat file.php | php
于 2013-05-01T18:27:56.523 に答える