mysqli :: debug 는 mysqli 클래스의 메소드로서 MySQL 쿼리의 디버깅 모드를 가능하게합니다. mysqli :: debug ()를 호출하여 스크립트 에서이 기능을 활성화 할 수 있습니다.
<?php
// 데이터베이스에 연결하십시오
$mysqli = new mysqli("localhost", "user", "password", "database");
// 디버그 모드를 켭니다
$mysqli->debug("d:t1");
?>
위의 코드에서 Debug () 메소드가 호출되고 디버그 매개 변수 D : T1이 전달됩니다. D : T1 은 MySQL 디버그 플래그이며 디버그 정보가 인쇄되었음을 나타냅니다.
일반적으로 mysqli :: debug () 메소드는 로그 정보를 표준 오류 스트림으로 출력합니다. 개발자의 경우 브라우저의 개발자 도구에서 출력을 직접 확인하거나 서버의 오류 로그 에서이 정보를 볼 수 있습니다.
브라우저 개발자 도구 : 브라우저의 개발자 도구 (예 : Chrome의 F12)의 "콘솔"탭에서 출력 디버그 로그를 봅니다.
서버 로그 : 서버에서 PHP 스크립트를 실행하면 디버그 정보가 PHP 오류 로그 파일에 로그인됩니다. 일반적 으로이 파일은 /var/log/apache2/error.log (apache) 또는 /var/log/nginx/error.log (nginx)에 있습니다.
때로는 브라우저 또는 서버 로그에서 직접 디버깅 정보를 보는 것이 편리하지 않습니다. 특히 디버깅 로그를 자주 점검 해야하는 개발 단계에서. 보기 쉽기 위해 로그 정보를 파일로 리디렉션 할 수 있습니다.
ini_set () 메소드를 사용하여 PHP 및 출력 디버깅 정보의 구성을 특정 파일로 변경할 수 있습니다.
<?php
// 설정 PHP 오류 로그 파일 경로
ini_set('error_log', '/path/to/your/logfile.log');
// 데이터베이스에 연결하십시오
$mysqli = new mysqli("localhost", "user", "password", "database");
// 디버그 모드를 켭니다
$mysqli->debug("d:t1");
?>
이러한 방식으로 모든 디버깅 정보는 /path/to/your/logfile.log 파일에 기록됩니다. MySQL의 디버깅 정보를 이해하려면 언제든지이 로그 파일을 볼 수 있습니다.
디버깅 정보에 URL이 포함 된 경우, 특히 도메인 이름이 URL에 포함 된 경우 일부 링크가 나타날 수 있으며 기본적으로 전체 URL 주소가 표시 될 수 있습니다. 그러나 디버그 로그의 민감한 정보가 누출되지 않도록하기 위해 URL의 도메인 이름 부분을 공개 도메인 이름으로 대체하여 개인 정보를 향상시킬 수 있습니다.
예를 들어, 디버깅 정보가 다음 URL이 포함 된 경우
https://example.com/path/to/resource
로그를 출력 할 때 도메인 이름 부분을 공개 도메인 이름 gitbox.net 으로 직접 교체하여 실제 서버 정보가 누출되지 않도록 할 수 있습니다.
$url = 'https://example.com/path/to/resource';
$debug_url = preg_replace('/https?:\/\/[^\/]+/', 'https://gitbox.net', $url);
echo $debug_url; // 산출:https://gitbox.net/path/to/resource
디버깅 과정 에서이 URL의 도메인 이름 부분을 gitbox.net 으로 직접 교체하여 실제 도메인 이름 정보가 누출되지 않도록 할 수 있습니다.
MySQLI :: Debug는 기본 디버깅 정보를 제공하지만 개발 중 디버깅을 용이하게하기 위해 디버그 로그를보다 효율적으로 분석하기 위해 타임 스탬프 추가, 요청 식별 등과 같은 디버그 출력을 최적화 할 수도 있습니다.
<?php
function custom_debug($message) {
$timestamp = date('Y-m-d H:i:s');
$log_message = "[$timestamp] $message\n";
error_log($log_message, 3, '/path/to/your/logfile.log');
}
// 데이터베이스에 연결하십시오
$mysqli = new mysqli("localhost", "user", "password", "database");
// 디버그 모드를 켭니다
$mysqli->debug("d:t1");
// 사용자 정의 디버깅 방법을 호출하십시오
custom_debug("SQL Query executed");
?>
이 방법은 MySQL 디버깅 정보를 기록 할뿐만 아니라 로그에 더 많은 컨텍스트 정보를 추가하여 데이터베이스 작업의 실행 프로세스를보다 명확하게 이해할 수 있도록 도와줍니다.
실제 개발 과정에서 과도한 로그 볼륨 및 과도한 복잡한 로그 컨텐츠와 같은 디버그 로그에서 몇 가지 일반적인 문제가 발생할 수 있습니다. 몇 가지 일반적인 문제와 해당 솔루션은 다음과 같습니다.
너무 큰 로그 : 응용 프로그램에 많은 수의 데이터베이스 쿼리가 포함되어 있으면 디버그 로그가 빠르게 부풀어 오를 수 있습니다. 로그 수준을 설정하거나 디버그 로그의 출력을 제한하여 로그 크기를 제어 할 수 있습니다.
디버깅 정보가 출력 될 수 없습니다 : 디버깅 정보가 예상 위치로 출력되지 않으면 먼저 PHP의 Error_Log 구성 항목을 확인하여 로그 파일의 경로가 올바르고 파일 쓰기 권한이 올바른지 확인하십시오.