Linux와 macOS에서 PHP용 Microsoft 드라이버를 설치하세요

이 지침에 따라 PHP, SQL Server용 Microsoft ODBC 드라이버, SQLSRV 및 PDO_SQLSRV 확장을 설치합니다. 각 탭은 해당 탭이 설치에 사용하는 저장소에서 제공하는 PHP 패키지를 사용하므로, 명령에 표시된 버전은 탭마다 다릅니다. 해당 리포지토리에서 다른 버전을 제공하는 경우, 지원 매트릭스에 나열된 다른 PHP 버전으로 교체하세요.

SQLSRV와 PDO_SQLSRV 드라이버는 동일한 ODBC 의존성을 사용하며 독립적으로 설치할 수 있습니다. 애플리케이션이 두 드라이버를 모두 사용한다면 두 확장 프로그램을 모두 설치하세요.

절차가 끝날 때 CLI와 선택한 웹 서버 런타임은 두 확장 기능을 모두 로드해야 하고, 두 PHP API를 모두 사용할 수 있어야 하며, 각 API의 샘플은 데이터베이스 서버 버전을 반환해야 합니다.

시작하기 전에

  1. 현재 드라이버 릴리스에서 지원되며 현재 사용 중인 운영 체제 버전에서 사용할 수 있는 PHP 버전을 선택하세요.

  2. 어떤 PHP 런타임이 필요한지 결정하세요:

    • 스크립트, 예약된 작업 또는 워커를 위한 CLI입니다.
    • Apache에서 호스팅되는 PHP용 Apache 모듈입니다.
    • nginx 또는 Apache FastCGI 구성용 PHP-FPM입니다.
  3. 운영 체제 아키텍처를 확인하세요. 출시된 리눅스 아카이브에는 x64 바이너리가 포함되어 있고, 출시된 macOS 아카이브에는 Arm64 바이너리가 포함되어 있습니다. PIE는 컴퓨터에 설치된 PHP용으로 빌드되며, 이 글에서 주요 설치 경로입니다.

  4. Microsoft ODBC 드라이버와 unixODBC 개발 패키지를 설치하세요. Microsoft 패키지는 데이터베이스 통신을 담당합니다. unixODBC 패키지는 SQLSRV와 PDO_SQLSRV을 구축하는 데 필요한 헤더를 제공합니다.

  5. 확장 프로그램을 설치하거나 변경한 후에는 모든 웹 서버, PHP-FPM 풀, 그리고 오래 실행 중인 작업자를 재시작할 계획을 세우세요.

플랫폼 패키지 매니저는 PHP와 네이티브 필수 구성 요소를 설치합니다. PIE는 PHP 확장 기능을 빌드하고 설치합니다. PHP 구성은 각 런타임이 해당 항목들을 로드하는지 여부를 제어합니다. 확장 프로그램이 로드된 후 ODBC 드라이버는 데이터베이스 통신과 암호화를 처리합니다.

PIE로 드라이버를 설치하세요

PIE, 즉 PHP 확장 설치 프로그램은 현재 드라이버 릴리스용으로 지원되는 확장 설치 프로그램입니다. 이는 더 이상 지원되지 않는 PHP 확장 커뮤니티 라이브러리(PECL) 워크플로우를 대체합니다.

드라이버를 설치하기 전에 다음 섹션의 플랫폼 전제 조건을 완료하세요. 그 다음 PIE와 각 드라이버를 따로따로 설치하세요:

PIE 설치

PIE는 PHP 8.1 이후 버전에서 실행됩니다. 다른 PHP 설치의 개발 도구를 선택하면 해당 다른 PHP 설치에 확장 프로그램을 설치할 수 있습니다.

curl와 GitHub CLI를 설치한 후 계속 진행하세요. 플랫폼 섹션에는 최소 설치 시 제공되지 않을 수 있는 curl가 포함됩니다.

PIE PHP 아카이브(PHAR)를 다운로드하고, 설치하거나 실행하기 전에 GitHub 명령줄 인터페이스(CLI)로 확인하세요:

pie_tmp=$(mktemp -d)
curl -fL --output "$pie_tmp/pie.phar" https://github.com/php/pie/releases/latest/download/pie.phar
gh attestation verify --owner php "$pie_tmp/pie.phar"

검증이 성공할 때만 계속하세요:

sudo install -m 755 "$pie_tmp/pie.phar" /usr/local/bin/pie
rm "$pie_tmp/pie.phar"
rmdir "$pie_tmp"
unset pie_tmp

임시 디렉토리는 귀하의 계정에서만 접근할 수 있습니다. 다운로드나 검증이 실패하면 PHAR를 설치하거나 실행하지 마세요. 다시 시도하기 전에 임시 파일과 디렉터리를 제거하세요.

설치된 PHAR이 사용할 PHP 실행 파일과 함께 실행되는지 확인하세요:

php /usr/local/bin/pie --version

SQLSRV와 PDO_SQLSRV 드라이버를 설치하세요

리눅스와 macOS에서는 PIE가 필요한 컴파일러와 PHP 개발 도구를 확인합니다. PIE를 실행하기 전에 플랫폼 ODBC 개발 패키지와 C++ 컴파일러를 설치하세요. 인터랙티브 터미널에서 PIE를 실행하세요. 시스템 디렉터리에 파일을 설치할 권한이 필요할 때 사용자의 sudo 비밀번호를 요청할 수 있습니다.

PIE는 이를 호출하는 데 사용되는 PHP 설치를 대상으로 합니다. 버전이 지정된 설치의 경우, 각 설치 명령어에 --with-php-config를 추가하여 개발 도구를 선택하세요. 예를 들어, 의도한 도구가 pie install --with-php-config=/usr/bin/php-config8.4 microsoft/sqlsrv인 경우 /usr/bin/php-config8.4를 사용하세요. microsoft/pdo_sqlsrv에도 같은 옵션을 적용하세요. Alpine은 버전이 지정된 실행 파일 이름을 사용합니다; 이 섹션에서는 버전이 지정되지 않은 명령어 대신 Alpine 명령어를 따르세요.

각 확장에 대해 명령을 하나씩 실행하세요. 이 명령어들은 PIE의 기본 PHP 설치를 사용합니다:

pie install microsoft/sqlsrv
pie install microsoft/pdo_sqlsrv

PIE는 플랫폼의 PHP 구성 도구나 extension= 항목을 통해 각 확장을 활성화하려고 시도하며, 불가능할 경우 경고를 보냅니다. PHP는 각 실행 환경에 대해 서버 애플리케이션 프로그래밍 인터페이스(SAPI)를 사용합니다. Debian, Ubuntu, SUSE에서는 명령줄, Apache, PHP FastCGI Process Manager (PHP-FPM) 구성이 다를 수 있습니다. 성공적인 명령줄 설치가 웹 서버가 드라이버를 로드된다는 것을 보장하지 않습니다.

php --ini에서 명령줄을 확인해 보세요. 웹 서버를 위한 임시 phpinfo() 페이지를 만들기 전에 진단 페이지 접근을 제한하세요. 각 런타임별로 로드된 구성 파일 과 스캔된 .ini 파일을 확인하세요. 항목이 빠졌다면, 올바른 로드 순서로 추가하려면 Linux와 macOS에서 드라이버 로드의 지침을 따르세요. 설정 변경 후에는 웹 서버 또는 PHP-FPM을 재시작하세요. Red Hat은 일반적으로 php.ini를 SAPIs 전반에서 공유하지만, 한 번의 PIE 실행에 의존하기 전에 활성 구성을 반드시 확인하세요.

플랫폼에 설치하세요

운영체제와 웹 서버 구성을 선택하세요. 해당 탭의 설치 단계를 완료한 후 설치 테스트를 따르세요.

Ubuntu에 설치

비고

다음 명령어는 packages.sury.org PHP 저장소를 사용하므로 지원되는 PHP 버전을 선택할 수 있습니다. Ubuntu 릴리스용 ODBC 드라이버를 설치할 때는 공식 Microsoft 지침을 사용하세요.

1단계. PHP 설치(Ubuntu)

sudo apt-get update
sudo apt-get install ca-certificates apt-transport-https curl gnupg2 lsb-release -y
sudo install -d -m 755 /etc/apt/keyrings
sudo curl -fsSL https://packages.sury.org/php/apt.gpg -o /etc/apt/keyrings/php.gpg
sudo chmod 644 /etc/apt/keyrings/php.gpg
echo "deb [signed-by=/etc/apt/keyrings/php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt-get update
sudo apt-get install php8.4 php8.4-dev php8.4-xml -y

2단계. 필수 구성 요소 설치(Ubuntu)

Linux에서 SQL Server용 Microsoft ODBC Driver 설치를 따른 다음 개발 헤더를 설치하세요.

sudo apt-get install unixodbc-dev g++ make git -y

3단계. PIE와 함께 Microsoft SQL Server용 PHP 드라이버를 설치하세요 (Ubuntu)

'PIE로 드라이버 설치'를 따르면서 두 설치 명령어 모두에 --with-php-config=/usr/bin/php-config8.4를 추가하세요. 명령줄 설정 파일을 php8.4 --ini로 확인해 보세요.

/usr/local/bin/pie install --with-php-config=/usr/bin/php-config8.4 microsoft/sqlsrv
/usr/local/bin/pie install --with-php-config=/usr/bin/php-config8.4 microsoft/pdo_sqlsrv

4단계. Apache 설치 및 드라이버 로드 구성(Ubuntu)

sudo apt-get install apache2 libapache2-mod-php8.4 -y
sudo a2enmod php8.4

5단계 Apache를 다시 시작하고 샘플 스크립트 테스트(Ubuntu)

sudo systemctl restart apache2

설치를 테스트하려면 이 문서의 끝에 있는 설치 테스트를 참조하세요 .

레거시 PECL 설치

PECL은 현재 드라이버 릴리스에서 더 이상 사용이 권장되지 않습니다. 신규 설치와 업그레이드에는 PIE를 사용하세요. 기존 배포가 PECL에 고정되어 있다면, 패키지 버전을 PHP 런타임과 일치시키고 PIE로 이동할 계획을 세우세요.

설치 확인

명령줄 런타임을 확인하세요. Alpine에서는 php84를 php로 대체하세요. 다른 배포판에서 버전이 지정된 PHP 설치를 할 경우, 해당 실행 파일을 사용하세요.

php --ri sqlsrv
php --ri pdo_sqlsrv
php -m | grep -E "sqlsrv|pdo_sqlsrv"

두 명령어 모두 ExtensionVer를 포함하는 모듈 정보를 출력해야 합니다. 모듈 목록에는 별도의 sqlsrv 라인과 pdo_sqlsrv 라인이 포함되어야 합니다.

연결을 테스트하기 전에 두 PHP API 인터페이스가 verify-php-drivers.php인지 확인하세요:

<?php
$checks = [
    'SQLSRV' => extension_loaded('sqlsrv') && function_exists('sqlsrv_connect'),
    'PDO_SQLSRV' => extension_loaded('pdo_sqlsrv')
        && in_array('sqlsrv', PDO::getAvailableDrivers(), true),
];

$failed = false;
foreach ($checks as $name => $loaded) {
    echo "$name: " . ($loaded ? 'loaded' : 'missing') . PHP_EOL;
    $failed = $failed || !$loaded;
}

exit($failed ? 1 : 0);

예상 출력:

SQLSRV: loaded
PDO_SQLSRV: loaded

PHP-FPM이나 웹 서버의 경우, 임시 페이지를 만들기 전에 phpinfo()하세요. 로드된 구성 파일, extension_dir, 그리고 두 드라이버 섹션을 모두 확인하세요. 설정을 변경하거나 확장 프로그램을 교체한 후 PHP-FPM 또는 웹 서버를 재시작하세요. 인증 후 페이지를 삭제하세요.

라이브 연결을 테스트하려면 시스템의 문서 루트에 testsql.php라는 파일을 생성하세요. 이 경로는 Ubuntu, Debian 및 Red Hat에서는 /var/www/html, SUSE에서는 /srv/www/htdocs, Alpine에서는 /var/www/localhost/htdocs, macOS에서는 $(brew --prefix)/var/www에 있습니다. 스크립트를 실행하기 전에 PHP 프로세스의 SQL_DATABASE, SQL_UID, SQL_PWD, 및 SQL_SERVER_NAME 환경 변수를 설정하세요. 문서 루트 아래의 파일에 자격 증명을 하드코딩하지 마세요.

커맨드라인 테스트의 경우, 대화형 프롬프트 를 사용해 셸 기록에 비밀번호를 입력하지 않고 환경 변수를 설정하세요.

Apache 모듈 테스트의 경우, 사이트의 일반적으로 읽을 수 있는 구성 파일에 자격 증명을 포함시키지 마세요:

  1. 문서 루트 외부에 비공개 파일을 생성하세요. Apache의 설정 디렉터리에서 사용하지 않는 파일 이름을 사용하세요. Linux에서:

    sudo install -o root -g root -m 600 /dev/null /etc/apache2/php-sql-driver-test.conf
    

    Red Hat에서는 /etc/httpd를 /etc/apache2로 대체하세요. macOS에서는 Homebrew의 Apache를 시작하는 계정으로 파일을 생성하세요:

    install -m 600 /dev/null "$(brew --prefix)/etc/httpd/php-sql-driver-test.conf"
    

    이 설정들은 파일 소유자와 루트 관리자만 읽을 수 있습니다. Apache를 시작하는 계정이 파일을 읽을 수 있어야 합니다.

  2. 텍스트 편집기에서 개인 파일을 편집하고 다음 항목을 추가하세요:

    SetEnv SQL_SERVER_NAME "tcp:<server>,1433"
    SetEnv SQL_DATABASE "<database>"
    SetEnv SQL_UID "<user_id>"
    SetEnv SQL_PWD "<password>"
    

    이중 따옴표로 묶인 인수 내에서 각 문자 그대로의 백슬래시에는 \"를 쓰고, 각 문자 그대로의 이중 따옴표에는 \\를 씁니다. 따옴표 안의 앞뒤 공백을 유지하세요. 아파치는 ${NAME} 참조도 대체합니다. 만약 값에 해당 시퀀스나 줄 바꿈이 포함되어 있다면, 대신 명령줄 방식을 사용하세요. 자세한 내용은 Apache 구성의 따옴표 처리 및 이스케이프를 참조하세요.

  3. 사이트의 가상 호스트 내에서 testsql.php에 대해서만 private file을 포함하는 Files 블록을 추가합니다. 가상 호스트가 설정되어 있지 않다면, 블록을 메인 서버 구성에 배치하세요. 자리 표시자를 개인 파일의 절대 경로로 대체하세요:

    <Files "testsql.php">
        Include "<absolute-path-to-private-file>"
    </Files>
    
  4. 아파치를 재시작하세요. 테스트 후 추가한 Files 블록을 제거하고, 개인 파일을 삭제한 후 Apache를 다시 시작하세요. 관련 없는 사이트 설정을 유지하세요.

PHP-FPM 기본적으로 상속된 환경 변수를 지우고, nginx는 환경을 PHP-FPM으로 넘기지 않습니다. 다음 Ubuntu 또는 Red Hat 절차를 격리된 테스트 PHP-FPM 서비스와 풀에서만 사용하세요. 다른 애플리케이션을 실행하는 서비스나 풀에 테스트 자격 증명을 추가하지 마세요: 그 풀 내의 모든 스크립트가 해당 자격 증명을 읽을 수 있습니다. 공유 호스팅을 사용한다면 대신 커맨드라인 테스트를 사용하세요.

  1. 문서 루트 외부에 /etc/php-sql-driver-test.env와 같은 루트 소유 파일을 생성하고, 해당 파일에 대한 접근을 제한합니다:

    sudo touch /etc/php-sql-driver-test.env
    sudo chmod 600 /etc/php-sql-driver-test.env
    

    파일에 연결 설정을 추가하세요:

    SQL_SERVER_NAME="tcp:<server>,1433"
    SQL_DATABASE="<database>"
    SQL_UID="<user_id>"
    SQL_PWD="<password>"
    

    각 세팅을 한 줄로 유지하세요. 이중 따옴표 안에는 문자 그대로의 백슬래시마다 \"를 쓰고 문자 그대로의 이중 따옴표마다 \\를 쓰세요. 달러 기호와 백틱은 셸 표현식으로 평가되지 않습니다. 셸에서 실행하거나 source하지 말고 직접 파일을 편집하세요. 자세한 내용은 systemd EnvironmentFile 문법을 참조하세요.

  2. Ubuntu에서 sudo systemctl edit php-fpm 또는 Red Hat에서 sudo systemctl edit php8.4-fpm 실행할 수 있습니다. 이 systemd 오버라이드를 추가하세요:

    [Service]
    EnvironmentFile=/etc/php-sql-driver-test.env
    
  3. 이 항목들을 활성 PHP-FPM 풀 구성에 추가하세요. 일반적인 위치는 Ubuntu에서는 /etc/php-fpm.d/www.conf, Red Hat에서는 /etc/php/8.4/fpm/pool.d/www.conf입니다:

    env[SQL_SERVER_NAME] = $SQL_SERVER_NAME
    env[SQL_DATABASE] = $SQL_DATABASE
    env[SQL_UID] = $SQL_UID
    env[SQL_PWD] = $SQL_PWD
    
  4. systemd를 재로드하고 해당 PHP-FPM 서비스를 재시작하세요:

    sudo systemctl daemon-reload
    sudo systemctl restart php8.4-fpm
    

    Red Hat에서는 php-fpm를 php8.4-fpm로 대체하세요.

테스트 후에는 임시 환경 파일, EnvironmentFile=에 추가한 항목, 테스트 풀 항목, 그리고 testsql.php를 삭제하세요. 서비스 오버라이드 파일은 이 테스트를 위해 생성한 것이고 다른 설정이 없는 경우에만 삭제하세요. 기존 오버라이드와 풀 설정을 모두 유지하세요. systemd를 다시 불러와서 테스트 설정을 제거한 후 PHP-FPM을 다시 시작하세요.

SQLSRV 예시

환경 값은 변하지 않게 유지하세요. 각 예제는 연결하기 전에 설정이 누락되었거나 비어 있는 경우를 확인하고 이를 거부합니다. 각 예시는 닫힘 브레이스를 두 겹으로 늘리고 외부 브레이스를 추가한 후 데이터베이스 이름, 사용자 이름, 비밀번호를 드라이버에 전달합니다. 이 인코딩은 중괄호를 문자 그대로 보존하고 세미콜론이 연결 옵션을 구분하는 것을 방지합니다.

<?php
$serverName = getenv('SQL_SERVER_NAME');
$databaseName = getenv('SQL_DATABASE');
$uid = getenv('SQL_UID');
$pwd = getenv('SQL_PWD');

if ($serverName === false || $serverName === ''
    || $databaseName === false || $databaseName === ''
    || $uid === false || $uid === ''
    || $pwd === false || $pwd === '') {
    handle_failure("Set SQL_SERVER_NAME, SQL_DATABASE, SQL_UID, and SQL_PWD.");
}

$databaseName = '{' . str_replace('}', '}}', $databaseName) . '}';
$uid = '{' . str_replace('}', '}}', $uid) . '}';
$pwd = '{' . str_replace('}', '}}', $pwd) . '}';
$connectionOptions = array(
    "Database" => $databaseName,
    "UID" => $uid,
    "PWD" => $pwd,
    "Encrypt" => 1,
    "TrustServerCertificate" => 0
);

function handle_failure($message) {
    error_log($message);
    http_response_code(500);
    echo "<h1>Failure</h1>";
    echo "An error occurred. Check the server error log for details.";
    exit(1);
}

function format_errors($errors) {
    $lines = [];
    foreach ($errors as $error) {
        $lines[] = "SQLSTATE: {$error['SQLSTATE']}, code: {$error['code']}, message: {$error['message']}";
    }
    return implode(PHP_EOL, $lines);
}

$conn = sqlsrv_connect($serverName, $connectionOptions);
if ($conn === false) {
    handle_failure(format_errors(sqlsrv_errors()));
}

$tsql = "SELECT @@Version AS SQL_VERSION";

$stmt = sqlsrv_query($conn, $tsql);
if ($stmt === false) {
    handle_failure(format_errors(sqlsrv_errors()));
}

$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
if ($row === null || $row === false) {
    handle_failure("Query returned no rows.");
}

echo "<h1>Success</h1>";
echo htmlspecialchars($row['SQL_VERSION']);

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>

PDO_SQLSRV 예시

<?php
$serverName = getenv('SQL_SERVER_NAME');
$databaseName = getenv('SQL_DATABASE');
$uid = getenv('SQL_UID');
$pwd = getenv('SQL_PWD');

if ($serverName === false || $serverName === ''
    || $databaseName === false || $databaseName === ''
    || $uid === false || $uid === ''
    || $pwd === false || $pwd === '') {
    handle_failure(new RuntimeException("Set SQL_SERVER_NAME, SQL_DATABASE, SQL_UID, and SQL_PWD."));
}

$databaseName = '{' . str_replace('}', '}}', $databaseName) . '}';
$uid = '{' . str_replace('}', '}}', $uid) . '}';
$pwd = '{' . str_replace('}', '}}', $pwd) . '}';

function handle_failure($exception) {
    error_log($exception->getMessage());
    http_response_code(500);
    echo "<h1>Failure</h1>";
    echo "An error occurred. Check the server error log for details.";
    exit(1);
}

try {
    $conn = new PDO(
        "sqlsrv:server=$serverName;Database=$databaseName;Encrypt=1;TrustServerCertificate=0",
        $uid,
        $pwd
    );
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $tsql = "SELECT @@Version AS SQL_VERSION";

    $stmt = $conn->query($tsql);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($row === false) {
        throw new RuntimeException("Query returned no rows.");
    }

    echo "<h1>Success</h1>";
    echo htmlspecialchars($row['SQL_VERSION']);
} catch (Throwable $exception) {
    handle_failure($exception);
}

unset($stmt);
unset($conn);
?>

macOS에서는 브라우저를 http://localhost/testsql.php로 설정하고, 그 외 환경에서는 http://localhost:8080/testsql.php로 설정하십시오. 성공적인 연결은 데이터베이스 서버의 버전 문자열을 표시합니다. 두 예시 모두 PHP 오류 로그에 오류 세부 정보를 기록합니다. 페이지에 오류가 표시되면 해당 로그를 확인하세요.

명령줄과 웹 서버 동작을 비교하려면 터미널 환경에 동일한 환경 변수를 설정하고 실행하세요:

php testsql.php

명령줄에서 실행이 성공했는데 브라우저에 아무것도 뜨지 않는다면, Apache 로그 파일을 확인하세요. 더 많은 도움을 원하시면 PHP SQL 드라이버에 대한 지원 자료를 참고하세요.

SQL Server, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Microsoft Fabric의 SQL 데이터베이스, 그리고 Microsoft Fabric의 Warehouse의 연결 프로그램을 각각 별도로 평가하세요. 선택한 인증 방법, 연결 옵션 및 쿼리는 대상에서 지원되어야 합니다. 설치는 클라이언트 측에서 이루어집니다. 성공적인 확장 검사가 대상이 자격 증명을 수락하거나 클라이언트를 신뢰하거나 모든 데이터베이스 기능을 지원한다는 것을 증명하지는 않습니다.

설치 문제 해결

증상 소유 레이어 정정 작업
PIE가 php-config, phpize 또는 헤더를 찾을 수 없습니다 PHP 개발 패키지 대상 PHP 버전의 개발 패키지를 설치하고 매칭 --with-php-config 옵션을 전달하세요
컴파일이 실패하는 이유는 C++ 컴파일러가 없기 때문입니다 운영 체제 빌드 도구 플랫폼용 C++ 컴파일러 패키지를 설치하세요. 예를 들어 g++ 또는 gcc-c++
컴파일이 sql.h을 찾을 수 없습니다 ODBC 개발 패키지 또는 컴파일러 경로 unixodbc-dev 또는 unixODBC-devel를 설치하세요; Apple 실리콘에서는 Homebrew include 및 라이브러리 플래그를 설정하세요
php --ri 확장 기능이 없다고 나옵니다 PHP 구성 로드된 php.ini 및 스캔 디렉터리를 확인하고 올바른 항목을 추가한 뒤 프로세스를 재시작하세요
PDO 보고 could not find driver PDO_SQLSRV 로딩 또는 PDO 로드 순서 먼저 PDO가 로드되고 PDO_SQLSRV가 나중에 검색되는 구성 파일을 사용하는지 확인하세요
CLI는 작동하지만 Apache, nginx, 또는 PHP-FPM은 실패합니다 SAPI 특화 구성 phpinfo()와 CLI 출력을 비교하고, 웹 SAPI를 설정한 후 재시작하세요.
브라우저는 nginx를 통해 HTTP 502를 반환합니다 nginx에서 PHP-FPM으로 라우팅 fastcgi_pass 소켓을 설치된 PHP-FPM 버전과 비교하고 서비스가 실행 중인지 확인하세요
브라우저 샘플은 누락된 환경 값을 보고합니다 웹 서버 또는 PHP-FPM 환경 선택한 웹 런타임의 변수를 설정한 후 그 웹 런타임을 재시작하세요
확장은 불러오지만 연결에 실패합니다 ODBC, 네트워크, 인증서, 인증, 또는 SQL 제품 서버 로그에서 SQLSTATE와 native 오류를 읽으세요; 오류가 로딩 또는 바이너리 호환성 문제를 식별하는 경우가 아니면 확장 기능을 다시 빌드하지 마세요

임시 테스트 구성 제거

검증 후:

  1. 문서 루트에서 verify-php-drivers.php, phpinfo() 및 임시 testsql.php 페이지를 삭제하세요.

  2. 임시 자격 증명과 환경 전달 항목을 제거하세요.

  3. systemd 오버라이드를 변경할 때 서비스 매니저를 다시 불러오고, PHP-FPM 또는 웹 서버를 재시작하세요.

  4. 애플리케이션이 요구하는 확장 항목과 설치된 패키지를 유지하세요.