コンソールにエコー結果が表示されないため、エコー結果がコンソールに表示されません。プロセスを読み取りモードで開くと、そのSTDOUTがオープンプロセスのファイルハンドルにリンクされました。出力がコンソールに到達する唯一の方法は、そのファイルハンドルから読み込んでエコーした場合です。
流れは言い換えれば、これです。
- b.phpは、実行を開始 - それは、これが実行を開始するa.phpなり
- $ hの中にリードモードにするpopenを呼び出し、ストリームリソースを格納
-
いつものように、そのSTDINとSTDOPUTがあなたのコンソールにリンクされていますそのSTDOUTは$ hのファイル記述子にリンクされており、STDINは何にもリンクされていません
- これは、a.phpがb.phpが起動したコンソールに直接アクセスできないことを意味します。
- a.phpはその出力をそのストリームに書き込み、実行を終了します
- b.phpは$ h内のストリームで何もしません。ただ終了するので、a.phpの出力は失われます。
ここで何が起こっているのかを説明してください。コンソール上でa.phpの出力を見るには、b.phpが$ hのストリームからそれを読み込み、b.phpだけがコンソールにアクセスできるので、それをエコーします。
また、popen()の代わりにsystem()を使用すると、system()を使ってメインスクリプトのSTDINとSTOUTをプログラムまたはスクリプトに渡すので、出力は呼び出し側スクリプトのコンソールに自動的に出力されます。コール。