問題タブ [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.
php - PHP proc_open bash とダッシュ
次のサンプル スクリプトを検討してください。
(Debian のデフォルト) に/bin/sh
シンボリック リンクされている場合、シェルで実行されます。/bin/dash
cat
ただし、/bin/sh
がリンクされている場合は、 の直接の子です:/bin/bash
cat
php
これは、生成されたプロセスにシグナルを確実に送信することを不可能にする非常に厄介な矛盾です (シグナルはシェルによって受信される場合があるため)。
proc_open/bin/sh
が指す場所によって動作が異なるのはなぜですか? シェルを実行しない方法/bin/sh
はありbash
ますか?
php - proc_open() によって開かれたプロセスへのシグナルの送信
ここには、proc_open()
ssh を呼び出してリモート マシンでコマンドを実行するために使用するユーティリティがあります。ただし、場合によっては、リモート マシンでコマンドを停止する必要がproc_close()
ありproc_terminate()
ますが、目的の信号が ssh 接続の相手側に送信されないようにする必要があります。SSH は通常、終了時に実行中のプログラムに a を発行しますが、リモート エンドで実行中のプログラムに転送する ssh にSIGHUP
a を送信する必要があります。SIGINT
私はできる限りグーグルで検索しましたが、シグナルを受信pcntl
するための関数がいくつかあるようですが、関数に関連するものは言うまでもなく、PHPを介してシグナルを送信することについて何も見つけることができませんでした.proc_*
php - pdf2htmlexのphpでstderrを解析する
私は以下のphpコードを持っています:
このコードは、$cmd が「ping 127.0.0.1」に設定されている場合に正常に機能し、次のようにリアルタイムで php 出力を提供します。
しかし、pdf2htmlEX コマンド、つまり $cmd = "pdf2htmlEX --zoom 1.3 --override-fstype 1 --hdpi 720 --dest-dir test test/test_data/Harsh_Singh_191_Marketing_IM18.pdf" は機能しません。ファイルを変換してディレクトリに出力しますが、Web ページには何も表示されません。どうすればそれを機能させることができますか?
php - proc_open を使用した複数のストリーム選択は、遅いプロセスからの応答を受け取ります
proc_open を使用して WP プラグインから子プロセス (ehonest リミックス コード) として遅い python スクリプトを呼び出しています。
(python)スクリプトの処理には約1分かかります(一連のオーディオ)。pythonスクリプトから出力された出力をブラウザーに表示する方法を見つけたいと思っています。現状では、関数全体の出力は、proc_open および stream_select プロセスが終了するまで表示されません。これには、関数の先頭にある echo ステートメントも含まれます。
stream_select への複数の呼び出しを使用して、子プロセスの出力をエコーすることは可能ですか?
明らかに、私はソケット プログラミングに不慣れであり、SO コミュニティからのさらなる洞察を楽しみにしています。
php - PHP から外部プログラムと対話する
それは非常に単純な質問だと思いますが、私はそれにこだわっています:
いくつかのデバッグ オプションを使用して実行される外部プログラム (具体的には Exim) と通信する必要があります。Linux シェルから実行すると、次のようになります: run を実行しexim -bh 11.22.33.44
、その出力 (STDOUT と STDERR の両方) を読み取り、SMTP ダイアログからいくつかの行を入力し、Exim の出力を再度読み取り、別の SMTP 行を入力します。また、bash シェルを使用している間は問題なく動作しますが、PHP スクリプトから実行すると、STDIN 読み取りループでスタックします。
私は使用しますproc-open
:
シンプルに見えますが、最初の STDERR の最後に行くとスタックしました。
ブロッキング モードとブロック解除モードの両方を試し、STDERR と STDIN からの読み取りを交換しようとしましたが、これまでのところうまくいきませんでした。
それを行う正しい方法を教えてください!
php - PHP での端末のリアルタイム更新 (popen または proc_open)
目的: 端末から改行なしでリアルタイム更新を取得する。現在、私はこれを使用しています
このコードの出力
ダウンロードの最後に 1 回だけ出力されます (最初は、なぜこれが起こるのかわかりません)。しかし、私のWindowsコマンドプロンプトでは、改行なしで1行でパーセンテージと速度を取得しています。そのために、私はこのコードを試しました
失敗しました...空のようになります
出力
では、これらのコードまたは新しいコードを変更するための提案を誰でも提供できますか? ありがとう。
php - PHP proc_open() を取得して、png が作成されている限り PhantomJS ストリームを読み取ります
私は PHP スクリプトに依存してshell_exec()
おり、(結果として) 99% の確率で動作しました。このスクリプトは、画像ファイルを生成する PhantomJS スクリプトを実行しました。次に、さらに PHP を使用して、その画像ファイルを特定の方法で処理しました。問題は、ときどきshell_exec()
ハングしてユーザビリティの問題を引き起こすことでした。このhttps://github.com/ariya/phantomjs/issues/11463
を読む
と、それshell_exec()
が問題であり、に切り替えるとproc_open
ハングが解決することがわかりました。
問題は、whileshell_exec()
が実行されたコマンドが終了するのを待機proc_open
しないことです。そのため、その後に続いて生成されたイメージで動作する PHP コマンドは、イメージがまだ生成されているため失敗します。私はWindowsで作業しているのでpcntl_waitpid
、オプションではありません。
私がやろうとしているのは、PhantomJS に何か (何か) を継続的に出力させて、proc_open
標準入力パイプを介して読み取るようにすることです。これにより、ターゲット画像ファイルの準備が整うとすぐに、画像処理 PHP 関数が動作を開始するように時間を計ることができます。
ここに私のphantomJSスクリプトがあります:
そして私のPHPコード:
test.png が生成されますが、単一の .png が取得されません$return_message
。私は何を間違っていますか?