質問

長い文字列を含む変数があります。 (具体的には、数キロバイトのjavascriptコードが含まれています)

この文字列を外部コマンド(この場合はjavascript-compressor)に渡し、外部コマンド(圧縮されたjavascript)の出力をphpでキャプチャして、変数に割り当てます。

phpでjavascriptを圧縮するためのクラスがあることは知っていますが、これは一般的な問題の一例にすぎません。

元々使用していたもの: ジェネラコディセタグプレ

これは小さな文字列に対しては機能しますが、安全ではありません。 (oldvarにシェルにとって特別な意味を持つ文字が含まれている場合、何かが起こる可能性があります)

escapeshellargを使用してエスケープすると修正されますが、許容される最大引数長のOS制限のため、文字列が長くなるとソリューションが機能しなくなります。

popen("command" "w")を使用してコマンドに書き込んでみましたが、これは機能しますが、コマンドからの出力は黙って無効になります。

概念的には、次と同等のことをしたいだけです: ジェネラコディセタグプレ

役に立ちましたか?

解決

proc_open 関数を使用すると、両方の標準ストリームへのハンドルを取得できますプロセスの標準入力を使用して、データをプロセスに書き込み、結果を読み取ります。

他のヒント

rumpelsの提案を使用して、うまく機能していると思われる次のソリューションをデバイス化することができました。質問に興味のある人のために、ここに投稿してください。 ジェネラコディセタグプレ

デッドロックの問題がある可能性があります:送信するデータがパイプの合計サイズよりも大きい場合、外部コマンドはブロックされ、誰かがstdoutから読み取るのを待ちますが、phpはブロックされ、stdinがより多くの入力のための余地を作るためにから読み取られます。

おそらくPHPがこの問題をなんとかして処理しますが、パイプに収まらないほど多くのデータを送信(または受信)する予定があるかどうかをテストする価値があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top