Parse error: Kesalahan sintaksis, akhir file yang tak terduga dalam kode PHP saya

173

Saya mendapat kesalahan:

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

Dengan kode ini:

<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>

Apa masalahnya?

pratnala
sumber
2
Saya membayangkan Anda memiliki kesalahan dengan beberapa kode PHP Anda ... yang belum Anda posting.
Yacoby
5
Sepertinya Anda kehilangan '}', ';' atau braket tetapi akan membantu jika Anda memposting Anda seluruh kode php
ryanc1256
14
Setahun setengah karenanya, lucu bahwa pertanyaan ini ditutup karena terlalu terlokalisasi tetapi sudah mendapat hampir 50 ribu tampilan.
pratnala
3
Saya setuju ... ini benar-benar memperbaiki masalah saya. Tidak terlokalisasi sama sekali dalam hal pertanyaan dan solusinya.
Rocco The Taco
5
Juga periksa short_tagsdi php.ini Anda di bawah KEDUA apachedan clikonfigurasi
AO_

Jawaban:

317

Anda harus menghindari ini (di akhir kode Anda):

{?>

dan ini:

<?php}

Anda tidak boleh meletakkan tanda kurung tepat di dekat tanda buka / tutup php, tetapi pisahkan dengan tanda spasi:

{ ?>
<?php {

juga hindari <?dan gunakan<?php

j0k
sumber
47
Seandainya itu membantu siapa pun: Saya mendapat kesalahan serupa, tetapi disebabkan oleh <? } ?>alih-alih <?php } ?>.
Adam Libuša
70
Saya memiliki ptoblem yang sama tetapi kasus saya adalah saya memiliki short_open_tag = Off di php.ini saya. Ketika saya mengaktifkannya ke On, kode saya berfungsi.
bksi
4
Catatan sementara Apache menerima Nginx ini tidak (atau lebih tepatnya fcgi tidak) jadi jika Anda bingung mengapa ini bekerja pada satu server web dan bukan yang lain, Anda tahu mengapa
Sammaye
Bisakah Anda menambahkan untuk menghindari juga ini <? Php // echo $ pagetitle; ?> komentar miring membunuh penutupan?>
AndreaBogazzi
96

Saya memiliki kesalahan yang sama, tetapi saya memperbaikinya dengan memodifikasi php.inifile.

Temukan file php.ini Anda, lihat Bung, di mana php.ini saya?

kemudian buka dengan editor favorit Anda.

Cari short_open_tagproperti, dan terapkan perubahan berikut:

; short_open_tag = Off ; previous value
short_open_tag = On ; new value
Archana Balachandran
sumber
8
Jawaban ini sangat penting ketika berhadapan dengan kode lama. Saya telah mewarisi kode yang ditulis oleh orang lain, dan basis kode penuh dengan <? ?>(catatan, yang hilang php). Saya ditugaskan untuk menambah atau mengubah fitur, dan biasanya bukan ide yang baik untuk mengubah segalanya hanya untuk satu atau dua fitur. Jawaban Anda sangat membantu.
Sal
Spot on, ini sangat penting jika Anda telah meningkatkan ke perangkat lunak hosting Plesk yang lebih baru misalnya atau meningkatkan versi PHP Anda. Kami menemukan pengaturan php.ini dihancurkan dan kami harus mengaturnya lagi, pengaturan khusus ini diperlukan untuk menghindari akhir kesalahan file yang tidak terduga
Tahir Khalid
1
Anda telah menyelamatkan hidup saya, ;-)
Miguel S. Mendoza
mastar menyelamatkan hidup!
Kamil Dąbrowski
36

Saya memiliki kesalahan yang sama, tetapi saya memperbaikinya dengan memodifikasi php.ini dan / atau mengedit file PHP!

Ada dua metode berbeda untuk menyiasati sintaks kesalahan parse.

Metode 1 (file PHP Anda)

Hindari di file PHP Anda ini:

<? } ?>

Pastikan Anda meletakkannya seperti ini

<?php ?>

Kode Anda mengandung <? ?>

CATATAN: Hilang phpsetelah <?!

Metode 2 (file php.ini)

Ada juga cara sederhana untuk menyelesaikan masalah Anda. Cari nilai short_open_tagproperti (Gunakan di editor teks Anda dengan Ctrl + F!) , Dan terapkan perubahan berikut:

; short_open_tag = Off

untuk

short_open_tag = On

Menurut uraian arahan inti php.ini , short_open_tagmemungkinkan Anda untuk menggunakan tag buka pendek ( <?) meskipun ini dapat menyebabkan masalah ketika digunakan dengan xml ( <?xmltidak akan berfungsi saat ini diaktifkan)!

CATATAN: Muat ulang Server Anda (seperti misalnya: Apache) dan muat ulang halaman web PHP Anda di browser Anda.

Suriyaa
sumber
11

Cukup buka php.ini lalu temukan short_open_tag= Offset keshort_open_tag= On

Hamzah Akram
sumber
6

Carilah loop atau pernyataan yang tidak tertutup.

Saya mengalami masalah ini ketika saya meninggalkan php foreach: tag tidak tertutup.

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

Menutupnya menggunakan yang berikut memecahkan kesalahan sintaks: unexpected end of file

<?php endforeach; ?>

Semoga ini bisa membantu seseorang

Imtiaz
sumber
5

Pastikan Anda telah menutup kelas Anda.

Misalnya, jika Anda memiliki kelas controller dengan metode, dan secara tidak sengaja Anda menghapus braket akhir, yang menutup seluruh kelas, Anda akan mendapatkan kesalahan ini.

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

juga, cari komentar // yang mematahkan kurung kurawal penutup

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

kurung kurawal penutupan tidak akan menutup bagian kondisional dengan benar dan php tidak akan memproses sisa kode dengan benar.

Steve Wasiura
sumber
3

Hindari ini juga <? } ?>pastikan Anda meletakkannya<?php } ?>

Gpak
sumber
2

Saya melihat beberapa kesalahan, yang saya perbaiki di bawah ini.

Inilah yang saya dapatkan sebagai salah:

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";
}

Inilah yang akan saya lakukan:

<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>
ryanc1256
sumber
Nah masalahnya ada di dalam if (login ()), saya punya banyak kode untuk ditulis, ini hanya contoh. Bagaimanapun jawaban pertama di sini telah menyelesaikannya. Saya tidak tahu bahwa ruang harus diletakkan. Terima kasih untuk bantuannya!
pratnala
1
Anda hanya membantu saja, Anda memang mendapatkan itu, tetapi saya hanya ingin melakukannya dengan cara itu. Dan Anda yakin
ryanc1256
1

Dalam kasus saya pelakunya adalah satu-satunya <?phptag pembuka di baris terakhir file. Tampaknya itu berfungsi pada beberapa konfigurasi tanpa masalah tetapi menyebabkan masalah pada yang lain.

J. Salah
sumber
1

Juga, hati-hati terhadap pengidentifikasi penutupan heredoc.

Contoh Tidak Valid:

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

Ini akan menghasilkan pengecualian yang menyerupai berikut ini:

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

di mana nomor 5 mungkin nomor baris terakhir dari file Anda.

Menurut manual php :

Peringatan Sangat penting untuk dicatat bahwa garis dengan pengenal penutup tidak boleh mengandung karakter lain, kecuali titik koma (;). Itu berarti terutama bahwa pengidentifikasi mungkin tidak indentasi, dan mungkin tidak ada spasi atau tab sebelum atau sesudah titik koma. Penting juga untuk menyadari bahwa karakter pertama sebelum pengidentifikasi penutup harus berupa baris baru seperti yang didefinisikan oleh sistem operasi lokal. Ini \ n pada sistem UNIX, termasuk macOS. Pembatas penutup juga harus diikuti oleh baris baru.

TLDR : Pengidentifikasi penutup TIDAK boleh diindentasi.

Contoh yang valid:

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

Juga, kasus lain di mana sulit dikenali adalah ketika Anda memiliki file hanya dengan fungsi, saya tahu itu bukan kasus penggunaan umum tetapi itu menjengkelkan dan harus menemukan kesalahan.

<?php
function () {

}

File di atas mengembalikan erro Parse error: syntax error, unexpected end of file insementara di bawah tidak.

<?php
function () {

};
neisantos
sumber
0

Bagi saya, penyebab yang paling sering adalah karakter} yang dihilangkan, sehingga fungsi atau jika blok pernyataan tidak diakhiri. Saya memperbaikinya dengan menyisipkan karakter} setelah suntingan terakhir saya dan memindahkannya dari sana. Saya menggunakan editor yang dapat menemukan tanda kurung buka yang sesuai dengan braket penutup, sehingga fitur itu juga membantu (ini menemukan fungsi yang tidak dihentikan dengan benar).

Kita dapat berharap bahwa penerjemah dan kompiler bahasa suatu hari akan melakukan beberapa pekerjaan untuk menghasilkan pesan kesalahan yang lebih baik, karena sangat mudah untuk menghilangkan braket penutup.

Jika ini membantu siapa pun, silakan pilih jawabannya.

David Spector
sumber
0

Anda tidak dapat membagi instruksi IF / ELSE menjadi dua blok terpisah. Jika Anda membutuhkan kode HTML untuk dicetak, gunakan gema .

<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>
TK-421
sumber
0

Untuk melengkapi jawaban lain, bisa juga karena auto-minification skrip php Anda jika Anda menggunakan klien ftp seperti FileZilla. Pastikan jenis transfer diatur ke Biner dan bukan ASCII atau otomatis. ASCII atau tipe transfer otomatis dapat mengecilkan kode php Anda yang mengarah ke kesalahan ini.

pengguna3585550
sumber
-1

Jika Anda menggunakan parse_ini_file ($ file) atau rutin merading file .ini, periksa apakah data Anda dikutip dalam file ini. Data yang tidak dikutip akan menyebabkan kesalahan ini. Ex; data1 = tes akan menyebabkan kesalahan, data1 = "test" tidak akan.

Wynn
sumber
-2

Dalam kasus saya, saya menyalin konten ke file lain dan kemudian menghapus file php dan membuat yang baru, menyalin konten lagi ke file yang sama, dan itu berhasil.

Reejesh PK
sumber