194

エラーが発生しました:

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>

どうしたの?

4

20 に答える 20

353

これは(コードの最後で)避ける必要があります:

{?>

この:

<?php}

開き/閉じphpタグのすぐ近くに角かっこを配置するのではなく、スペースで区切ります。

{ ?>
<?php {

また、避け<?て使用する<?php

于 2012-07-14T09:33:21.870 に答える
107

php.ini同じエラーが発生しましたが、ファイルを変更して修正しました。

php.ini ファイルを見つけてください。参照してください。私の php.ini はどこですか?

次に、お気に入りのエディターで開きます。

プロパティを探してshort_open_tag、次の変更を適用します。

; short_open_tag = Off ; previous value
short_open_tag = On ; new value
于 2015-11-03T07:13:16.783 に答える
40

同じエラーが発生しましたが、php.ini を変更するか、PHP ファイルを編集して修正しました。

解析エラー構文を回避するには、2 つの異なる方法があります。

方法 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 Web ページをリロードします。

于 2016-03-05T16:02:09.000 に答える
15

php.iniに移動してから、short_open_tag= Off設定を見つけますshort_open_tag= On

于 2015-12-09T19:52:30.230 に答える
7

ループまたはステートメントが閉じられていないかどうかを確認します。

php の foreach: タグを閉じないままにしておくと、この問題に遭遇しました。

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

次を使用して閉じると、構文エラーが解決されました。unexpected end of file

<?php endforeach; ?>

それが誰かを助けることを願っています

于 2017-09-05T23:16:36.583 に答える
6

クラスを閉じたことを確認します。

たとえば、メソッドを持つコントローラー クラスがあり、クラス全体を閉じる最後のブラケットを誤って削除した場合、このエラーが発生します。

class someControler{
private $varr;
public $varu;
..
public function method {
..
} 
..
}// if you forget to close the controller, you will get the error
于 2015-12-16T20:12:06.527 に答える
5

また、閉じ中括弧を壊す // コメントを探します

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

閉じ中括弧は条件セクションを適切に閉じず、php は残りのコードを適切に処理しません。

于 2017-01-06T02:35:54.743 に答える
3

いくつかのエラーが発生しましたが、以下で修正しました。

これは私が間違っていると思ったものです:

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>
于 2012-07-14T09:33:13.733 に答える
1

私の場合、それは閉じられていない関数でした。どの関数がコードに影響を与えているかを確認するために、関数を 1 つずつ削除して復元する必要がありました。

誰かが利益を得ることを願っています

于 2021-04-22T22:54:49.200 に答える
1

私にとって、最も頻繁な原因は省略された } 文字であるため、関数または if ステートメント ブロックが終了しません。最近の編集の後に}文字を挿入し、そこから移動することでこれを修正します。閉じ括弧に対応する開き括弧を見つけることができるエディターを使用しているので、その機能も役立ちます (正しく終了しなかった関数を見つけます)。

閉じ括弧は簡単に省略できるため、いつの日か言語のインタープリターとコンパイラーがより適切なエラー メッセージを生成するようになることを期待できます。

これが誰かに役立つ場合は、回答に投票してください。

于 2019-07-28T15:15:56.237 に答える