찾다

 >  Q&A  >  본문

报错:"공지: 정의되지 않은 변수", "공지: 정의되지 않은 인덱스", "경고: 정의되지 않은 배열 키", 还有"공지: 정의되지 않은 오프셋" using PHP

PHP 스크립트를 실행하고 있는데 다음과 같은 오류가 계속 발생합니다.

공지: 정의되지 않은 변수: 10행 C:wampwwwmypathindex.php의 my_variable_name

공지: 정의되지 않은 인덱스: my_index C:wampwwwmypathindex.php 11번째 줄

경고: 11행의 C:wampwwwmypathindex.php에 정의되지 않은 배열 키 "my_index"

10행과 11행은 다음과 같습니다:

으아아아

이 오류 메시지는 무엇을 의미하나요?

왜 갑자기 나타나는 걸까요? 저는 이 스크립트를 몇 년 동안 사용해 왔지만 이전에는 아무런 문제도 없었습니다.

이 오류를 수정하는 방법은 무엇입니까?


P粉046878197P粉046878197494일 전874

모든 응답(2)나는 대답할 것이다

  • P粉116631591

    P粉1166315912023-07-21 10:56:23

    이것을 시도해 보세요

    으아악

    또는 빠르고 쉬운 해결책이 있습니다:

    으아악

    회신하다
    0
  • P粉722521204

    P粉7225212042023-07-21 09:48:50

    이 오류 메시지는 PHP 프로그래머가 존재하지 않는 변수(또는 배열 요소)에 액세스할 때 오타나 오류를 감지하는 데 도움을 주기 위한 것입니다. 따라서 좋은 프로그래머는 다음을 수행해야 합니다.

    1. 모든 변수 또는 배열 키를 사용하기 전에 정의했는지 확인하세요. 함수 내에서 변수를 사용해야 하는 경우 변수를 함수에 매개변수로 전달해야 합니다.
    2. 이 버그를 따르고 다른 버그와 마찬가지로 수정하세요. 이는 오타나 프로시저가 필요한 데이터를 반환하지 않음을 나타낼 수 있습니다.
    3. 프로그래머의 통제를 벗어난 드문 경우에만 이 오류를 피하기 위해 코드를 추가해야 합니다. 그러나 그것이 맹목적인 습관이 되어서는 안 됩니다.

    참고/경고: 정의되지 않은 변수

    PHP에서는 변수 선언이 필요하지 않지만 나중에 스크립트에서 사용할 변수에 값을 할당하는 것을 잊어버릴 수 있는 일부 보안 허점이나 버그를 피하기 위해 선언하는 것이 좋습니다. 변수가 선언되지 않으면 PHP는 E_WARNING 수준 오류를 발생시킵니다.

    이 경고는 프로그래머가 철자가 틀린 변수 이름이나 유사한 오류(예: 조건이 false로 평가될 때 변수에 값 할당)를 발견하는 데 도움이 됩니다. 또한 초기화되지 않은 변수에는 다른 문제가 있을 수 있습니다. PHP 매뉴얼에 명시된 바와 같이,

    즉, 변수는 포함된 파일에서 값을 얻을 수 있으며, 초기화되지 않은 변수에 액세스할 때 예상되는 null 값 대신 이 값이 사용되므로 예측할 수 없는 결과가 발생할 수 있습니다. 이를 방지하려면 PHP 파일의 모든 변수를 사용하기 전에 초기화하는 것이 좋습니다.

    이 문제를 해결하는 방법에는 여러 가지가 있습니다.

    1. 권장되는 접근 방식은 각 변수를 사용하기 전에 선언하는 것입니다. 이렇게 하면 실제로 실수를 해서 존재하지 않는 변수를 사용하려고 할 경우에만 이 오류가 표시됩니다. 이것이 바로 이 오류 메시지가 나타나는 이유입니다.

      으아악
    • 특별한 경우는 변수가 정의되었지만 함수에 표시되지 않는 경우입니다. PHP에서 함수에는 자체 변수 범위가 있습니다. 함수에서 외부 변수를 사용해야 하는 경우 해당 값을 함수의 매개 변수로 전달해야 합니다.

      으아악
    1. 널 병합 연산자를 사용하여 오류를 억제하세요. 하지만 이렇게 하면 PHP가 잘못된 변수 이름을 사용했다는 사실을 사용자에게 알릴 수 없다는 점을 기억하세요.

      으아악

      고대 PHP 버전(< 7.0)의 경우 삼항이 포함된 isset()을 사용할 수 있습니다

      으아악

      이 기능은 본질적으로 오류 억제이지만 특정 오류에만 작동한다는 점에 유의하세요. 따라서 변수를 초기화되지 않은 것으로 표시하여 PHP가 도움을 주지 못하게 할 수 있습니다.

    2. 오류를 억제하려면 @ 연산자를 사용하세요. 역사적인 이유로 여기에 보관되어 있지만, 엄밀히 말하면 이런 일은 일어나지 말았어야 했습니다.

    참고: 첫 번째 사항만 구현하는 것이 좋습니다.

    참고: 정의되지 않은 인덱스/정의되지 않은 오프셋/경고: 정의되지 않은 배열 키

    이 팁/경고는 사용자(또는 PHP)가 정의되지 않은 배열 인덱스에 액세스하려고 할 때 나타납니다.

    내부 어레이

    내부 배열, 즉 코드에 정의된 배열을 다룰 때도 정확히 동일한 태도를 취해야 합니다. 사용하기 전에 모든 키를 초기화하세요. 이렇게 하면 오류가 의도한 작업을 수행할 수 있습니다. 즉, 코드의 오류를 프로그래머에게 알릴 수 있습니다. 따라서 접근 방식은 동일합니다.

    제안: 배열 요소 선언:

    으아아아

    특별한 경우는 함수가 배열이나 null 또는 false와 같은 다른 값을 반환하는 경우입니다. 배열 요소에 액세스하기 전에 다음과 같은 테스트를 수행해야 합니다.

    으아아아

    외부 어레이

    외부 배열(예: $_POST/$_GET/$_SESSION 또는 JSON 입력)의 경우 프로그래머가 이러한 배열의 내용을 제어할 수 없으므로 상황이 다릅니다. 따라서 특정 키가 존재하는지 확인하거나 누락된 키에 기본값을 할당하는 것이 합리적입니다.

    • PHP 스크립트에 HTML 양식이 포함되어 있으면 당연히 처음 로드할 때 양식 콘텐츠가 없습니다. 따라서 이러한 스크립트는 양식이 제출되었는지 확인해야 합니다.

      으아아아
    • 체크박스와 같은 일부 HTML 양식 요소는 선택하지 않으면 서버로 전송되지 않습니다. 이 경우 null 병합 연산자를 사용하여 기본값을 할당하는 것이 합리적입니다.

      으아아아
    • 선택적 쿼리 문자열 요소 또는 쿠키는 동일한 방식으로 처리되어야 합니다.

      으아아아

    단, 할당은 스크립트 맨 처음부터 해야 합니다. 모든 입력의 유효성을 검사하고 이를 로컬 변수에 할당한 다음 코드 전체에서 사용하세요. 이렇게 하면 액세스하는 모든 변수가 의도적으로 존재하게 됩니다.

    회신하다
    1
  • 취소회신하다