4

PHP スクリプトを実行して stdout から出力を取得しようとすると、コードは次のようになります。

using namespace boost::process;

std::string exec="php";
std::vector<std::string> args;

// I must to throw the exe by argument
args.push_back("php");
args.push_back("a.php");

context ctx;
ctx.stdout_behavior = capture_stream();
child c = launch(exec, args, ctx);

pistream &is = c.get_stdout();

stdout には情報がありませんが、stderr には次の情報が表示されます。

「boost::process::detail::posix_start: execve(2) が失敗しました: 権限が拒否されました」

そして、ターミナルでまったく同じコマンドを実行すると、正常に動作します!

解決策はありますか?

ありがとう..

4

1 に答える 1

3

ありがとう@hakre、あなたは私に正しい方向を教えてくれました!

/usr/bin/ にアクセスしてパーミッションを確認したところ、php と同じパーミッションを持つ php5 コマンドが表示されました (php は php5 へのリンクです)。

理由はわかりませんが、コマンドをphp5に置き換えると、以前のエラーが「そのようなファイルまたはディレクトリはありません」に置き換えられ、フルパスを指定すると正常に動作します:

exec="/usr/bin/php5";
args.clear();
args.push_back("php5");
于 2012-11-09T19:18:48.713 に答える