• ベストアンサー

httpdのエラーログをwebでリアルタイムでみたい

php5、fedora4、apache2.0です。 httpdのエラーログ(/var/log/httpd/error_log)をリアルタイムに見たいのですが、何かPHPを使ってよい方法はないでしょうか? 今のところ、あるページにアクセスしたらSystem関数でシェルを実行し、ログをコピーしてきて表示するようにしていますが、上手くいきません。 $last_line = system('sh httpd_error.sh',$return_val); httpd_error.sh ---------------------------------- #!/bin/sh cp -v /var/log/httpd/error_log /var/www/html/log/ ----------------------------------- 「/var/log/httpd/error_log」へのアクセス権がないというエラーが出てしまいます。 PHPのsystem関数でシェルを実行した時って、誰が実行していることになるのでしょうか? また、これ以外にhttpdのエラーをリアルタイムにwebから見れる方法がありましたらご教授ください。 ヨロシクお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yama06
  • ベストアンサー率61% (101/164)
回答No.1

コピーでよいのでしたら、error_logのパーミッションを chmodで変えるだけでよいのではないでしょうか。

nomoremusic
質問者

補足

ありがとうございます。 パーミッションは777にしております。 シェルの実行はsystem()の他に $ret = shell_exec("cp -v /var/log/httpd/error_log /var/www/html/"); も試してみましたが、やはり同様のエラーがでてしまいました。

その他の回答 (4)

  • yama06
  • ベストアンサー率61% (101/164)
回答No.5

cpではなく、catで cat /var/log/httpd/error_log > /var/​www/html/log/error_log ではいかがでしょうか?

nomoremusic
質問者

お礼

ありがとうございます。 ツリー構造上、関係する全てフォルダについて読み取りと実行の権限を与えたところ、できるようになりました。

回答No.4

蛇足です。 今までの方針でOKなのですが、ログを出力、と言う事でしたら、下記の方法が楽かと。 <?php $lines = file("/var/log/httpd/error_log"); foreach($lines as $line){ echo $line; } ?> foreachの中で処理させれば統計なんかもとる事が出来ます。

回答No.3

コピー先のパーミッションじゃないですか? コピー先、即ちルートディレクトリ、 /var/www/html/ コピー元は読めさえすれば大丈夫だと思いますが。 ルートディレクトリを777にするのは気持ちが悪いと思うので、 # mkdir /var/www/html/httplog # chowm apache. /var/www/html/httplog としておけば、apache権限になるので良いかと。

nomoremusic
質問者

補足

ありがとうございます。 コピー先ディレクトリ(/var/www/html/log/)、ファイル(/var/www/html/log/error_log)をchown apache.しましたが、同様のエラーが出てしまいました・・・ cp: cannot stat `/var/log/httpd/error_log': Permission denied

回答No.2

> PHPのsystem関数でシェルを実行した時って、誰が実行していることになるのでしょうか? 通常は、apacheかnobody(httpd..つまりapacheの実行権限者)になっています。 $ps aux あたりで確認して下さい。 私の環境では、/var/log/httpd/error_log はパーミッションは644になっているので、普通にコピー可能でした。実行権限は何になってますか? 実行権限を調整すればとりあえず問題解決が出来ると思います。

nomoremusic
質問者

補足

ありがとうございます。 httpdは「apache」になっておりました。 error_logのパーミッションは一時的に777にしています。 シェルスクリプトは/var/www/html/以下にあり、同じディレクトリにあるphpからsystem関数で実行しています。 error_logを後から見ると、以下のエラーが出ています。 cp: cannot stat `/var/log/httpd/error_log': Permission denied パーミッション777でエラーが出るので、どうしたものか・・・

関連するQ&A