구문 분석 오류 : 구문 오류, PHP 코드의 예기치 않은 파일 끝


173

오류가 발생했습니다.

Parse error: syntax error, unexpected end of file in the line

이 코드로 :

<html>
    <?php
        function login()
        {
            // Login function code
        }
        if (login())
    {?>

    <h2>Welcome Administrator</h2>
    <a href=\"upload.php\">Upload Files</a>
    <br />
    <a href=\"points.php\">Edit Points Tally</a>

    <?php}
        else
        {
            echo "Incorrect login details. Please login";
        }
    ?>
    Some more HTML code
</html>

뭐가 문제 야?


2
게시하지 않은 PHP 코드 중 일부에 오류가 있다고 생각합니다.
Yacoby

5
누락 된 '}', ';'이 (가)있는 것 같습니다. 브래킷 그러나 당신이 당신에게 전체 PHP 코드를 게시 경우 도움이 될 또는
ryanc1256을

14
따라서 1 년 반이 지나서이 질문이 너무 현지화되어 있지만 거의 50 만 건의 조회수를 기록했기 때문에이 질문이 종결되었다는 것이 유쾌합니다.
pratnala

3
동의합니다 ...이 문제가 완전히 해결되었습니다. 질문과 솔루션에 대해 전혀 현지화되지 않았습니다.
Rocco The Taco

5
또한 short_tagsphp.ini에서 BOTH apachecliconfigs를 확인하십시오
AO_

답변:


317

이것을 피해야합니다 (코드 끝에서).

{?>

이:

<?php}

열기 / 닫기 php태그에 직접 대괄호를 넣지 말고 공백으로 분리하십시오.

{ ?>
<?php {

또한 피하고 <?사용하십시오<?php


47
누군가에게 도움이되는 경우 : 비슷한 오류가 있지만 <? } ?>대신에 발생합니다 <?php } ?>.
Adam Libuša

70
나는 비슷한 ptoblem을 가지고 있지만 내 경우는 내 php.ini에서 short_open_tag = Off를 가지고 있다는 것입니다. 내가 켜기로 설정하면 코드가 작동했습니다.
bksi

4
아파치는이 Nginx는 이것을 받아들이지 않지만 (또는 오히려 fcgi는 그렇지 않다), 왜 이것이 하나의 웹 서버에서 작동하고 다른 웹 서버에서는 작동하지 않는지에 대한 이유를 알고
있다면

이것을 피하기 위해 추가 할 수 있습니까? <? php // echo $ pagetitle; ?> 코멘트 슬래시가 닫히고있다?>
AndreaBogazzi

96

나는 같은 오류가 있었지만 php.ini파일 을 수정하여 수정했습니다 .

php.ini 파일을 찾으십시오. Dude를 참조하십시오. 내 php.ini는 어디에 있습니까?

그런 다음 좋아하는 편집기로 엽니 다.

short_open_tag특성 을 찾고 다음 변경 사항을 적용하십시오.

; short_open_tag = Off ; previous value
short_open_tag = On ; new value

8
이 답변은 레거시 코드를 처리 할 때 특히 중요합니다. 다른 사람이 작성한 코드를 상속했으며 코드베이스로 가득 찼습니다 <? ?>(주석 없음 php). 기능을 추가하거나 변경해야하는데 일반적으로 하나 또는 두 가지 기능에 대해서만 모든 것을 변경하는 것은 좋지 않습니다 . 당신의 대답은 정말로 도움이되었습니다.
Sal

예를 들어, 최신 Plesk 호스팅 소프트웨어로 업그레이드하거나 PHP 버전을 업그레이드 한 경우 특히 주목할 만합니다. 우리는 php.ini 설정이 지워져서 다시 설정해야한다는 것을 발견했습니다.이 특별한 설정은 예기치 않은 파일 오류를 피하기 위해 필요했습니다
Tahir Khalid

1
당신은 내 생명을 구했습니다. ;-)
Miguel S. Mendoza

mastar는 생명을 구합니다!
Kamil Dąbrowski

36

나는 같은 오류가 있었지만 php.ini를 수정하거나 PHP 파일을 편집하여 수정했습니다!

구문 분석 오류 구문을 해결하는 방법에는 두 가지가 있습니다.

방법 1 (PHP 파일)

PHP 파일에서 이것을 피하십시오 :

<? } ?>

이런 식으로 넣어주세요

<?php ?>

귀하의 코드에는 <? ?>

참고 : 누락 php<?!

방법 2 (php.ini 파일)

문제를 해결하는 간단한 방법도 있습니다. short_open_tag속성 값을 검색하고 ( Ctrl + F! 와 함께 텍스트 편집기에서 사용 ) 다음 변경 사항을 적용하십시오.

; short_open_tag = Off

short_open_tag = On

에 따르면 핵심 php.ini의 지침 설명 , short_open_tag당신이 짧은 열린 태그 (사용할 수 <?있지만) (XML을 사용하는 경우이 힘 원인 문제를 <?xml이 옵션을 사용하는 경우 작동하지 않습니다)!

참고 : 서버 (예 : Apache) 를 다시로드하고 브라우저에서 PHP 웹 페이지를 다시로드하십시오.


11

php.ini로 이동하여 다음으로 short_open_tag= Off설정하십시오.short_open_tag= On


6

루프 나 명령문이 닫혀 있지 않은지 찾으십시오.

PHP foreach : 태그를 닫을 때이 문제가 발생했습니다.

<?php foreach($many as $one): ?>

다음을 사용하여 닫으면 구문 오류가 해결되었습니다. unexpected end of file

<?php endforeach; ?>

누군가에게 도움이되기를 바랍니다.


5

수업을 닫았는지 확인하십시오.

예를 들어 메서드가있는 컨트롤러 클래스가 있고 실수로 전체 클래스를 닫는 마지막 대괄호를 삭제하면이 오류가 발생합니다.

class someControler{
private $varr;
public $varu;
..
public function method {
..
} 
..
}// if you forget to close the controller, you will get the error

4

또한 닫는 중괄호를 깨는 주석을 찾으십시오.

if (1==1) { //echo "it is true"; }

닫는 중괄호는 조건부 섹션을 제대로 닫지 않으며 PHP는 나머지 코드를 올바르게 처리하지 않습니다.


3

이것을 피하고 <? } ?>당신이 넣어 있는지 확인하십시오<?php } ?>


2

아래에서 수정 한 오류가 있습니다.

이것이 내가 잘못한 것입니다.

if (login())
{?>
<h2>Welcome Administrator</h2>
<a href=\"upload.php\">Upload Files</a>
<br />
<a href=\"points.php\">Edit Points Tally</a>
<?php}
else
{
echo "Incorrect login details. Please login";
}

이것이 내가 한 일입니다.

<html>
    some code
<?php
function login()
{
    if (empty ($_POST['username']))
    {
        return false;
    }
    if (empty ($_POST['password']))
    {
        return false;
    }
    $username = trim ($_POST['username']);
    $password = trim ($_POST['password']);
    $scrambled = md5 ($password . 'foo');
    $link = mysqli_connect('localhost', 'root', 'password');
    if (!$link)
    {
        $error = "Unable to connect to the database server";
        include 'error.html.php';
        exit ();
    }
    if (!mysqli_set_charset ($link, 'utf8'))
    {
        $error = "Unable to set database connection encoding";
        include 'error.html.php';
        exit ();
    }
    if (!mysqli_select_db ($link, 'foo'))
    {
        $error = "Unable to locate the foo database";
        include 'error.html.php';
        exit ();
    }
    $sql = "SELECT COUNT(*) FROM admin WHERE username = '$username' AND password = '$scrambled'";
    $result = mysqli_query ($link, $sql);
    if (!$result)
    {
        return false;
        exit ();
    }
    $row = mysqli_fetch_array ($result);
    if ($row[0] > 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
if (login())
{
echo '<h2>Welcome Administrator</h2>
<a href=\"upload.php\">Upload Files</a>
<br />
<a href=\"points.php\">Edit Points Tally</a>';
}
else
{
    echo "Incorrect login details. Please login";
}
?>
some more html code
</html>

글쎄, 내부에 (login ()), 작성할 코드가 많으며 샘플 일뿐입니다. 어쨌든 첫 번째 대답은 그것을 해결했습니다. 나는 공간을 두어야한다는 것을 몰랐다. 도와 주셔서 감사합니다!
pratnala

1
어쨌든 돕고 있습니다. 어쨌든 나는 그것을 얻었지만 그냥 그렇게하고 싶습니다. 그리고 yer sure
ryanc1256

1

필자의 경우 범인은 <?php파일의 마지막 줄에서 고독한 시작 태그였습니다. 분명히 그것은 문제없이 일부 구성에서 작동하지만 다른 구성에서는 문제를 일으 킵니다.


1

또한 heredoc 닫기 식별자를 살펴보십시오.

잘못된 예 :

function findAll() {
    $query=<<<SQL
        SELECT * FROM `table_1`;
    SQL;
    // ... omitted
}

다음과 유사한 예외가 발생합니다.

<br />
<b>Parse error</b>:  syntax error, unexpected end of file in <b>[...][...]</b> on line <b>5</b><br />

여기서 번호 5는 파일의 마지막 줄 번호 일 수 있습니다.

PHP 매뉴얼 에 따르면 :

경고 닫는 식별자가있는 줄은 세미콜론 (;)을 제외하고 다른 문자를 포함하지 않아야합니다. 이는 특히 식별자가 들여 쓰기되지 않을 수 있으며 세미콜론 전후에 공백이나 탭이 없을 수 있음을 의미합니다. 닫기 식별자 앞의 첫 번째 문자는 로컬 운영 체제에서 정의한대로 줄 바꿈이어야합니다. 이것은 macOS를 포함한 UNIX 시스템에서 \ n입니다. 닫는 분리 문자 뒤에 줄 바꾸기가 와야합니다.

TLDR : 닫는 식별자는들여 쓰기 해서는 안됩니다.

유효한 예 :

function findAll() {
    $query=<<<SQL
        SELECT * FROM `table_1`;
SQL;
    // closing identifier should not be indented, although it might look ugly
    // ... omitted
}

0

또한 발견하기 어려운 또 다른 경우는 함수가있는 파일이있을 때 일반적인 사용 사례는 아니지만 성가 시며 오류를 발견해야한다는 것을 알고 있습니다.

<?php
function () {

}

위의 파일은 오류 Parse error: syntax error, unexpected end of file in를 반환 하지만 아래는 그렇지 않습니다.

<?php
function () {

};

0

나에게 가장 빈번한 원인은} 문자가 생략 되었기 때문에 함수 또는 if 문 블록이 종료되지 않습니다. 최근 편집 한 후에} 문자를 삽입하고 거기서 이동하여이 문제를 해결합니다. 닫는 괄호에 해당하는 여는 괄호를 찾을 수있는 편집기를 사용하므로 해당 기능도 도움이됩니다 (올바로 종료되지 않은 기능을 찾습니다).

언젠가 언어 인터프리터와 컴파일러가 닫는 괄호를 생략하기가 쉽기 때문에 더 나은 오류 메시지를 생성하기 위해 약간의 작업을 수행하기를 희망 할 수 있습니다.

이것이 누군가에게 도움이된다면 답을 투표하십시오.


0

IF / ELSE 명령어를 두 개의 개별 블록으로 나눌 수 없습니다. HTML 코드를 인쇄해야하는 경우 echo를 사용하십시오 .

<html>
    <?php
        function login()
        {
            // Login function code
        }
        if (login())
        {
            echo "<h2>Welcome Administrator</h2>
            <a href=\"upload.php\">Upload Files</a>
            <br />
            <a href=\"points.php\">Edit Points Tally</a>";
        }
        else
        {
            echo "Incorrect login details. Please login";
        }
    ?>
    Some more HTML code
</html>

0

다른 답변을 보충하기 위해 FileZilla와 같은 ftp 클라이언트를 사용하는 경우 PHP 스크립트의 자동 축소로 인한 것일 수도 있습니다. 전송 유형이 ASCII 또는 자동이 아닌 바이너리로 설정되어 있는지 확인하십시오. ASCII 또는 자동 전송 유형은 PHP 코드를 축소하여이 오류를 유발할 수 있습니다.


-1

parse_ini_file ($ file)을 사용하거나 루틴이 .ini 파일을 레이 딩하는 경우 데이터가 ini 파일에 인용되어 있는지 확인하십시오. 인용되지 않은 데이터는이 오류를 발생시킵니다. 전의; data1 = test는 오류를 유발하고 data1 = "test"는 오류를 유발하지 않습니다.


-2

내 경우에는 내용을 다른 파일로 복사 한 다음 PHP 파일삭제하고파일 을 만들고 동일한 파일에 내용을 다시 복사하여 작동했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.