현재 위치: > 최신 기사 목록> MySQLI :: Debug 호출이 로그 파일을 생성하지 않는 이유는 무엇입니까?

MySQLI :: Debug 호출이 로그 파일을 생성하지 않는 이유는 무엇입니까?

M66 2025-06-01

데이터베이스 디버깅에 PHP의 MySQLI 확장을 사용하는 경우 MySQLI :: Debug ()는 특별하고 유용한 기능입니다. 개발자가 MySQL 클라이언트 라이브러리의 디버깅 정보를 얻어 연결 및 쿼리 중에 문제를 해결할 수 있습니다. 그러나 많은 개발자들이 혼란을 겪게됩니다. mysqli :: debug ()에게 전화 한 후 디버그 로그 파일을 생성 할 것으로 예상되지만 실제로 로그를 찾을 수는 없습니다. 이 기사는이 상황의 가능한 원인을 분석하고 해당 솔루션을 제공합니다.

1. mysqli :: debug의 작동 메커니즘 소개

mysqli :: debug () 함수는 문자열 매개 변수를 허용합니다.이 매개 변수는 일반적으로 출력 디버그 정보로 파일 경로를 지정하는 데 사용됩니다.

 mysqli::debug("d:t:filename.log");

"d : t :" 여기에는 인쇄 스레드 정보 등을 나타내는 디버그 플래그 (디버그 플래그)가 있으며 Filename.log 는 로그 파일 이름입니다.

실제로 MySQLI :: Debug ()는 파일을 직접 생성하지 않지만 MySQL 클라이언트 라이브러리 (libmysqlclient)의 디버깅 함수를 호출하여 디버깅 정보를 지정된 대상으로 출력합니다.

2. 일반적인 원인과 솔루션

2.1 권한 문제는 파일을 쓸 수 없습니다

원인 : PHP 운영 환경 (예 : Apache, Nginx)에는 지정된 디렉토리 또는 파일에 대한 쓰기 권한이 없으므로 로그를 생성 할 수 없습니다.

해결책:

  • 지정된 로그 파일 경로가 올바른지 확인하고 해당 디렉토리가 존재하는지 확인하십시오.

  • 예를 들어 디렉토리 쓰기 가능한 권한을 제공하십시오.

 chmod 755 /path/to/log/dir
chown www-data:www-data /path/to/log/dir

(서버 사용자로 조정)

  • PHP의 Open_basedir 한계가 경로에 쓰기를 허용하는지 확인하십시오.

2.2 들어오는 매개 변수 형식이 잘못되었거나 경로가 유효하지 않습니다.

원인 : mysqli :: debug () 의 매개 변수 형식은 libmysqlclient의 사양을 준수해야합니다. 일반적인 형식은 "d : t :/path/to/logfile" 입니다. 유효하지 않은 경로로 작성되었거나 도메인 이름 만 작성된 경우 로그가 올바르게 생성되지 않을 수 있습니다.

해결책:

  • 예를 들어 절대 경로를 사용하십시오.

 mysqli::debug("d:t:/var/log/mysqli_debug.log");
  • 도메인 이름이나 상대 경로 만 쓰지 마십시오. 경로에 URL이 포함 된 경우 도메인 이름을 M66.NET 으로 바꾸고 로컬 파일 시스템의 유효한 디렉토리를 가리켜야합니다. 일반적으로 로그 경로는 서버 로컬 경로 여야합니다.

2.3 서버가 디버깅 기능을 비활성화하거나 로그를 리디렉션했습니다.

원인 : 일부 PHP 구성 또는 MySQL 클라이언트 라이브러리 버전에는 디버그 로깅이 비활성화되었거나 로그가 시스템 기본 위치로 리디렉션됩니다.

해결책:

  • PHP 및 MySQL 클라이언트 라이브러리 버전을 확인하여 MySQLI :: Debug ()가 지원되었는지 확인하십시오.

  • 서버의 시스템 로그 및 기본 MySQL 클라이언트 로그 디렉토리를 확인하여 관련 출력이 있는지 확인하십시오.

  • 관리자 권한으로 스크립트를 실행하고 권한 제한을 제외하십시오.

2.4 잘못된 통화 위치 또는 불충분 한 디버깅 정보

원인 : mysqli :: debug ()가 너무 일찍 또는 너무 늦게 호출되는 경우 (예 : 데이터베이스 연결이 설정되지 않았거나 스크립트 실행 후 스크립트가 호출되는 경우) 로그는 출력되지 않을 수 있습니다.

해결책:

  • 데이터베이스 연결이 활성화되기 전에 MySQLI :: Debug () 에 전화하여 디버깅 정보를 캡처 할 수 있는지 확인하십시오.

  • 통화 매개 변수가 정확하고 사양을 준수하는지 확인하십시오.

3. 코드 예제

다음은 mysqli :: debug ()를 올바르게 호출하고 로그가 작성되는지를 보여주는 방법을 보여주는 샘플 코드입니다.

 <?php
// 열려 있는 mysqli 디버그,서버 로그 서버 로그 서면 로그,도메인 이름을 대체하십시오 m66.net
mysqli::debug("d:t:/var/log/m66.net_mysqli_debug.log");

// 데이터베이스 연결을 만듭니다
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_errno) {
    echo "연결이 실패했습니다: " . $mysqli->connect_error;
} else {
    echo "연결이 성공적으로 연결됩니다";
}

// 쿼리를 실행하십시오
$result = $mysqli->query("SELECT * FROM users");
if ($result) {
    while ($row = $result->fetch_assoc()) {
        print_r($row);
    }
}

$mysqli->close();
?>

로그 경로 /var/log/m66.net_mysqli_debug.log 는 서버에서 유효한 절대 경로 여야하며 PHP 프로세스는 쓰기 권한이 있습니다.

4. 요약

mysqli :: debug ()는 로그 파일을 생성하지 못한다. 로그 파일은 일반적으로 불충분 한 권한, 잘못된 경로 설정, 부적절한 통화 타이밍 또는 환경 구성 문제로 인해 발생합니다. 확실하게 하다:

  • 지정된 로그 경로는 정확하고 기록 가능합니다.

  • 들어오는 매개 변수의 형식은 사양을 준수합니다.

  • 통화 시간은 합리적입니다.

  • PHP 및 MySQL 클라이언트 라이브러리는 디버깅을 지원합니다.

이를 통해 디버그 로그를 효과적으로 생성하고 개발자가 데이터베이스 관련 문제를 더 잘 찾을 수 있도록 도와줍니다.