ホームページ > バックエンド開発 > PHPチュートリアル > PHP での Popen の使用に関する問題

PHP での Popen の使用に関する問題

WBOY
リリース: 2016-06-23 14:15:00
オリジナル
1524 人が閲覧しました

プログラムパスがあります: /usr/src/myappMamou/apps/myapp
コマンドラインで、最初にプログラム myapp を起動した後、次のようなプログラムを実行するコマンドを入力できます: send arg1 arg2 arg3
このように、プログラムは正常に実行できます

これで、PHP で上記の関数を完了したい場合は、毎回コマンドラインにコマンドを入力する必要はありません: send arg1 arg2 arg3 も同じ効果を達成できます

PHP は以下の通りです:

        $fixedcmd="send 123456063 10000 1111111";        $ph="/usr/src/myappMamou/apps/myapp";        $rs = popen(\"$ph\" \"$fixedcmd\", "r" );	pclose($rs);
ログイン後にコピー

この操作では効果が得られません。何か質問はありますか?ありがとうございます


ディスカッションへの返信(解決策)

1. phpはコマンドラインで実行されるのか、CGIで実行されるのか、また/usr/src/myappMamou/apps/myappを実行する権限があるかどうか
2. 「まず」 「プログラム myapp を開始します」は、このプログラムは個別に開始されることを意味しますか? send arg1 arg2 arg3 間の関係のスクリーンショットを見せていただけますか
3. myapp を起動するとき、現在のパスは特定の場所にある必要がありますか?

1. php はコマンドラインまたは CGI を通じて実行されますか? /usr/src/myappMamou/apps/myapp を実行する権限がありますか?
2. 「最初にプログラム myapp を起動します」とは、このプログラムが個別に起動されることを意味しますか? send arg1 arg2 arg3 間の関係のスクリーンショットを見せていただけますか
3. myapp を起動するとき、現在のパスは特定の場所にある必要がありますか?

1. PHP は Apache で実行され、権限を持っています
2. 「最初にプログラム myapp を開始する」とは、./myapp などのコマンドラインでプログラムを開始し、次にプログラム myapp> を入力することを指します
入力されたコマンドたとえば、send arg1 arg2 arg3、send はコマンドで、他の 3 つはパラメータです
3. myapp を実行して開始するとき、現在のパスは特定の場所にある必要がありますか? /usr/src/myappMamou の下でのみ実行できます。 /apps.これを行う必要がありますか? これはシステムコマンドのように機能します。つまり、どこにでもコマンド myapp を入力してプログラムを開始します
教えてください

コマンド myapp を任意の場所で実行する必要があります。 myapp のパスを $PATH に追加するには? この方法で、システムは myapp のパスを認識できるようになりますが、試してみましたが、うまくいきませんでした

$rs = Popen(" $ph" "$fixedcmd", "r" ); ? ? ?
とにかく書かなければなりません
$rs = Popen("$ph $fixedcmd", "r" );
さあ

このようにテストしてみてはどうでしょうか

<?php$descriptorspec = array(   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to   2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to);$cwd = '/usr/src/myappMamou/apps';$process = proc_open('myapps', $descriptorspec, $pipes, $cwd);if (is_resource($process)) {    // $pipes now looks like this:    // 0 => writeable handle connected to child stdin    // 1 => readable handle connected to child stdout    // Any error output will be appended to /tmp/error-output.txt	$fixedcmd="send 123456063 10000 1111111";    fwrite($pipes[0], $fixedcmd);    fclose($pipes[0]);    echo stream_get_contents($pipes[1]);    fclose($pipes[1]);    // It is important that you close any pipes before calling    // proc_close in order to avoid a deadlock    $return_value = proc_close($process);    echo "command returned $return_value\n";}
ログイン後にコピー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート