私のApacheサーバーに統計ファイルがあります
/var/www/vhosts/test/statistics/logs/access_log
使ってみよう
echo system('cat /var/www/vhosts/test/statistics/logs/access_log');
PHPスクリプトからアクセスしましたが、出力は出ません。
echo system('dir');
予想される dir 出力を提供します。
cat /var/www/vhosts/test/statistics/logs/access_log
しかし、Puttyを使って接続し、rootで作業してください。
PHPスクリプトを介してログにアクセスするには?
答え1
HTTPプロセスはファイルにアクセスできません。 CentOS 6 ApacheプロセスはApacheユーザーとして実行されます。例:
[root@talara ~]# ps aux | grep httpd
root 2300 0.0 2.7 334744 28020 ? Ss Jul10 0:47 /usr/sbin/httpd
apache 8354 0.0 2.0 334744 20536 ? S Jul21 0:00 /usr/sbin/httpd
apache 8355 0.0 2.0 334744 20536 ? S Jul21 0:00 /usr/sbin/httpd
apache 8356 0.0 2.0 334744 20536 ? S Jul21 0:00 /usr/sbin/httpd
Apacheでファイルアクセスをテストするには:
[root@talara ~]# su apache
bash-4.1$ cat /var/log/messages
cat: /var/log/messages: Permission denied
bash-4.1$
Apacheがこれらのファイルに直接アクセスできるようにする私が知っているほとんどの方法は、膨大なセキュリティホールであるため、ある点で眉をひきます。しかし、セキュリティが十分であると思われる場合は、パスワードなしでsudoersファイルにapacheを追加してください(参照?非常に、非常に悪い)。次に、PHPコードを次のように変更します。
echo system('sudo cat /var/www/vhosts/test/statistics/logs/access_log');
より良いアプローチについてのコミュニティの意見を歓迎します。
答え2
このファイルにアクセスするためにシステムコールを行う特別な理由はありますか?
それ以外の場合は、PHPの既存の設定を使用してファイルにアクセスできます。
$log = file_get_contents('/var/www/vhosts/test/statistics/logs/access_log');
または
$log = file('/var/www/vhosts/test/statistics/logs/access_log');