PHP는 웹 개발에 널리 사용되는 강력한 스크립트 언어이지만 다른 언어와 마찬가지로 디버그하기 어려울 수 있는 오류가 발생하기 쉽습니다. 일부 오류는 간단하고 수정하기 쉽지만 일부 오류는 좀 더 복잡할 수 있습니다. 이 문서에서는 가장 일반적인 PHP 오류를 다루고 이러한 오류를 신속하게 해결하는 데 도움이 되는 솔루션을 제공합니다.
PHP 인터프리터가 예상 구조와 일치하지 않는 코드를 발견하면 구문 오류가 발생합니다. 이는 가장 기본적인 오류 유형이며 구문 오류, 예상치 못한 토큰 메시지 등 무서운 구문 분석 오류가 발생하는 경우가 많습니다.
echo "Hello World" // Missing semicolon
코드에 구두점이 누락되었거나 추가되었는지 다시 확인하세요. 열고 닫는 괄호, 대괄호, 따옴표가 모두 일치하는지 확인하세요.
echo "Hello World"; // Fixed
초기화되지 않은 변수를 사용하려고 하면 "정의되지 않은 변수" 오류가 발생합니다. 이 경우 PHP는 주의: 정의되지 않은 변수 오류를 발생시킵니다.
echo $username; // Undefined variable
코드에서 변수를 사용하기 전에 변수가 초기화되었는지 확인하세요. isset()을 사용하여 변수가 설정되었는지 확인하여 이 알림을 억제할 수도 있습니다.
if (isset($username)) { echo $username; } else { echo "No username provided"; }
이 오류는 정의되지 않은 함수를 호출하려고 할 때 발생합니다. 함수 이름의 철자를 잘못 입력했거나 함수가 포함된 필수 파일을 포함하는 것을 잊었기 때문에 발생할 수 있습니다.
myFunction(); // Undefined function
함수가 스크립트에 올바르게 정의되었거나 포함되어 있는지 확인하세요. 그리고, 함수명에 오타가 있는지 확인해보세요.
function myFunction() { echo "Hello World!"; } myFunction(); // Fixed
이 오류는 출력이 이미 브라우저에 전송된 후 PHP가 헤더(예: header() 또는 setcookie() 사용)를 수정하려고 시도할 때 발생합니다. 오류 메시지는 일반적으로 다음과 같습니다. 경고: 헤더 정보를 수정할 수 없습니다. 헤더는 이미 다음에서 전송되었습니다...
echo "Some output"; header("Location: /newpage.php"); // Causes error because output was already sent
header() 함수가 호출되기 전에 출력(공백 또는 BOM 포함)이 전송되지 않는지 확인하세요. 사용자를 리디렉션해야 하는 경우 출력이 생성되기 전에 header()가 호출되는지 확인하세요.
header("Location: /newpage.php"); // This must appear before any echo or print statements exit();
권한 오류는 PHP 스크립트에 파일이나 디렉터리에 액세스할 수 있는 적절한 읽기 또는 쓰기 권한이 없을 때 발생합니다. 경고: fopen(/path/to/file): 스트림을 열지 못했습니다: 권한이 거부되었습니다.
와 같은 오류가 표시될 수 있습니다.파일 및 디렉터리 권한을 확인하세요. 일반적으로 웹 서버 사용자는 파일에 대한 읽기 권한과 업로드 또는 파일 조작이 발생하는 디렉터리에 대한 쓰기 권한이 있어야 합니다. 권한을 조정하려면 다음 명령을 사용하십시오.
chmod 755 /path/to/directory chmod 644 /path/to/file
참고: 지나치게 권한을 부여하는 설정은 보안 위험을 초래할 수 있으므로 권한을 설정할 때 주의하세요.
PHP에 할당된 메모리가 부족해지면 치명적인 오류: 허용된 메모리 크기 X 바이트가 소진되었습니다.라는 오류가 표시됩니다. 이는 스크립트가 php.ini에 설정된 제한보다 더 많은 메모리를 사용할 때 발생합니다.
PHP 스크립트에 다음 줄을 추가하여 일시적으로 메모리 제한을 늘릴 수 있습니다.
ini_set('memory_limit', '256M'); // Adjust as needed
또는 php.ini 파일에서 메모리 제한을 영구적으로 늘릴 수 있습니다:
memory_limit = 256M
가능한 경우 메모리 사용량을 줄이려면 코드를 최적화하세요.
MySQL 데이터베이스 연결이 때때로 실패하여 치명적인 오류: Uncaught mysqli_sql_Exception: 'username'@'localhost' 사용자에 대한 액세스가 거부되었습니다.
사용자 자격 증명이 올바른지, MySQL 서버가 실행 중인지 확인하세요. 또한 적절한 연결 기능을 사용하십시오. mysqli_connect():
를 사용한 올바른 예는 다음과 같습니다.
$mysqli = new mysqli('localhost', 'username', 'password', 'database'); if ($mysqli->connect_error) { die("Connection failed: " . $mysqli->connect_error); }
잘못된 설정이나 파일 크기 제한으로 인해 파일 업로드가 실패하는 경우가 많습니다. UPLOAD_ERR_INI_SIZE 또는 UPLOAD_ERR_FORM_SIZE와 같은 오류가 발생할 수 있습니다.
필요에 따라 다음 php.ini 설정을 확인하고 조정합니다.
file_uploads = On upload_max_filesize = 10M post_max_size = 12M
또한 양식 태그에 올바른 enctype 속성이 있는지 확인하세요.
이 알림은 존재하지 않는 배열 요소에 액세스하려고 할 때 발생하며 알림: 정의되지 않은 인덱스 또는 알림: 정의되지 않은 오프셋 오류가 발생합니다.
echo $_POST['username']; // Undefined index if 'username' is not in the form data
액세스를 시도하기 전에 배열 키가 존재하는지 항상 확인하세요. 이 오류를 방지하려면 isset() 또는 array_key_exists()를 사용하세요.
if (isset($_POST['username'])) { echo $_POST['username']; } else { echo "Username not provided."; }
PHP에서는 제대로 정의되지 않았거나 포함되지 않은 클래스를 인스턴스화하려고 하면 치명적인 오류: 'ClassName' 클래스를 찾을 수 없음 오류가 발생합니다.
require() 또는 include()를 사용하여 클래스가 포함된 파일이 포함되어 있는지 확인하세요. 또는 PHP의 spl_autoload_register() 함수를 사용하여 클래스 파일을 자동으로 로드할 수 있습니다.
spl_autoload_register(function ($class_name) { include $class_name . '.php'; }); $object = new ClassName();
PHP 스크립트를 실행하는 데 너무 오랜 시간이 걸리면 치명적인 오류: 최대 실행 시간 X초를 초과했습니다. 오류가 발생할 수 있습니다. 이는 일반적으로 대규모 데이터세트나 외부 API 호출을 작업할 때 발생합니다.
다음을 사용하여 일시적으로 최대 실행 시간을 늘릴 수 있습니다.
set_time_limit(300); // Extends to 300 seconds (5 minutes)
전역적으로 설정하려면 php.ini 파일에서 max_execution_time 지시어를 조정하세요:
max_execution_time = 300
PHP 오류는 피할 수 없지만 가장 일반적인 오류를 해결하는 방법을 알면 디버깅 시간을 많이 절약할 수 있습니다. 구문 문제, 데이터베이스 연결 문제, 파일 권한 오류 등 무엇이든 근본 원인과 해결 방법을 이해하는 것이 능숙한 PHP 개발자가 되는 열쇠입니다.
이 도움말의 지침을 따르면 이러한 문제를 효과적으로 식별하고 해결할 수 있습니다. 이러한 오류를 조기에 포착하고 보다 원활한 코딩을 보장하려면 개발 중에 오류 보고를 활성화하세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3