1

exec() を使用して IIS で実行されている PHP によって呼び出されているバット ファイルを使用して、Apache2.2 Web サーバーを再起動しようとしています。Apache と IIS は同じサーバーにあります。

PHP コード

exec("cmd /c restart.bat");

バットファイル

"PATH_TO_APACHE\bin\httpd.exe" -k restart -n Apache2.2

http 経由で php をロードして再起動すると、Apache エラー ログ ファイルに「ログを開けません」というエラーが表示されます。

私の検索結果の大部分は、ポート 80 の競合があると言っていますが、netstat を実行すると何もありません。IIS は別のポートをリッスンしています。.bat ファイルをダブルクリックすると機能しますが、PHP から実行するとエラーが発生します。何か案は?お知らせ下さい。

4

1 に答える 1

0

IIS は、指定されたユーザーのコンテキストですべての実行可能スクリプトを実行します。通常、これは IUSR_[MACHINENAME] アカウントです。このアカウントは、プール構成の IIS 構成で変更できます。

発生している問題は、おそらく、このユーザーがログ ファイルの場所へのアクセスを許可されていないことです。

この問題を追跡するには、次のようにします。 1. (危険です。テスト目的でのみ使用してください): IUSR アカウントをローカル管理者グループに配置します。もう一度テストします。機能する場合は、許可の問題であることがわかります。2. runas コマンドを使用して cmd.exe を IUSR ユーザーとして実行し、コンソール ウィンドウでコマンドを実行してみます。これにより、すべてのエラー メッセージが表示され、より簡単にテストできます。3. IUSR が apache ログの場所に書き込めるようにします。

まったく別の試みは、PHP でマーカー ファイルを作成し、そのマーカー ファイルが存在する場合は、管理者として実行されるスケジュールされたタスクを使用して Apache を再起動することです。そうすれば、IUSR アカウントに追加のアクセス許可を与えたり、再起動を処理する別のコードを用意したりする必要がなくなります。

于 2012-09-24T21:08:48.737 に答える