पार्स त्रुटि: सिंटैक्स त्रुटि, मेरे 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 कोड के साथ एक त्रुटि है ... जिसे आपने पोस्ट नहीं किया है।
याकॉबी

5
ऐसा लगता है कि आपके पास एक लापता '}', ';' या ब्रैकेट लेकिन अगर आप पूरे php कोड
ryanc1256

14
डेढ़ साल बाद, यह मजेदार है कि यह सवाल बंद कर दिया गया क्योंकि यह बहुत स्थानीय है लेकिन इसे लगभग 50k बार देखा गया है।
प्रातनाला

3
मैं सहमत हूँ ... यह पूरी तरह से मेरी समस्या तय है। सवाल और समाधान के संबंध में बिल्कुल भी नहीं।
रोक्को द टैको

5
इसके अलावा के लिए जाँच short_tagsके तहत दोनों अपने php.ini में apacheऔर cliकॉन्फ़िगरेशन
AO_

जवाबों:


317

आपको इससे बचना चाहिए (अपने कोड के अंत में):

{?>

और इस:

<?php}

आपको कोष्ठक को सीधे खुले / बंद phpटैग के पास नहीं रखना चाहिए , लेकिन इसे एक स्थान के साथ अलग करें:

{ ?>
<?php {

भी बचें <?और उपयोग करें<?php


47
मामले में यह किसी को भी मदद करता है: मुझे एक समान त्रुटि मिली, लेकिन <? } ?>इसके बजाय की वजह से <?php } ?>
एडम लिबुसा

70
मेरे पास भी ऐसा ही था, लेकिन मेरा मामला यह था कि मेरे php.ini में short_open_tag = Off था। जब मैंने इसे चालू किया, तो मेरे कोड ने काम किया।
bksi

4
ध्यान दें कि अपाचे स्वीकार करता है कि यह नग्नेक्स नहीं करता है (या बल्कि fcgi ऐसा नहीं करता है) यदि आपका स्टंप इस बात से है कि यह एक वेब सर्वर पर क्यों काम कर रहा है और दूसरा नहीं जिसे आप जानते हैं
Sammaye

क्या आप इससे बचने के लिए भी जोड़ सकते हैं <? 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) से भरा था । मुझे सुविधाएँ जोड़ने या बदलने का काम सौंपा गया है, और आम तौर पर यह सिर्फ एक या दो सुविधाओं के लिए सब कुछ बदलने के लिए एक अच्छा विचार नहीं है। आपके जवाब से वास्तव में मदद मिली।
साल

स्पॉट ऑन, यह विशेष रूप से उल्लेखनीय है यदि आपने उदाहरण के लिए नए Plesk होस्टिंग सॉफ़्टवेयर में अपग्रेड किया है या अपने PHP संस्करण को अपग्रेड किया है। हमने पाया कि php.ini सेटिंग्स ट्रूस्ड हो गईं और हमें उन्हें फिर से सेट करना पड़ा, विशेष रूप से फ़ाइल त्रुटि के अप्रत्याशित अंत से बचने के लिए आवश्यक था
ताहिर खालिद

1
आपने मेरी जान बचा ली; ;-)
मिगुएल एस। मेंडोज़ा

जान बचाने में माहिर!
कामिल डर्बोस्की

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 वेबपेज को फिर से लोड करें।



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>

अच्छी तरह से बात अंदर है अगर (लॉगिन ()), मेरे पास लिखने के लिए बहुत सारे कोड हैं, यह सिर्फ एक नमूना है। वैसे भी यहाँ पहले जवाब ने इसे हल कर दिया है। मुझे नहीं पता था कि एक जगह डालनी है। सहायता के लिए धन्यवाद!
प्रातनाला

1
yer वैसे भी मदद करने के लिए वैसे भी मुझे मिला है, लेकिन मैं इसे इस तरह से करना पसंद करता हूं। और यकीन है कि
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 मैनुअल के अनुसार :

चेतावनी यह ध्यान रखना बहुत महत्वपूर्ण है कि समापन पहचानकर्ता के साथ लाइन में अर्धविराम (;) को छोड़कर कोई अन्य वर्ण नहीं होना चाहिए। इसका मतलब है कि विशेष रूप से यह है कि पहचानकर्ता को इंडेंट नहीं किया जा सकता है, और अर्धविराम से पहले या बाद में कोई स्थान या टैब नहीं हो सकता है। यह महसूस करना भी महत्वपूर्ण है कि समापन पहचानकर्ता से पहले पहला चरित्र स्थानीय ऑपरेटिंग सिस्टम द्वारा परिभाषित एक नई रेखा होना चाहिए। यह UNIX सिस्टम पर macOS सहित \ 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

मेरे लिए, सबसे लगातार कारण एक लोप} वर्ण है, ताकि कोई फ़ंक्शन या स्टेटमेंट ब्लॉक समाप्त न हो। मैं अपने हाल के संपादन के बाद एक} वर्ण डालकर और उसे वहां से इधर-उधर घुमाकर ठीक करता हूं। मैं एक संपादक का उपयोग करता हूं जो एक बंद ब्रैकेट के अनुरूप खुलने वाले कोष्ठक का पता लगा सकता है, ताकि यह सुविधा भी मदद करे, (यह फ़ंक्शन को ठीक से समाप्त नहीं किया गया था) का पता लगाता है।

हम उम्मीद कर सकते हैं कि किसी दिन भाषा के व्याख्याकार और संकलनकर्ता बेहतर त्रुटि संदेश उत्पन्न करने के लिए कुछ काम करेंगे, क्योंकि एक समापन ब्रैकेट को छोड़ना इतना आसान है।

यदि यह किसी की मदद करता है, तो कृपया जवाब को वोट दें।


0

आप IF / ELSE निर्देशों को दो अलग-अलग ब्लॉकों में विभाजित नहीं कर सकते। यदि आपको HTML कोड प्रिंट करने की आवश्यकता है, तो इको का उपयोग करें ।

<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

अन्य उत्तरों को पूरक करने के लिए, यह आपके php स्क्रिप्ट के ऑटो-मिनिफिकेशन के कारण भी हो सकता है यदि आप एक FTP क्लाइंट का उपयोग कर रहे हैं, जैसे कि Snapdilla। सुनिश्चित करें कि स्थानांतरण प्रकार बाइनरी पर सेट है न कि ASCII या ऑटो पर। ASCII या ऑटो ट्रांसफर प्रकार आपके php कोड को इस त्रुटि के लिए प्रेरित कर सकता है।


-1

यदि आपका उपयोग parse_ini_file ($ फ़ाइल) या एक रूटीन। Ini फ़ाइल को कर रहा है, तो जांचें कि क्या आप डेटा ini फ़ाइल में उद्धृत हैं। अयोग्य डेटा इस त्रुटि का कारण होगा। पूर्व; data1 = परीक्षण त्रुटि का कारण बनेगा, data1 = "परीक्षण" नहीं होगा।


-2

मेरे मामले में मैंने सामग्री को किसी अन्य फ़ाइल में कॉपी किया और फिर php फ़ाइल को हटा दिया और एक नया बनाया, उसी फ़ाइल में सामग्री को फिर से कॉपी किया, और यह काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.