내 아파치 서버에 통계 파일이 있습니다
/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를 사용하여 연결하고 루트로 작업하십시오.
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
아파치로 파일 액세스를 테스트하려면 다음을 수행합니다.
[root@talara ~]# su apache
bash-4.1$ cat /var/log/messages
cat: /var/log/messages: Permission denied
bash-4.1$
아파치가 이러한 파일에 직접 액세스할 수 있도록 허용하는 내가 아는 대부분의 방법은 엄청난 보안 허점 때문에 어떤 면에서는 눈살을 찌푸리게 합니다. 하지만 보안이 충분하다고 생각한다면 비밀번호 없이 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');