PHPの外部コマンドを介して変数の内容を渡す方法は?
質問
長い文字列を含む変数があります。 (具体的には、数キロバイトのjavascriptコードが含まれています)
この文字列を外部コマンド(この場合はjavascript-compressor)に渡し、外部コマンド(圧縮されたjavascript)の出力をphpでキャプチャして、変数に割り当てます。
phpでjavascriptを圧縮するためのクラスがあることは知っていますが、これは一般的な問題の一例にすぎません。
元々使用していたもの: ジェネラコディセタグプレ
これは小さな文字列に対しては機能しますが、安全ではありません。 (oldvarにシェルにとって特別な意味を持つ文字が含まれている場合、何かが起こる可能性があります)
escapeshellargを使用してエスケープすると修正されますが、許容される最大引数長のOS制限のため、文字列が長くなるとソリューションが機能しなくなります。
popen("command" "w")
を使用してコマンドに書き込んでみましたが、これは機能しますが、コマンドからの出力は黙って無効になります。
概念的には、次と同等のことをしたいだけです: ジェネラコディセタグプレ
解決
proc_open 関数を使用すると、両方の標準ストリームへのハンドルを取得できますプロセスの標準入力を使用して、データをプロセスに書き込み、結果を読み取ります。
他のヒント
rumpelsの提案を使用して、うまく機能していると思われる次のソリューションをデバイス化することができました。質問に興味のある人のために、ここに投稿してください。 ジェネラコディセタグプレ
デッドロックの問題がある可能性があります:送信するデータがパイプの合計サイズよりも大きい場合、外部コマンドはブロックされ、誰かがstdoutから読み取るのを待ちますが、phpはブロックされ、stdinがより多くの入力のための余地を作るためにから読み取られます。
おそらくPHPがこの問題をなんとかして処理しますが、パイプに収まらないほど多くのデータを送信(または受信)する予定があるかどうかをテストする価値があります。