0

ファイル displaypage.php は次のようになります。

<?php

exec("php filetoexecute.php 2>&1",$output);
print_r($output);

?>

ファイル filetoexecute.php は次のようになります。

<?php

echo "test data";

?>

私の $output 配列の唯一のものはPHP_FCGI_CHILDREN is not validであり、オンラインであまり助けが得られません。なぜそこにあるのかはわかっています.STDERRをSTDOUTにリダイレクトしていますが、テキストtest dataが配列に書き込まれないのはなぜですか?

出力を取得したくない限り、それが機能することはわかっています。displaypage.php の行が次のようになっている場合、filetoexecute.php のコードは適切に実行されます (データベースに何かを書き込むとしましょう)。

exec("php filetoexecute.php >/dev/null");

もちろん、これは出力が何もダンプされていないためです。

これを行っているのは、filetoexecute.php を呼び出しているファイルとは異なる php セッション Cookie で動作させる必要があるためです。filetoexecute.php によって処理される数行のコードのセッションを切り替えることはできません。filetoexecute.php の結果が何であるかを知る必要があるため、それが生成するデータが必要です。

また、passthru()私をまったく助けていないようです。

最後に、私は exec() や passthru() を使用するという考えに固執していません。私が望むことを達成するためのヒントをいただければ幸いです!

4

1 に答える 1

0

多くの実験の後、私はうまくいくものを見つけました。私はCLIに慣れていないので、まだ理解していません.実際にはあまり役に立ちませんが、これが機能します:

displaypage.php

<?php

$returnedData = exec("php filetoexecute.php &");

echo $returnedData;

?>

何らかの理由で、最後のアンパサンドは、呼び出されたページによって出力されたものを exec() が返す原因となります。これがこれを達成するための最良の方法であるかどうかはわかりませんが、今はうまくいっています。これを改善するための提案があれば、ぜひ教えてください。

于 2012-07-25T18:39:16.610 に答える