PHP 확장 모듈이 설치되지 않아 발생하는 오류들과 해결책을 알아보겠습니다. 주요 확장 모듈의 설치 및 확인 방법을 다룹니다.
문제: 어떤 확장 모듈이 설치되어 있는지 파악하지 못함
<?php
// 모든 로드된 확장 모듈 확인
echo "<h3>설치된 PHP 확장 모듈</h3>";
$extensions = get_loaded_extensions();
sort($extensions);
foreach ($extensions as $extension) {
echo "✓ $extension<br>";
}
// 특정 확장 모듈 확인 함수
function checkExtension($extension_name) {
if (extension_loaded($extension_name)) {
echo "✓ $extension_name: 설치됨<br>";
return true;
} else {
echo "✗ $extension_name: 미설치<br>";
return false;
}
}
echo "<h3>주요 확장 모듈 상태</h3>";
$required_extensions = ['pdo', 'pdo_mysql', 'mysqli', 'gd', 'curl', 'mbstring', 'openssl', 'zip'];
foreach ($required_extensions as $ext) {
checkExtension($ext);
}
// PHP 설정 정보
echo "<h3>PHP 정보</h3>";
echo "PHP 버전: " . PHP_VERSION . "<br>";
echo "설정 파일: " . php_ini_loaded_file() . "<br>";
?>
# CLI에서 확장 모듈 확인
php -m
# 특정 확장 모듈 확인
php -m | grep -i mysql
문제: MySQL, PostgreSQL 등 데이터베이스 연결 확장 모듈 부족
# Ubuntu/Debian - MySQL 관련 확장
sudo apt update
sudo apt install php-mysql php-pdo
# PostgreSQL 확장
sudo apt install php-pgsql
# SQLite 확장
sudo apt install php-sqlite3
# CentOS/RHEL
sudo yum install php-mysql php-pdo
<?php
// 데이터베이스 확장 모듈 확인
function checkDatabaseExtensions() {
$db_extensions = [
'pdo' => 'PDO (PHP Data Objects)',
'pdo_mysql' => 'MySQL PDO Driver',
'pdo_pgsql' => 'PostgreSQL PDO Driver',
'pdo_sqlite' => 'SQLite PDO Driver',
'mysqli' => 'MySQL Improved Extension'
];
echo "<h3>데이터베이스 확장 모듈 상태</h3>";
foreach ($db_extensions as $ext => $description) {
if (extension_loaded($ext)) {
echo "✓ $ext ($description)<br>";
} else {
echo "✗ $ext ($description) - 미설치<br>";
}
}
}
checkDatabaseExtensions();
// PDO 드라이버 확인
if (extension_loaded('pdo')) {
echo "<h4>사용 가능한 PDO 드라이버</h4>";
$drivers = PDO::getAvailableDrivers();
foreach ($drivers as $driver) {
echo "- $driver<br>";
}
}
?>
문제: 이미지 처리, 파일 압축 등의 기능을 위한 확장 모듈 부족
# 이미지 처리 확장 (GD)
sudo apt install php-gd
# ImageMagick 확장
sudo apt install php-imagick
# 파일 압축 확장
sudo apt install php-zip
# 파일 업로드 관련
sudo apt install php-fileinfo
# 웹서버 재시작
sudo systemctl restart apache2
<?php
// 이미지 및 파일 처리 확장 확인
function checkImageExtensions() {
$extensions = [
'gd' => 'GD Graphics Library',
'imagick' => 'ImageMagick',
'exif' => 'EXIF 데이터 읽기',
'fileinfo' => '파일 타입 감지',
'zip' => 'ZIP 압축',
'zlib' => 'ZLIB 압축'
];
echo "<h3>이미지/파일 처리 확장 모듈</h3>";
foreach ($extensions as $ext => $description) {
if (extension_loaded($ext)) {
echo "✓ $ext ($description)<br>";
// GD 세부 정보
if ($ext === 'gd' && function_exists('gd_info')) {
$gd_info = gd_info();
echo " - JPEG: " . ($gd_info['JPEG Support'] ? '지원' : '미지원') . "<br>";
echo " - PNG: " . ($gd_info['PNG Support'] ? '지원' : '미지원') . "<br>";
echo " - GIF: " . ($gd_info['GIF Read Support'] ? '지원' : '미지원') . "<br>";
}
} else {
echo "✗ $ext ($description) - 미설치<br>";
}
}
}
checkImageExtensions();
// 업로드 설정 확인
echo "<h3>파일 업로드 설정</h3>";
echo "최대 업로드 크기: " . ini_get('upload_max_filesize') . "<br>";
echo "최대 POST 크기: " . ini_get('post_max_size') . "<br>";
echo "메모리 제한: " . ini_get('memory_limit') . "<br>";
?>
문제: HTTP 요청, SSL, 암호화 등을 위한 확장 모듈 부족
# cURL 확장
sudo apt install php-curl
# OpenSSL 확장
sudo apt install php-openssl
# 멀티바이트 문자열 처리
sudo apt install php-mbstring
# JSON 처리
sudo apt install php-json
# XML 처리
sudo apt install php-xml
<?php
// 네트워크 및 보안 확장 확인
function checkNetworkExtensions() {
$extensions = [
'curl' => 'cURL (HTTP 클라이언트)',
'openssl' => 'OpenSSL (암호화)',
'mbstring' => '멀티바이트 문자열',
'json' => 'JSON 처리',
'xml' => 'XML 처리',
'hash' => '해시 함수',
'filter' => '데이터 필터링'
];
echo "<h3>네트워크/보안 확장 모듈</h3>";
foreach ($extensions as $ext => $description) {
if (extension_loaded($ext)) {
echo "✓ $ext ($description)<br>";
// cURL 세부 정보
if ($ext === 'curl' && function_exists('curl_version')) {
$curl_info = curl_version();
echo " - 버전: " . $curl_info['version'] . "<br>";
echo " - SSL: " . $curl_info['ssl_version'] . "<br>";
}
} else {
echo "✗ $ext ($description) - 미설치<br>";
}
}
}
checkNetworkExtensions();
// 암호화 함수 확인
echo "<h3>사용 가능한 해시 알고리즘</h3>";
if (function_exists('hash_algos')) {
$algos = hash_algos();
$common_algos = ['md5', 'sha1', 'sha256', 'sha512'];
foreach ($common_algos as $algo) {
if (in_array($algo, $algos)) {
echo "✓ $algo<br>";
} else {
echo "✗ $algo<br>";
}
}
}
?>
문제: 패키지 매니저로 설치되지 않는 확장 모듈이나 사용자 정의 설정
# PECL을 통한 확장 설치
sudo pecl install redis
sudo pecl install mongodb
sudo pecl install xdebug
; Redis 확장 활성화
extension=redis
; MongoDB 확장 활성화
extension=mongodb
; Xdebug 확장 (개발 환경만)
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
<?php
class ExtensionManager {
public static function checkRequired($extensions) {
$missing = [];
foreach ($extensions as $extension) {
if (!extension_loaded($extension)) {
$missing[] = $extension;
}
}
return $missing;
}
public static function generateInstallCommands($missing_extensions) {
$commands = [];
$extension_packages = [
'mysql' => 'php-mysql',
'pdo_mysql' => 'php-mysql',
'mysqli' => 'php-mysql',
'gd' => 'php-gd',
'curl' => 'php-curl',
'mbstring' => 'php-mbstring',
'zip' => 'php-zip',
'xml' => 'php-xml',
'json' => 'php-json',
'openssl' => 'php-openssl'
];
foreach ($missing_extensions as $ext) {
if (isset($extension_packages[$ext])) {
$commands[] = "sudo apt install " . $extension_packages[$ext];
} else {
$commands[] = "sudo pecl install $ext";
}
}
return $commands;
}
public static function diagnose() {
$required = ['pdo', 'mbstring', 'openssl', 'curl', 'json'];
$recommended = ['gd', 'zip', 'xml', 'fileinfo'];
echo "<h3>확장 모듈 진단</h3>";
$missing_required = self::checkRequired($required);
$missing_recommended = self::checkRequired($recommended);
if (empty($missing_required) && empty($missing_recommended)) {
echo "✓ 모든 필수 및 권장 확장 모듈이 설치되어 있습니다.<br>";
} else {
if (!empty($missing_required)) {
echo "<h4>❌ 누락된 필수 확장 모듈</h4>";
foreach ($missing_required as $ext) {
echo "- $ext<br>";
}
echo "<h4>설치 명령어</h4>";
$commands = self::generateInstallCommands($missing_required);
foreach ($commands as $cmd) {
echo "<code>$cmd</code><br>";
}
}
if (!empty($missing_recommended)) {
echo "<h4>⚠️ 누락된 권장 확장 모듈</h4>";
foreach ($missing_recommended as $ext) {
echo "- $ext<br>";
}
}
}
}
}
// 진단 실행
ExtensionManager::diagnose();
?>