PHP 개발에서 mysqli :: debug ()는 거의 알려지지 않았지만 매우 유용한 기능입니다. 특히 복잡한 데이터베이스 연결 또는 쿼리 문제를 처리 할 때 MySQLI 확장의 내부 실행을 디버깅하는 데 사용할 수 있습니다.
이 기사는 Docker 또는 Virtual Machine 환경에서 mysqli :: debug ()를 활성화하고 사용하여 디버깅 효율성을 향상시키는 방법을 설명합니다.
mysqli :: debug () 는 PHP MySQLI Extension에서 제공하는 디버깅 도구입니다. 그 기능은 MySQLI의 디버깅 정보를 지정된 파일에 출력하는 것입니다. 표준 출력 또는 브라우저로 출력되지 않지만 서버의 파일을 로그에 기록합니다.
통화 방법은 매우 간단합니다.
mysqli::debug("d:t:o,/tmp/client.trace");
매개 변수 "d : t : o,/tmp/client.trace" 의 의미는 다음과 같습니다.
D : 디버그 정보;
T : 스레드 정보;
O : 파일 출력;
/tmp/client.trace : 출력 파일 경로.
참고 :이 함수를 사용하기 전에 MySQL 클라이언트 라이브러리에 대한 디버깅 지원을 활성화해야합니다. 그렇지 않으면이 기능 호출이 유효하지 않습니다.
Docker 컨테이너 또는 가상 머신 에서이 기능을 사용하는 경우 두 가지 전제 조건에주의를 기울여야합니다.
PHP는 CLI 또는 FPM 모드로 실행해야하며 MySQLND 드라이버를 활성화해야합니다.
컨테이너 또는 가상 머신의 PHP는 디버그 지원으로 컴파일해야합니다.
PHP가 MySQLI 디버깅을 지원하는지 확인하려면 다음 명령을 실행하십시오.
php -i | grep 'Client API version'
결과에 MySQLND가 포함 된 경우 지원을 의미합니다. 그렇지 않으면 PHP를 다시 컴파일하거나 MySQLND를 포함하는 PHP 이미지를 설치해야 할 수도 있습니다.
Docker를 사용하는 경우 다음과 같이 Dockerfile에서 구성 할 수 있습니다.
FROM php:8.2-cli
RUN docker-php-ext-install mysqli \
&& echo "mysqli.allow_local_infile=On" >> /usr/local/etc/php/php.ini
# 선택 과목:마운트 디버그 파일 경로
VOLUME /tmp
그런 다음 PHP에 다음 코드 테스트를 작성하십시오.
<?php
mysqli::debug("d:t:o,/tmp/client.trace");
$mysqli = new mysqli("db.m66.net", "root", "password", "test");
if ($mysqli->connect_errno) {
echo "연결이 실패했습니다: " . $mysqli->connect_error;
exit();
}
$result = $mysqli->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$mysqli->close();
이 스크립트를 실행하면 /tmp/client.thrace 파일에서 디버깅 정보를 볼 수 있습니다.
가상 머신에서의 사용은 Native 또는 Docker를 사용하는 것과 다르지 않습니다. 유일한 것은 PHP 프로세스가 설정 한 로그 파일의 경로에 /TMP 또는 지정된 마운트 디렉토리와 같이 쓰는 권한이 있어야한다는 것입니다.
디버그 로그 컨텐츠는 대략 다음과 같습니다 (발췌) :
>mysql_real_connect
>mysql_send_query
<mysql_read_query_result
...
이 로그를 통해 연결 고장의 이유, 느린 쿼리 실행 및 DNS 구성 오류로 인한 지연을 찾을 수도 있습니다.
프로덕션 환경에서는 데이터베이스 연결 정보 및 쿼리 컨텐츠와 같은 민감한 데이터가 유출되므로 MySQLI :: Debug ()를 활성화 하지 않아야 합니다. 개발 또는 테스트 환경에서만 권장되며 생성 된 로그 파일을 정리하는 데주의하십시오.
Docker 또는 Virtual Machine 환경에서 mysqli :: debug ()를 사용하면 복잡하지 않으며 키는 다음과 같습니다.
PHP가 MySQLND를 사용하는지 확인하십시오.
컨테이너 또는 가상 머신의 로그 경로에 대한 권한을 설정하십시오.
디버깅이 완료된 후 제 시간에 로그를 비활성화하거나 삭제하십시오.
이 도구를 합리적으로 사용하면 데이터베이스 문제를 해결할 때 더 효율적이고 정확할 수 있습니다.
유사한 디버깅 요구 사항이 있으면 시도해 볼 수도 있습니다!