問題タブ [proc-open]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1570 参照

php - popenから完全な応答が得られない

こんにちは私はpopenでプロセスを実行しています;-

そして、5行を返すプロセスから3行しか取得していません。この正確なコマンドをCLiで実行すると、より多くの応答が得られます。早期に読み取りを停止したかのようです(作業中に次の2行を完了して更新するのに時間がかかる場合がありますが、これは進行状況インジケーターです)。

私は何か間違ったことをしていますか?proc_openの方が適していますか(試してみることができるかどうかを確認し始めました)。

0 投票する
1 に答える
903 参照

php - proc_open使用時の無限ループ処理の扱い方

C言語で作成したプログラムをproc_openで実行しています。

「stdout」にファイルを使用していました。

良いプログラムを実行しているときはすべて問題ありませんが、以下のコードのような無限ループ プログラムを実行していると問題が発生しました。

ファイル example.output を実行すると、ハードディスクがいっぱいになります。そのため、ファイルを削除してコンピューターを再起動する必要があります。私の質問は、このようなものをどのように処理するのですか?

ありがとう :)

0 投票する
1 に答える
1672 参照

php - 複数の入力ストリームで php proc_open() を使用します。ハングの防止

proc_open() php 関数を使用するときに、プロセスにパイプされるストリームの使用に問題があるようです。

私が始めようとしているプロセスは、3 つの画像を重ね合わせて作成するための単純な変換 ImageMagick ユーティリティです。1 つの入力ストリーム (STDIN) のみが使用され、変数がそのストリームにダンプされる場合、変換プログラムは正常に動作し、次のように変数に格納できる出力を返します。

最初に変換を実行し、出力を $ctext_opacity 変数に保存します。次に、proc_open() を介して次のコマンドが呼び出され、$ctext_opacity 変数が STDIN を介してパイプされ、入力イメージとして使用されます。

上記のコマンドは 3 回呼び出され、3 つの個別の画像が生成され、3 つの変数に格納されます。次のコマンドは、これら 3 つの変数を入力イメージとして受け入れることになっています (ImageMagic 構文は、fd:N のような代替 io ストリームを指定します。ここで、N は、proc_open() によって生成されたストリームの番号です)。ただし、入力ストリームへの書き込みまたは STDOUT からの読み取りが間違っているようです。おそらく、プロセスからの出力がフラッシュされず、終了せずにハングする可能性があります。

変換が空/不正なデータでエラーをスローするため、3 & 4 パイプの内容を転送できないようです

0 投票する
1 に答える
952 参照

pipe - proc_open()で.profileをロードします

状況は次のとおりです。特定のサーバーで実行されるバックエンドアプリケーションを作成しました。このサーバーには、フロントエンドサーバーからssh経由で実行できるスクリプトがあります。次に、スクリプト自体で環境変数に大きく依存しているため、スクリプトは必要な環境変数が正しくロードされているかどうかを確認します。

これはうまくいきますが、私が望む方法ではありません。接続が確立されると、もちろん、機能しないを使用して./profileがロードされexec('source /home/user/.profile');ません。スクリプトはすでに実行されているため。そのため、スクリプトは次のように開始されます。

そのヘルパースクリプトはkshスクリプトです。

プロファイルをロードし、最初のスクリプトを再度呼び出します。この2番目のスクリプトを削除したいのですが、ばかげています...最初のスクリプトを実行するには2番目のスクリプトが必要です。proc_openを使用して環境値を設定できることは知っていますが、.profileを配列として書き直すと、さらに馬鹿げたことになります。また、シェルを試しproc_open、プロファイルをロードして、それ自体の中からスクリプトを再実行しました。スクリプトがそれ自体を呼び出し続けていることに気付いただけで、プロファイルがまったくロードされていないと私は信じるようになりました。

これまでの私の試みは次のとおりです。

今のところ運が悪かったのですが、ここで何かを忘れているかどうか誰か教えてもらえますか?私は何が間違っているのですか?私はここで何かを見落としていますか?

0 投票する
1 に答える
3534 参照

ssh - proc_open インタラクション

これが私が達成しようとしていることです:シェルを開きます(kornまたはbashは関係ありません)、そのシェルから、ssh接続を開きたいです(ssh user@host)。ある時点で、パスワードの入力を求められるか、本当に接続したいかどうかを尋ねられる場合があります (問題のキー)。

誰かが尋ねる前に: はい、ssh2 exec 呼び出し用のプラグインがあることは知っていますが、私が取り組んでいるサーバーはそれをサポートしておらず、そうする可能性は低いです。

これが私がこれまでに試したことです:

次に、コンソール出力 ( stream_get_contents($pipes[1])) を読み取って、次に何を渡す必要があるかを確認しようとしました (パスワード、yes、または return'connection failed: '.stream_get_contents($pipes[1])と proc_close $p.

これにより、次のエラーが発生しました。

stdin は端末ではないため、疑似端末は割り当てられません。

したがって、ssh はphp://io-stream コンテキストで呼び出されましたが、上記のエラーのもっともらしい説明のようです。

次へ: 私は最初の SO の質問について考え、最初に bash/ksh シェルを開くことをお勧めします。

そこから取得しますが、まったく同じエラーメッセージが表示されました.今回だけ、スクリプトは実行を停止しましたが、sshは実行されました. だから私は希望を持ち、それから愚かだと感じ、最終的には絶望的になりました。

数秒待った後、次のエラーが発生しました。

PHP 致命的なエラー: 134217728 バイトの許容メモリ サイズを使い果たしました (133693440 バイトを割り当てようとしました)

コール スタックは、最後の必死の試みでも、stream_get_contents 行を表示し続けます。

私は知っています、それは混乱していて、多くのfflush冗長性がありますが、要点は次のとおりです。私の推測では、$pipes[1] のストリームは ssh 接続を保持しているため、そのコンテンツは巨大です。私が必要とするのは、パイプ内のパイプです...これは可能ですか?私は何かが欠けているに違いありません.これが不可能な場合、パイプとは何ですか...私の推測では、proc_openコマンドがそもそも間違っていると思います(エラー: パイプが壊れています)。しかし、最初のエラーを回避する方法が本当にわかりません... 何か考えはありますか? または、上記の暴言がまったく明確でない場合は、質問をフォローアップしてください (おそらくそうではありません)。

0 投票する
2 に答える
986 参照

php - proc_open:ファイル記述子番号を拡張してPerlスクリプトからの「ステータス」フィードバックを有効にする

PHPのproc_openマニュアルには、次のように記載されています。

ファイル記述子番号は0、1、および2に限定されません。有効なファイル記述子番号を指定すると、子プロセスに渡されます。これにより、スクリプトを「コプロセス」として実行される他のスクリプトと相互運用できます。特に、これは、パスフレーズをPGP、GPG、opensslなどのプログラムに安全な方法で渡す場合に役立ちます。また、補助ファイル記述子でこれらのプログラムによって提供されるステータス情報を読み取る場合にも役立ちます。

何が起こるか: PHPベースのWebアプリケーションでPerlスクリプトを呼び出し、その呼び出しでパラメーターを渡します。今後、スクリプトにデータを送信する必要はありません。stdout [1]を介して、PHPアプリケーションで使用するjson_encodedデータをPerlスクリプトから受け取ります。

追加したいこと: Perlスクリプトは、最初の呼び出しで渡されたパラメーターに応じて情報を収集するWebサイトを進行しています。一種のプログレスバーとして表示するために使用できるテキスト文字列をPHPアプリケーションに送り返したいと思います。

どのようにすべきか:その「プログレッション」アップデート用に設定されたチャネルを(1〜2秒ごとに)ポーリングすることを期待します。Javascript / jQueryを使用して、ユーザーが表示できるようにhtmldivコンテナーに書き込みます。stdoutストリームを解読する必要があるため、「progress」チャネルをより重要な「json_encode(data)」チャネルと混合する必要はないと思います。(これは論理的で実用的ですか?)

私の主な質問:追加の「ファイル記述子」 をどのように使用しますか?以下の3=>...のように、追加のチャネルの設定を簡単にイメージします。

しかし、Perlスクリプトでは、次のようにstdoutに書き込むだけです。

追加のチャネルを設定するという私の理解が正しければ(上記の3 => ...)、Perlスクリプト内でどのようにチャネルに書き込むのでしょうか?

ありがとう

0 投票する
3 に答える
2154 参照

php - PHP proc_open 環境変数

proc_open()関数を使用してプロセスを実行しようとしています。ページで指定されているように、カスタム環境変数を指定して印刷しようとしました。提供されたすべての変数 + 常に 3 つの変数 (「SHLVL」、「PWD」、「_=」) が表示されます。提供された環境変数のみを印刷/使用したいと思います。これらの 3 つは常にこの関数に存在しますか? 変数のみを提供する方法はありますか? これはすべて Linux と PHP5 の下にあります。

ありがとう。

0 投票する
2 に答える
1209 参照

php - psqlクエリでのproc_open()による対話型プロンプト

WebインターフェイスからいくつかのPostgreSQLDBコマンドを実行しようとしています。proc_open()を使用してWindowsコマンドプロンプトにパイプします。psql(および他のすべてのpostgresコマンド)はパスワードをオプションとして受け入れないため、パスワードを書き込みストリームに送信する必要があります。以下のコードにより、ブラウザがハングします。リソースが作成されていないか、パスワードが適切にパイプされていません。この時点でどんな提案も歓迎します。

[コマンド内のクレイジーな二重引用符に気付くでしょう。これは、何らかの理由でWindowsに必要なようです。]

この問題の回避策は大歓迎です。

  • 以前にsystem()とexec()を使用しようとしましたが、インタラクティブプロンプトを処理しないため、あきらめました。インタラクティブのためのphpのより良いオプションはありますか?
  • pg_query()はpostgres DBと対話するためのメインコマンドですが、pg_dumpおよびpg_restore操作はサポートされていません。phpで実行できるバイナリpostgres.backupファイルからバックアップおよび復元する別の方法はありますか?
0 投票する
1 に答える
555 参照

php - PHP exec() メソッドにインタラクティブな引数を渡す

以下を実装するための助けが必要です。次のような C プログラム ファイルがあります。

a.out を生成しましたが、exec("a.out", $output) を使用してこれを a.out と呼びたいと思います。しかし、私の問題は、要求されたときに整数の値を渡す方法を取得していることです。proc_open() を使ってみましたが、使い方がわかりませんでした。これを処理してこれら 2 つの値を渡し、最終的に受信した結果を出力できる PHP コードを教えていただければ助かります。

よろしくお願いします

0 投票する
1 に答える
962 参照

php - pgsql に接続するために php スクリプトから proc_open を実行中にエラーが発生しました

.sql ファイルを postgres DB (Cent OS) にインポートしようとしている私の PHP スクリプト。

使用する PHP スクリプトから DB に接続するには、次のようにします。

エラーが表示されます:「pgsqlを開始できません」。

また、proc_open から @ 記号を削除すると、エラー メッセージが表示されます....

" proc_open() [<a href='function.proc-open'>function.proc-open</a>]: Descriptor item must be either an array or a File-Handle in <b>/home/nominati/public_html/Nominatim/utils/setup.php"

$aDescriptors はすでに配列ですが。ユーザー権限に関連する問題はありますか?

前もって感謝します。