PHP 스크립트를 실행하고 있는데 다음과 같은 오류가 계속 발생합니다.
공지: 정의되지 않은 변수: 10행 C:wampwwwmypathindex.php의 my_variable_name
공지: 정의되지 않은 인덱스: my_index C:wampwwwmypathindex.php 11번째 줄
경고: 11행의 C:wampwwwmypathindex.php에 정의되지 않은 배열 키 "my_index"
10행과 11행은 다음과 같습니다:
으아아아이 오류 메시지는 무엇을 의미하나요?
왜 갑자기 나타나는 걸까요? 저는 이 스크립트를 몇 년 동안 사용해 왔지만 이전에는 아무런 문제도 없었습니다.
이 오류를 수정하는 방법은 무엇입니까?
이것을 시도해 보세요
으아악또는 빠르고 쉬운 해결책이 있습니다:
으아악이 오류 메시지는 PHP 프로그래머가 존재하지 않는 변수(또는 배열 요소)에 액세스할 때 오타나 오류를 감지하는 데 도움을 주기 위한 것입니다. 따라서 좋은 프로그래머는 다음을 수행해야 합니다.
참고/경고: 정의되지 않은 변수
PHP에서는 변수 선언이 필요하지 않지만 나중에 스크립트에서 사용할 변수에 값을 할당하는 것을 잊어버릴 수 있는 일부 보안 허점이나 버그를 피하기 위해 선언하는 것이 좋습니다. 변수가 선언되지 않으면 PHP는 E_WARNING 수준 오류를 발생시킵니다.
이 경고는 프로그래머가 철자가 틀린 변수 이름이나 유사한 오류(예: 조건이 false로 평가될 때 변수에 값 할당)를 발견하는 데 도움이 됩니다. 또한 초기화되지 않은 변수에는 다른 문제가 있을 수 있습니다. PHP 매뉴얼에 명시된 바와 같이,
즉, 변수는 포함된 파일에서 값을 얻을 수 있으며, 초기화되지 않은 변수에 액세스할 때 예상되는 null 값 대신 이 값이 사용되므로 예측할 수 없는 결과가 발생할 수 있습니다. 이를 방지하려면 PHP 파일의 모든 변수를 사용하기 전에 초기화하는 것이 좋습니다.
이 문제를 해결하는 방법에는 여러 가지가 있습니다.
권장되는 접근 방식은 각 변수를 사용하기 전에 선언하는 것입니다. 이렇게 하면 실제로 실수를 해서 존재하지 않는 변수를 사용하려고 할 경우에만 이 오류가 표시됩니다. 이것이 바로 이 오류 메시지가 나타나는 이유입니다.
으아악특별한 경우는 변수가 정의되었지만 함수에 표시되지 않는 경우입니다. PHP에서 함수에는 자체 변수 범위가 있습니다. 함수에서 외부 변수를 사용해야 하는 경우 해당 값을 함수의 매개 변수로 전달해야 합니다.
으아악널 병합 연산자를 사용하여 오류를 억제하세요. 하지만 이렇게 하면 PHP가 잘못된 변수 이름을 사용했다는 사실을 사용자에게 알릴 수 없다는 점을 기억하세요.
으아악고대 PHP 버전(< 7.0)의 경우 삼항이 포함된 isset()을 사용할 수 있습니다
으아악이 기능은 본질적으로 오류 억제이지만 특정 오류에만 작동한다는 점에 유의하세요. 따라서 변수를 초기화되지 않은 것으로 표시하여 PHP가 도움을 주지 못하게 할 수 있습니다.
오류를 억제하려면 @ 연산자를 사용하세요. 역사적인 이유로 여기에 보관되어 있지만, 엄밀히 말하면 이런 일은 일어나지 말았어야 했습니다.
참고: 첫 번째 사항만 구현하는 것이 좋습니다.
참고: 정의되지 않은 인덱스/정의되지 않은 오프셋/경고: 정의되지 않은 배열 키
이 팁/경고는 사용자(또는 PHP)가 정의되지 않은 배열 인덱스에 액세스하려고 할 때 나타납니다.
내부 어레이
내부 배열, 즉 코드에 정의된 배열을 다룰 때도 정확히 동일한 태도를 취해야 합니다. 사용하기 전에 모든 키를 초기화하세요. 이렇게 하면 오류가 의도한 작업을 수행할 수 있습니다. 즉, 코드의 오류를 프로그래머에게 알릴 수 있습니다. 따라서 접근 방식은 동일합니다.
제안: 배열 요소 선언:
으아아아특별한 경우는 함수가 배열이나 null 또는 false와 같은 다른 값을 반환하는 경우입니다. 배열 요소에 액세스하기 전에 다음과 같은 테스트를 수행해야 합니다.
으아아아외부 어레이
외부 배열(예: $_POST/$_GET/$_SESSION 또는 JSON 입력)의 경우 프로그래머가 이러한 배열의 내용을 제어할 수 없으므로 상황이 다릅니다. 따라서 특정 키가 존재하는지 확인하거나 누락된 키에 기본값을 할당하는 것이 합리적입니다.
PHP 스크립트에 HTML 양식이 포함되어 있으면 당연히 처음 로드할 때 양식 콘텐츠가 없습니다. 따라서 이러한 스크립트는 양식이 제출되었는지 확인해야 합니다.
으아아아체크박스와 같은 일부 HTML 양식 요소는 선택하지 않으면 서버로 전송되지 않습니다. 이 경우 null 병합 연산자를 사용하여 기본값을 할당하는 것이 합리적입니다.
으아아아선택적 쿼리 문자열 요소 또는 쿠키는 동일한 방식으로 처리되어야 합니다.
으아아아단, 할당은 스크립트 맨 처음부터 해야 합니다. 모든 입력의 유효성을 검사하고 이를 로컬 변수에 할당한 다음 코드 전체에서 사용하세요. 이렇게 하면 액세스하는 모든 변수가 의도적으로 존재하게 됩니다.