%20%E3%81%A8%E3%81%97%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
error_log を Web ページとして表示できるようにして、同僚 (ルート アクセス権なし) がこれを参照して PHP 開発のトラブルシューティングを行えるようにしたいと考えています。
私の CentOS 5.x マシンでは、エラー ログは /var/log/httpd/error_log にあり、ディレクトリはルート アクセスのみです。
ログを表示するための CGI スクリプトを記述しますが、これは Apache プロセスで実行されるため、ルートではないため、ログ ファイルにアクセスできません。(試しました)。私を困惑させるのは、含まれているディレクトリがルート アクセスであるにもかかわらず、Apache が何らかの方法でログに書き込んでエラーをログに記録できることです。
どうすれば目標を達成できるでしょうか? あるいは、別の方法を提案していただけますか?
答え1
実際のところ、他の回答は状況によっては使用しないかもしれませんが、参考のために残しておきます。
同僚に独自の VirtualHost が割り当てられている場合は、その仮想ホストを設定して、同僚のログを別のディレクトリに出力し、同僚のシステムのエラーのみが表示されるようにします。
<VirtualHost *:80>
ServerName colleagues.vhost.com
DocumentRoot ...
...
ErrorLog /home/user/errorlog-colleagues.vhost.com
</VirtualHost>
あるいは、.htaccess ファイルが有効になっている場合は、次のようにして、PHP エラー ログを任意の場所に出力するようにします。
/path/to/webroot/.htaccess:
php_value error_log /home/user/phperrorlog-colleagues.vhost.com
答え2
ファイルの権限を変更できます...そうでない場合は、Apache ログ ファイルから別のファイル (読み取り権限を設定できるファイル) に rsync を毎分実行する cron ジョブを作成して、それを Web ページに表示することができます。
Apache のログ記録メカニズムを変更する方法もありますが、それは構成を変更できるかどうかによって決まります。
答え3
コンソールからファイルにアクセスする問題を解決するには、/var/log/httpd ディレクトリの権限を変更します。
新しいグループを追加し、そこにユーザーを追加します。
groupadd apache-logs
usermod -a -G apache-logs user
chgrp apache-logs /var/log/httpd
chmod g+rx /var/log/httpd
または、システム上のどのユーザーでもログを表示できる場合は、次のようにします。
chmod go+rx /var/log/httpd
どちらにしても、httpd をアップグレードすると元の権限にリセットされます。それ以外の場合は変更されないはずです。
また、Apache がデフォルトの権限でログに書き込める理由は、Apache が root として実行されている間、ログ ファイルが Apache によって開かれるためです。Apache が完全にロードされると、ユーザーは Apache に変更されますが、ログ ファイルは開いたままになります。