PHP 구문 분석/구문 오류 및 해결 방법
P粉633075725
P粉633075725 2023-08-23 16:16:57
0
2
678
<p>누구나 문법 오류가 발생합니다. 숙련된 프로그래머라도 실수를 합니다. 신규 이민자에게 이는 학습 과정의 일부일 뿐입니다. 그러나 오류 메시지는 일반적으로 해석하기 쉽습니다. 예: </p> <인용문> <p>PHP 구문 분석 오류: 구문 오류, index.php 라인 20의 예상치 못한 '{'</p> </인용문> <p>예상치 못한 기호가 항상 실제 원인은 아닙니다. 그러나 줄 번호는 어디에서 시작해야 할지 대략적인 아이디어를 제공합니다. </p> <인용문> <p>항상 <strong>코드 컨텍스트</strong>를 살펴보세요. 구문 오류는 <strong>코드의 앞선 줄</strong>에 언급된 <em>에 숨겨져 있는 경우가 많습니다. 코드를 매뉴얼의 구문 예제와 비교하세요. </p> </인용문> <p>모든 경우가 서로 일치하는 것은 아닙니다. 그러나 <strong>구문 오류 해결</strong>을 위한 몇 가지 일반적인 단계가 있습니다.이 참조 자료에는 일반적인 함정이 요약되어 있습니다. </p>
    <li><p>예상치 못한 T_STRING</p> </li>
  • 예기치 않은 T_VARIABLE

    예기치 않은 '$varname'(T_VARIABLE)

    </li>
  • 예기치 않은 T_CONSTANT_ENCAPSED_STRING

    예기치 않은 T_ENCAPSED_AND_WHITESPACE

    </li> <li><p>예상치 못한 $end</p> </li> <li><p>예상치 못한 T_FUNCTION...</p> </li>
  • 예기치 못한{

    예기치 못한}

    예기치 못한 (</code></p><p>예기치 않은<code>)</code></p> </li>

  • 예기치 못한[

    예기치 못한]

    </li>
  • 예기치 않은 T_IF

    예상치 못한 T_FOREACH

    예상치 못한 T_FOR

    예상치 못한 T_WHILE < p> 예상치 못한 T_DO

    <p> 예상치 못한 T_PRINT

    예상치 못한 T_ECHO

    </li> <li><p>예기치 않은 T_LNUMBER</p> </li> <li><p>사고?</p> </li> <li><p>예기치 않은 연속(T_CONTINUE)

    <p>예기치 못한 연속(T_break)

    <p>예기치 못한 연속(T_RETURN)

    </li> <li><p>예상치 못한 일입니다. "="</p> </li> <li><p>예상치 못한 T_INLINE_HTML…</p> </li> <li><p>예상치 못한 T_THIS_IS_THE_THING...</p> </li> <li><p>예상치 못한 T_OBJECT_OPERATOR...</p> </li> <li><p>예상치 못한 T_DOUBLE_ARROW...</p> </li> <li><p>예상치 못한 T_SL...</p> </li> 예상치 못한 T_BOOLEAN_OR... </p><p> 예상치 못한 T_BOOLEAN_AND…</p> </li>
  • 예상치 못한 T_IS_EQUAL

    예상치 못한 T_IS_GREATER_OR_EQUAL

    예상치 못한 T_IS_IDENTICAL </p><p> 예상치 못한 T_IS_NOT_EQUAL

    예상치 못한 T_IS_NOT_IDENTICAL

    예상치 못한 T_IS_SMALLER_OR_EQUAL

    예상치 못한 <code><</code</p><p> 예상치 못한 <code>></code></p> </li> <li><p>예기치 않은 T_NS_SEPARATOR...</p> </li> <li><p>입력에 예상치 못한 문자가 있습니다: '<code></code>' (ASCII=92) state=1</p> </li>

  • 예기치 않은 '공개'(T_PUBLIC)

    <p>예기치 않은 '비공개'(T_PRIVATE) </p><p>예기치 않은 '보호됨'(T_PROTECTED) ) < /p><p>예상치 못한 'T_FINAL'...</p> </li> <li><p>예상치 못한 T_STATIC...</p> </li> <li><p>예상치 못한 T_CLASS…</p> </li> <li><p>예기치 않은 '사용'(T_USE)</p> </li> <li><p>예상치 못한 T_DNUMBER</p> </li>
  • 예기치 않은 , (쉼표)

    </li> <li><p>예기치 않은<코드>. (마침표)

    </li> <li><p>예기치 않은 <code></code><em>(세미콜론)</em></p> </li>
  • 예기치 않은*(별표)

    </li> <li><p>예기치 않은<코드>: </code><em>(콜론)</em></p> </li> <li><p>예기치 않은 ':', 예상되는 ',' 또는 ')'</p> </li> <li><p>예기치 않은<code>&</code>(호출 시 참조로 전달됨)</p> </li> <li><p>예기치 않은<코드>. </code></p> </li> </ul> <p>관련 참고자료:</p>
      <li>PHP에서 이 오류는 무엇을 의미하나요? (런타임 에러)
        <li>구문 분석 오류: 구문 오류, 예상치 못한 T_XXX</li> <li>구문 분석 오류: 구문 오류, 예상치 못한 T_ENCAPSED_AND_WHITESPACE</li> <li>구문 분석 오류: 구문 오류, 예상치 못한 T_VARIABLE</li> </ul> </li> <li>PHP에서 이 기호는 무엇을 의미하나요? (언어 태그)</li>
      • 이러한""smart'' 인용문은 PHP에 아무런 의미가 없습니다
      • </ul> <p>또한:</p>
          <li>php.net의 PHP 매뉴얼과 다양한 언어 태그</li> <li>또는 Wikipedia의 PHP 구문 소개입니다. </li> <li>마지막으로 <strong>php</strong> 태그 위키가 있습니다. </li> </ul> <p>Stack Overflow는 초보 프로그래머를 환영하지만 주로 전문적인 프로그래밍 질문에 맞춰져 있습니다. </p>
            <li>주로 주제에서 벗어난 것으로 간주되는 모든 사람의 코딩 오류와 좁은 철자 오류에 답변하세요. </li> <li>따라서 구문 수정 요청을 게시하기 전에 시간을 내어 기본 단계를 따르시기 바랍니다. </li> <li>그래도 이 작업을 수행해야 한다면 자신의 해결 방법, 수정 시도, 오류로 보이는 부분이나 오류일 수 있는 부분에 대한 사고 과정을 보여주세요.</li> </ul> <p><em>브라우저</em>에 "SyntaxError: 불법 문자"와 같은 오류 메시지가 표시되면 이는 실제로 PHP와 관련된 것이 아니라 자바스크립트 구문 오류입니다. </p> <시간 />

            , PHP 버전으로 인해 호환되지 않을 수 있으므로 플랫폼 설정과 비교하여 공급업체의 요구 사항을 확인하세요. </p>

P粉633075725
P粉633075725

모든 응답(2)
P粉639667504

제 생각엔 이 주제가 완전히 논의가 너무 지나쳤거나 너무 복잡하다고 생각합니다. IDE를 사용하면 구문 오류를 완전히 피할 수 있습니다. IDE 없이 작업하는 것은 비전문적이라고 말하고 싶습니다. 왜? 최신 IDE는 사용자가 입력하는 모든 문자 후에 구문을 확인하기 때문입니다. 코딩 중 전체 줄이 빨간색으로 바뀌고 큰 경고 알림에 구문 오류의 정확한 유형과 정확한 위치가 표시되면 다른 솔루션을 검색할 필요가 전혀 없습니다.

구문 검사 IDE를 사용한다는 것은 다음을 의미합니다:

입력할 때 문법 오류가 올바르게 표시되므로 문법 오류가 (효과적으로) 다시는 발생하지 않습니다. 솔직히.

구문 검사 기능이 있는 훌륭한 IDE(모두 Linux, Windows 및 Mac에서 사용 가능):

  1. NetBeans [무료]
  2. PHPStorm [$199]
  3. EclipsePHP 플러그인 [무료]
  4. Sublime [$80] (주로 텍스트 편집기이지만 PHP Grammar Parser와 같은 플러그인으로 확장 가능)
P粉068510991

문법 오류란 무엇인가요?

PHP는 C 스타일명령형 프로그래밍 언어에 속합니다. 잘못 배치된 기호나 식별자가 발견되면 복구할 수 없는 엄격한 구문 규칙이 있습니다. 코딩 의도를 추측할 수 없습니다.

가장 중요한 팁

항상 취할 수 있는 몇 가지 기본적인 예방 조치는 다음과 같습니다.

  • 적절한 코드 들여쓰기를 사용하거나 고급 코딩 스타일을 채택하세요. 가독성은 불규칙성을 방지합니다.

  • 구문 강조와 함께 IDE또는 PHP용 편집기를 사용하세요. 이는 브래킷/브래킷 균형에도 도움이 됩니다.

  • 설명서의 언어 참조와 예제를 읽어보세요. 두 번 지나면 능숙해집니다.

파서 오류 해석 방법

일반적인 구문 오류 메시지는 다음과 같습니다.

여기에는 가능한 문법적 오류가 나열되어 있습니다. 언급된 filenamelinenumber을 참조하세요.

A T_STRING이름 은 파서/태거로 구문 분석할 수 없는 기호의 최종 처리를 설명합니다. 그러나 이것이 반드시 구문 오류의 원인은 아닙니다.

이전 코드 줄을 살펴보는 것도 중요합니다. 종종 구문 오류는 이전에 발생한 사고일 뿐입니다. 오류 줄 번호는 파서가 최종적으로 모든 처리를 포기하는 지점입니다.

문법 오류 수정

문법 문제를 좁히고 수정하는 방법에는 여러 가지가 있습니다.

  • 언급된 소스 파일을 엽니다. 언급된 코드 줄을 확인하세요.

    • 폭주 문자열과 잘못된 연산자가 있는 경우 일반적으로 여기에서 범인을 찾을 수 있습니다.

    • 왼쪽에서 오른쪽으로 줄을 읽고 각 기호의 역할을 상상해 보세요.

  • 또한 이전 줄을 더 자주 확인해야 합니다.

    • 구체적으로 이전 줄의 끝/문에 ; 세미콜론이 누락되었습니다. (적어도 스타일 관점에서는요.)

    • {代码块}이 닫혀 있지 않거나 올바르게 중첩되지 않은 경우 소스 코드를 추가로 조사해야 할 수도 있습니다. 단순화하려면 적절한 코드 들여쓰기를 사용하세요.

  • 문법 색칠하기를 확인해 보세요!

    • 문자열, 변수, 상수는 모두 색상이 달라야 합니다.

    • 연산자+-*/.도 다르게 색칠되어야 합니다. 그렇지 않으면 잘못된 환경에 있을 수 있습니다.

    • 문자열 색상이 너무 멀거나 너무 짧다면, 이스케이프되지 않거나 누락된 엔딩 "' 문자열 마커를 발견한 것입니다.

    • 같은 색상의 두 개의 인접한 구두점도 문제를 의미할 수 있습니다. 일반적으로 연산자 뒤에 ++-- 또는 괄호가 없으면 단독 연산자입니다. 대부분의 경우 직접 연결된 두 개의 문자열/식별자는 올바르지 않습니다.

  • 빈 공간은 친구입니다. 어떤코딩 스타일도 따르세요.

  • 긴 대기열을 일시적으로 중단하세요.

    • 연산자 또는 상수와 문자열 사이에 자유롭게 줄바꿈을 추가할 수 있습니다. 그런 다음 파서는 오류를 구문 분석한 줄 번호를 외부화합니다. 매우 장황한 코드를 보는 대신 누락되거나 잘못 배치된 구문 기호를 분리할 수 있습니다.

    • 복잡한 if 语句拆分为不同的或嵌套的 if 조건을 변환합니다.

    • 긴 수학 공식이나 논리 체인을 사용하는 대신 임시 변수를 사용하여 코드를 단순화하세요. (가독성이 높을수록 오류가 줄어듭니다.)

    • 다음 사이에 줄 바꿈 추가:

      1. 올바른 코드를 쉽게 식별할 수 있습니다.
      2. 잘 모르시는 부분,
      3. 그리고 파서가 불평하는 줄.

      긴 코드 블록을 분할하면 실제로 구문 오류의 원인을 찾는 데 도움이 됩니다.

  • 문제가 되는 코드를 주석 처리하세요.

    • 문제의 원인을 격리할 수 없는 경우 코드 블록에 주석 처리(임시 삭제)를 시작하세요.

    • 파싱 오류를 해결하면 문제의 원인을 찾은 것입니다. 거기를 자세히 살펴보세요.

    • 전체 함수/메서드 블록을 일시적으로 제거하고 싶을 때가 있습니다. (중괄호가 일치하지 않거나 들여쓰기가 잘못된 코드의 경우)

    • 문법 문제가 해결되지 않으면 주석 처리된 부분을 처음부터 다시 작성다시 작성해 보세요.

  • 초보자로서 혼란스러운 문법 구조를 피하십시오.

    • Ternary? : 条件运算符可以压缩代码并且确实很有用。但它并不能在所有情况下提高可读性。在不熟悉的情况下更喜欢简单的 if 문.

    • PHP의 대체 구문(if:/elseif:/endif;) 对于模板来说很常见,但可以说不太容易遵循正常的 { 代码 } 블록.

  • 초보자가 저지르는 가장 흔한 실수는 다음과 같습니다.

    • 문/라인을 종료하려면 세미콜론 ;이 누락되었습니다.

    • "'에 대한 문자열 따옴표가 일치하지 않으며 따옴표가 이스케이프되지 않습니다.

    • 잊혀진 연산자, 특히 문자열 . 연결.

    • 불균형(括号). 보고된 행에서 개수를 계산합니다. 수량은 동일합니까?

  • 하나의 문법 문제를 해결하면 다음 문제가 드러날 수 있다는 것을 잊지 마세요.

    • 한 가지 문제를 해결했지만 아래 코드 중 일부에 다른 문제가 나타나면 기본적으로 올바른 방향으로 가고 있는 것입니다.

    • 편집 후 같은 줄에 새 구문 오류가 나타나면 변경 시도가 실패할 수 있습니다. (그러나 항상 그런 것은 아닙니다.)

  • 고칠 수 없다면 이전 작업 코드의 백업을 복원하세요.

    • 소스 코드 버전 관리 시스템을 채택합니다. 손상된 버전과 마지막 작업 버전을 언제든지 볼 수 있습니다 差异. 구문 문제가 무엇인지 이해하는 것이 도움이 될 수 있습니다.
  • 보이지 않는 유니코드 문자 : 어떤 경우에는 소스 코드에 16진수 편집기 또는 다른 편집기/뷰어를 사용해야 합니다. 일부 문제는 코드를 보는 것만으로는 찾을 수 없습니다.

    • ASCII가 아닌 기호를 찾는 첫 번째 방법으로 grep --color -P -n "[x80-xFF]" file.php을 사용해 보세요.

    • 특히 BOM, 너비가 0인 공백 또는 줄바꿈 없는 공백, 스마트 따옴표가 소스 코드에 자주 등장합니다.

  • 파일에 저장된 줄바꿈 유형에 주의하세요.

    • PHP는 n 줄 바꿈 문자만 지원하고 r 캐리지 리턴 문자는 지원하지 않습니다.

    • 이것은 때때로 MacOS 사용자에게 문제가 될 수 있습니다(편집기가 잘못 구성된 경우 OS X에서도).

    • 보통 한 줄을 사용할 때만 사용됩니다. //# 注释时才会出现问题。当忽略换行符时,多行 /*...*/ 주석은 파서를 거의 방해하지 않습니다.

  • 귀하의 문법 오류가 네트워크를 통해 전송되지 않는 경우: 컴퓨터에 구문 오류가 발생했습니다. 그러나 동일한 파일을 온라인에 게시하면 더 이상 표시되지 않습니다. 이는 다음 두 가지 중 하나만 의미할 수 있습니다.

    • 잘못된 파일을 보고 계십니다!

    • 또는 코드에 보이지 않는 길 잃은 유니코드가 포함되어 있습니다(위 참조). 쉽게 찾을 수 있습니다. 웹 양식의 코드를 텍스트 편집기로 다시 복사하기만 하면 됩니다.

  • PHP 버전을 확인하세요. 모든 서버에서 모든 구문 구성을 사용할 수 있는 것은 아닙니다.

    • php -v 명령줄 해석기용

    • 웹 서버를 통한 통화의 경우.


    반드시 동일하지는 않습니다. 특히 프레임을 사용할 때는 서로 일치시켜야 합니다.

  • PHP의 예약어를 함수/메서드, 클래스 식별자 또는 상수로 사용하지 마세요.

  • 시행착오는 최후의 수단입니다.

모든 방법이 실패하면 언제든지 오류 메시지를 google에서 확인할 수 있습니다. 구문 기호는 검색하기가 쉽지 않습니다(스택 오버플로 자체는 SymbolHound를 통해 색인화되지만). 따라서 관련 콘텐츠를 찾으려면 몇 페이지를 더 검색해야 할 수도 있습니다.

추가 가이드:

죽음의 하얀 화면

웹사이트가 비어 있는 경우 일반적으로 문법 오류로 인한 것입니다. 디스플레이 활성화:

  • error_reporting = E_ALL
  • display_errors = 1

php.iniphp.ini一般来说,或者通过 mod_php 的 .htaccess에서 일반적으로 말하면 또는 mod_php의 .htaccess , .user.ini FastCGI 설정을 사용해도 마찬가지입니다.

PHP는 첫 번째 줄도 해석/실행할 수 없기 때문에 깨진 스크립트에서 활성화하기에는 너무 늦었습니다. 빠른 수정은 test.php:

와 같은 래퍼 스크립트를 만드는 것입니다. 으아아아

이 래퍼 스크립트에 액세스하면 실패한 코드가 호출됩니다.

스크립트가 HTTP 500 응답과 충돌할 때 PHP의 error_log 并查看您的网络服务器的error.log을 활성화하는 데도 도움이 됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿