を使用している間、私たちはこのような何かを行うことができますファイルハンドルはstdout
と指定されています。これは、このシェルのコマンドと同じです。 リダイレクトPHPのexecの(または類似の機能)Pythonで
grep -E foo /root/text | sed -E 's/bar/baz/g' > /tmp/whatever
私はPHPでこの動作を再現したいと思いますが、同等のネイティブ機能を見つけることではないのです。私が行ってきたことは、長い文字列として同等のシェルコマンドを構築し、shell_exec()
にそれを渡すことですが、これは特にescapeshellarg()
の正しい使い方と、乱雑である(上記のPythonコードで必要とされていないノートエスケープ。)
$pattern = "foo";
$searchfile = "/root/text";
$search = "bar";
$replace = "baz";
$tempfile = tempnam(sys_get_temp_dir(), 'asdf');
$grepcmd = "/bin/grep -E " . escapeshellarg($pattern) . " " . escapeshellarg($searchfile);
$sedcmd = "/bin/sed -E " . escapeshellarg("s/$search/$replace/g");
exec("$grepcmd | $sedcmd > $tempfile);
各コマンドを別々に実行し、出力を変数に取り込み、次のコマンドに渡すこともできますが、これは明らかに非効率的です。
PHPでこれと似たようなことを行うネイティブな方法はありますか、それとも私の現在の方法はそれほど良いものですか?
これは有望なスタートアップのようです。いくつかの戻り値(mysqldumpからの非常に大きな出力、gzipへの出力など)では、 'proc_open()'の次のインスタンスに渡すだけの変数を作成することは非常に非効率的です。 – miken32