1

私はPHP5.4IIS7.5を使用しています。

簡単なコマンドを実行すると、機能します

<?php
    exec("dir", $r);
    print_r($r);
?>

ただし、.exeファイルを開くと機能せず、ページはphpタイムアウトまで読み込まれ、メモ帳は開かれません。

<?php
    exec("notepad.exe", $r);
    print_r($r);
?>

また、コマンドラインでメモ帳のphpを実行すると、機能します。

php -f <file>

問題はIISにあると思いますが、何がわかりません。ありがとう!

アップデート

別のテストケースを実行しましたが、機能しません。ページの読み込みは完了しますが、タスクは削除されません。

<?php
    $r = exec("SCHTASKS.exe /Delete /TN TaskTest /F");
    print_r($r);
?>

IIS_IUSRSには、schtasksを実行するためのアクセス許可があります。

解決

インタラクティブプログラムであるため、メモ帳が開きません。

タスクスケジューラの場合、IUSRへのタスクフォルダ(C:\ Windows \ System32 \ Tasks)への読み取りおよび書き込み権限を付与します。

4

2 に答える 2

1

exec問題は、生成されたプロセスの出力を収集して返すように指示しており、これを行うにはプロセスを終了する必要があることです。メモ帳はすぐに終了しないため、PHP は永久に待機状態になります (代わりに、非対話型プロセスを実行することでこれをテストできますnet.exe)。

要点: exec友達はインタラクティブなプロセスを開始するためのものではありません。

いずれにせよ、コマンド インタープリタexec 生成され、次にメモ帳が生成されます。ただし、最近の Windows バージョンで導入されたセキュリティ機能と、IIS を実行しているユーザーによっては、これらのプロセスは現在のデスクトップに表示可能なウィンドウを作成しないため、何も表示されません。タスク マネージャーまたは別の同等のプログラムを使用して、それらが生成されたことを確認できます。

于 2012-10-05T11:20:53.250 に答える
1

うまくいかないと思う理由は何ですか?

通常、Windows サービスはデスクトップとやり取りできないことに注意してください。そのため、メモ帳が起動していて、どこにも表示されていない可能性があることに注意してください。また、PHP は終了するまで待機し、終了するのを誰も見ることができないため、ご覧のとおり、タイムアウトします。

また、Web サーバーを実行しているユーザーが、メモ帳があるフォルダーに対する実行権限を持っていない場合もあります (関連するパスがあると仮定します)

于 2012-10-05T11:21:09.560 に答える