問題タブ [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 (または動作する他の関数)
ブラウザを介していくつかのコマンドラインを実行する必要があります。コマンドラインで行う必要があるのは次のとおりです。
proc_open
では、関数を使用してこれを行うにはどうすればよいですか? または、これを行うには別の関数を使用する必要がありますか?
Adam Wright、あなたの例を試しましたが、ユーザーのパスワードを変更できません。$user、$userPassword、および $newPassword を定義する以外に、スクリプトで何か他のことを行う必要がありますか?
ありがとう
php - proc_openからのコンソール出力のキャプチャ
proc_openを使用して、サーバープログラムに接続するTelnetセッションを起動しています。接続は問題ありませんが、応答を受け取ったときに、文字列全体がいくつかの文字の後に切り取られているため、ファイルに保存できません。
これが私のスニペットです:
また、netcatとexecを使用してみました。
しかし、私は同じ結果になりました。
コンソールからtelnet/netcatコマンドを実行すると、文字列全体がstdoutに表示されますが、別のファイルにリダイレクトしようとすると、上記と同じ確率になります。
php - PHP popen と proc_open がバイナリ出力を返さない
popen または proc_open を使用して次のコマンドを実行し、Windows 共有の内容を一覧表示する場合:
共有内のファイルに § 文字 (ASCII 21 Decimal) がある場合、特殊文字に遭遇したときに次の行までデータをスキップします。
期待される出力:
実際の出力:
php - PHPはproc_openを使用して、開いた(実行した)スクリプトが終了するのを待たないようにしますか?
私はこれにしばらく時間を費やしましたが、これを機能させることができません。以前にこれについていくらか関連する質問をしましたが、質問を絞り込むためにさらに調査を行うことができるように削除したため、申し訳ありません。この時点で私は立ち往生しています。これで解決策があると思ったのですが、期待どおりに機能しませんでした。誰かが同様の質問をし、以下のようなコードを提供するフォーラムを見つけました。これは私が試しています。スクリプトは実行されますが、それでもPHPコードの次の行に進む前に、それが終了するのを待ちます
php - PHPで並行プロセスを生成するにはどうすればよいですか?
PHPでproc_openを使用して複数のプロセスを一度に生成しようとしていますが、最初のプロセスが終了するまで2番目の呼び出しは開始されません。これが私が使用しているコードです:
php - PHP で proc_open がコマンド ライン ウィンドウを有効に保つようにする
PHP では、コマンド ラインでコマンドを実行するために proc_open を使用しています。
新しい CMD ウィンドウで開く必要があるため、コマンドの先頭に「start」を追加しました。
ただし、結果を表示するために開いたままにする必要もありますが、実際には後で自動的にウィンドウを閉じます。
「一時停止」と「残り」に /k オプションを追加してみました。しかし、どちらも機能しません。窓が閉まるだけです。
proc_open を使用しているときにウィンドウを開いたままにするにはどうすればよいですか?
これはコードの一部です。$cmd は前に入力されています。
php - PHPを使用してインタラクティブなSSHセッションを設定するにはどうすればよいですか?
Mac OS X 10.6のコマンドラインからPHPを使用して、リモートサーバーへのインタラクティブなSSH接続を確立しようとしています。現在、PHPのproc_open関数を使用して次のコマンドを実行しています。
これはほとんど機能します。-t -t
オプションは、ほとんどの場合、疑似端末を強制することになっています。SSHパスワードを入力して、Enterキーを押すことができます。ただし、Enterキーを押した後、端末は単にハングしているように見えます。出力も何もありません-SSHセッションが失敗したかのようです。コマンドなどを実行できず、Ctrl+Cを使用してすべてを強制終了する必要があります。ssh -t -t -p 22 user@server.com "ls -la"
のようなコマンドを実行して正しい出力を取得できるため、ログインが成功したことはわかっています。
この問題は、proc_open呼び出しで標準パイプを使用していたことに関連していると考えたため、それらをptyに置き換えました。次のエラーが発生します:「このシステムではpty疑似端末がサポートされていません...」
Mac OS Xは単にptyまたは疑似端末をサポートしていませんか?(私はこのすべてのシェル用語を使用するのはかなり新しいです)。
PHPコードは次のとおりです。
(申し訳ありませんが、SOのフォーマット手順を理解することはできません...)
私は何が間違っているのですか?なぜptyを使用できないのですか?これはMacOSXでは不可能ですか?ご協力いただきありがとうございます!
php - php の proc_open
proc_ope
PHP で n を使用して、 tclsh.exeなどのアプリケーションを開きます。これはリソース番号を返します。
ここで私の質問は、スクリプトでtclshプロセスが強制終了されたかどうかをどのように知ることができますか?
よろしくミトゥーン
php - PHP スクリプトから perl ファイルを実行しますが、Windows Server での出力を待ちません
PHPスクリプト内からPerlスクリプトを実行しようとしています。exec、popen、proc_openなどのさまざまな方法を使用してこれを機能させましたが、古き良きGoogleが答えをくれない回避すべき問題がいくつかあります。
PHPファイル内から.plスクリプトを実行する必要があります(数値であるスクリプトに1つの変数を渡す)が、.plが完了するまでphpスクリプトが待機しないようにする必要があります(.plは4〜5時間かかる可能性があります)サーバー上で実行します)。perlスクリプトからの戻り出力は期待していないので(perlスクリプトはその出力をmysql dbに記録します)、サーバー上で実行してphpスクリプトを続行させるだけで済みます。
apache、php、mysql を実行している Windows マシンで実行する場合、乗り越えなければならないいくつかの障壁があります。
Linux のソリューションを見たことがあると思いますが、Windows マシンにとどまる必要があります。
現在、次のコードを使用して proc_open アプローチを試みています (proc_open 行の 35 は、perl スクリプトに渡す必要があるテスト ID です)。
現在、このコードは perl スクリプトを実行しますが、(テストのためだけに) その後に配置した while ループは実行されません (perl スクリプトが終了するのを待って実行するかどうかを確認していません)。 .
php - PHP proc_openが複数回開く
CLI(cmd、bashなど)を介してプログラムを実行するために使用されるユーティリティ機能があります。STDOUT
、STDERR
およびの 3 つの項目の配列を返しますEXIT CODE
。
これまでのところ、問題なくうまく機能しています。実際、私が抱えている問題は機能を妨げるものではありませんが、パフォーマンスが心配です。
問題は、場合によっては、PHP が同じコマンドを複数回 (私の場合は 3 回) 実行することです。
コメント行 (9 行目) に注意してください。それはテスト用でした。これを有効にして、ターゲット プログラムが 1 回だけ実行されるようにしました (コードが何らかの形で同じ関数を呼び出している可能性があると考えていました)。しかし、その行を有効にしても、プログラムは複数回実行されました。
現状では、同じプログラムを (別の機会に) 実行しているコード内の 2 つの場所があります。コマンドラインはどちらも同じです。
ただし、プログラムが 1 回実行される場合と、PHP がプログラムを 3 回実行する場合があります。
Process Explorer でこの動作を監視して確認しています。Windows 7 x64 を使用しています。プログラムは PHP と同様に 32 ビットです。
編集:問題のプログラムはカスタム開発されており、新しいプロセスを開きません。