1

サーバー上で実行しようとしnotepadています(localhost今のところ)。

exec()system()たとえば write の場合、機能は正常に機能しますping 127.0.0.1

しかし、これは機能しません (コマンドプロンプトでコマンドを直接書くとうまくいきます):

$command = "C:\WINDOWS\system32\notepad.exe";

$result = system($command);

print_r($result);

で使用Windows XPxamppます。コマンドが他のアカウントから実行されているため、おそらく権限がありませんが、これを確認する方法がわかりません。

何かアドバイスはありますか?

編集:

前述bwoebiのように、プロセスを開いていますが、それらは別のユーザー (SYSTEM) から開かれており、アプリケーションがいつ開かれたかを確認できません。だから、私の質問を言い換える必要があります:PHPスクリプトからコマンドを実行するときに使用されるユーザーを変更する方法は?

4

3 に答える 3

2

一重引用符を使用していない場合は、最初にコマンド文字列のバックスラッシュをエスケープする必要があります。

$command = "C:\\WINDOWS\\system32\\notepad.exe";

また、Apache が Windows サービスとして実行されている場合、Apache にはデスクトップ操作のアクセス許可がないため、GUI を開くことができないことに注意してください。コマンド ラインで PHP を使用して直接スクリプトを実行してみてください。

編集

コマンドの実行に使用されるユーザーは、PHP を実行しているユーザーです。PHP を実行しているユーザーを変更するには、Apache を実行しているユーザーを変更する必要があります。このユーザーにデスクトップ操作のアクセス許可を持たせたい場合は、サービスとしてではなく、自分で Apache を実行する必要があります。

于 2013-04-16T12:27:37.713 に答える
0

シェル コマンドを実行した後、プロセスを少しスリープさせ、タスク マネージャーでメモ帳を検索します。すると、これが 2 人の異なるユーザーであることがわかります (他のユーザーのメモ帳は表示されません)。

于 2013-04-16T12:28:30.040 に答える
0

メモ帳は GUI プログラムなので、Windows TTY がアクティブになっている必要があります。

Ping はコマンド ラインであるため、システムで直接実行し、結果を呼び出したプログラムにパイプすることができます。

os の動作について詳しく説明しないと、基本的に Windows マシンでは実行できません (UNIX マシンでは可能ですが、より困難です)。

于 2013-04-16T12:30:11.767 に答える