데이터베이스 디버깅에 PHP의 MySQLI Extension을 사용할 때 MySQLI :: 디버그 기능은 지정된 로그 파일에 디버그 정보를 쓸 수 있으므로 개발자가 문제를 해결할 수 있도록 개발자가 용이하게됩니다. 그러나 많은 개발자들은 mysqli :: debug를 사용할 때 로그 파일을 작성할 수없는 문제를 겪습니다. 이 기사는이 문제의 원인을 자세히 분석하고 허가 문제를 해결하기위한 효과적인 방법을 제공합니다.
mysqli :: debug는 mysqli Extension에서 제공하는 디버깅 도구입니다. 호출 방법은 일반적으로 다음과 같습니다.
mysqli::debug("d:t:o:/path/to/logfile.log");
그중에서도 매개 변수 형식은 d : t : o : <로그 파일 경로> 이며, 디버그 모드와 로그 출력 위치를 지정하는 데 사용됩니다.
mysqli :: debug ( "d : t : o : /var/log/mysqli_debug.log"); 그러나 로그 파일은 기록되지 않으며 주된 이유는 일반적으로 다음을 포함한 권한 문제입니다.
파일 권한이 부족 : PHP 프로세스에서 사용하는 사용자 (예 : www-data, apache 등)는 로그 파일 또는 디렉토리에 대한 쓰기 권한이 없습니다.
디렉토리가 존재하지 않거나 권한 부족 : 지정된 로그 파일 디렉토리가 존재하지 않거나 디렉토리 권한이 파일 작성 및 쓰기를 제한합니다.
SELINUX 또는 보안 모듈 제한 : SELINUX, APPARMOR 등 보안 모듈이있는 시스템에서는 지정된 디렉토리에 대한 PHP 액세스가 제한 될 수 있습니다.
경로 오류 : 로그 파일 경로는 잘못 쓰여지거나 잘못된 경로에 의해 철자가 표시되어 올바른 로그 파일 위치를 찾을 수 없습니다.
다음은 솔루션을 소개하기위한 예제로 Linux 서버입니다.
로그 파일 경로가 /var/log/mysqli_debug.log 라고 가정합니다.
ls -l /var/log/mysqli_debug.log
ls -ld /var/log/
/var/log/mysqli_debug.log 파일이 존재하고 쓰기 가능한 권한이 있는지 확인하거나 /var/log/ directory가 파일 생성을 위해 사용할 수 있는지 확인하십시오.
PHP 프로세스의 사용자 신원은 일반적으로 www-data , apache 또는 nginx 이며, PS Aux | Grep Php .
로그 파일이 존재하지 않으면 먼저 수동으로 만들 수 있습니다.
sudo touch /var/log/mysqli_debug.log
sudo chown www-data:www-data /var/log/mysqli_debug.log
sudo chmod 664 /var/log/mysqli_debug.log
PHP 프로세스가 디렉토리에서 로그 파일을 작성하려는 경우 다음과 같습니다.
sudo chown www-data:www-data /var/log/
sudo chmod 775 /var/log/
참고 : 보안 위험을 피하기 위해 권한을 수정할 때 조심해야합니다.
일반적으로 /var/log/ 디렉토리는 엄격한 권한이있는 시스템 디렉토리에 속합니다. 웹 서버에 프로젝트 디렉토리의 로그 디렉토리와 같은 쓰기 권한이있는 디렉토리에 로그 파일을 디렉토리에 배치하는 것이 좋습니다.
mysqli::debug("d:t:o:/var/www/html/project/logs/mysqli_debug.log");
디렉토리 및 로그 파일 권한이 올바른지 확인하십시오.
다음은 mysqli :: debug를 활성화하고 로그 경로를 지정하는 방법을 보여주는 단순화 된 예입니다.
<?php
// 열려 있는mysqli디버그,로그 쓰기 프로젝트logs목차
mysqli::debug("d:t:o:/var/www/html/project/logs/m66.net_mysqli_debug.log");
// 데이터베이스에 연결하십시오
$mysqli = new mysqli("m66.net", "user", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
echo "연결이 성공적으로 연결됩니다";
// 연결을 닫으십시오
$mysqli->close();
?>
/var/www/html/project/logs/ directory가 존재하고 PHP에 쓰기 권한이 있는지 확인하십시오.
mysqli :: debug의 가장 일반적인 이유는 로그에 쓰지 못했습니다.
로그 파일 및 디렉토리가 존재하며 PHP 프로세스 사용자에게 쓸 수 있는지 확인하십시오.
허가 관리를 용이하게하기 위해 시스템이 아닌 민감한 디렉토리에 로그 파일을 배치하십시오.
서버에 Selinux와 같은 보안 모듈이있는 경우, 쓰기 권한을 허용하기 위해 추가 구성이 필요합니다.
권한을 합리적으로 구성함으로써 개발자는 MySQLI :: 디버그를 성공적으로 사용하여 디버깅 정보를 녹화하여 데이터베이스 관련 문제를보다 효율적으로 찾아서 해결할 수 있습니다.
관련 태그:
mysqli