পার্স ত্রুটি: সিনট্যাক্স ত্রুটি, আমার পিএইচপি কোডে ফাইলের অপ্রত্যাশিত শেষ


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
আমি কল্পনা করব আপনার কিছু পিএইচপি কোডের সাথে আপনার একটি ত্রুটি রয়েছে ... যা আপনি পোস্ট করেননি।
ইয়াকোবি

5
মনে হচ্ছে আপনার '}', ';'; বা বন্ধনী তবে এটি আপনাকে সাহায্য করবে যদি আপনি পুরো পিএইচপি কোড পোস্ট করেন
ryanc1256

14
দেড় বছর এই কারণে, মজার বিষয় এই যে এটি প্রশ্নটি বন্ধ ছিল কারণ এটি খুব স্থানীয়ীকৃত তবে এটি প্রায় 50k মতামত পেয়েছে।
প্রটন্নাল

3
আমি সম্মত ... এটি আমার সমস্যাটি পুরোপুরি ঠিক করেছে। প্রশ্ন এবং সমাধানের ক্ষেত্রে মোটেই স্থানীয় নয়।
রোকো দ্য টাকো

5
এছাড়াও জন্য চেক short_tagsঅধীনে উভয় আপনার php.ini মধ্যে apacheএবং cliconfigs
AO_

উত্তর:


317

আপনার এড়ানো উচিত (আপনার কোডের শেষে):

{?>

এবং এই:

<?php}

আপনার বন্ধনীগুলি সরাসরি খোলা / বন্ধ phpট্যাগের নিকটে রাখা উচিত নয় , তবে এটি একটি স্পেসের সাথে পৃথক করুন:

{ ?>
<?php {

এছাড়াও এড়ানো <?এবং ব্যবহার<?php


47
যদি এটি কাউকে সহায়তা করে: আমি একই রকম ত্রুটি পেয়েছি, তবে এর <? } ?>পরিবর্তে হয়েছিল <?php } ?>
অ্যাডাম লিবুয়া

70
আমার একই রকম টটব্লেম ছিল তবে আমার কেসটি ছিল আমার পিএইচপি.এন.ইতে আমার শর্ট_পেন_ট্যাগ = বন্ধ ছিল। আমি যখন এটি চালু করেছিলাম তখন আমার কোডটি কাজ করেছিল।
bksi

4
নোট করুন যখন আপাচি এই এনগিনেক্স গ্রহণ করে না (বা বরং এফসিজি না করে) তাই যদি এটি স্ট্যাম্প করে কেন এটি একটি ওয়েব সার্ভারে কাজ করছে এবং অন্য নয় কেন আপনি জানেন
সামায়ায়ে

আপনি এই <? Php // প্রতিধ্বনি $ পৃষ্ঠা শিরোনাম এড়াতে যোগ করতে পারেন; ?> মন্তব্য মন্তব্যগুলি বন্ধ করে দিচ্ছে?>
AndreaBogazzi

96

আমার একই ত্রুটি ছিল, তবে php.iniফাইলটি সংশোধন করে আমার এটি ঠিক করা হয়েছিল ।

আপনার পিএইচপি.আইএনআই ফাইলটি ডুড দেখুন, আমার পিএইচপিআইএনই কোথায়?

তারপরে এটি আপনার প্রিয় সম্পাদক দিয়ে খুলুন।

একটি short_open_tagসম্পত্তি অনুসন্ধান করুন, এবং নিম্নলিখিত পরিবর্তন প্রয়োগ করুন:

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

8
উত্তরাধিকারের কোডটি ব্যবহার করার সময় এই উত্তরটি বিশেষভাবে গুরুত্বপূর্ণ। আমি অন্য কারও দ্বারা লিখিত কোড উত্তরাধিকারসূত্রে পেয়েছি, এবং কোডবেস পূর্ণ ছিল <? ?>(নোট, অনুপস্থিত php)। আমি বৈশিষ্ট্যগুলি যুক্ত করতে বা পরিবর্তন করার জন্য আমাকে দায়িত্ব দেওয়া হয়েছে এবং কেবলমাত্র এক বা দুটি বৈশিষ্ট্যের জন্য সমস্ত কিছু পরিবর্তনের পক্ষে যাওয়া ভাল ধারণা নয় । আপনার উত্তর সত্যিই সাহায্য করেছে।
সাল

স্পট চালু করুন, এটি বিশেষভাবে লক্ষণীয় যদি আপনি উদাহরণস্বরূপ নতুন প্লেস্ক হোস্টিং সফ্টওয়্যারটিতে আপগ্রেড করেছেন বা আপনার পিএইচপি সংস্করণটি আপগ্রেড করেছেন। আমরা দেখতে পেয়েছি যে php.ini সেটিংস ট্র্যাশ হয়ে গেছে এবং সেগুলি আবার সেট করে নিয়ে যেতে হয়েছিল, এই বিশেষ ফাইলটির ত্রুটির অপ্রত্যাশিত
তাহির খালিদ

1
আপনি আমার জীবন বাঁচিয়েছেন, ;-)
মিগুয়েল এস মেন্দোজা

জীবন বাঁচাতে মাস্টার!
কামিল ডাব্রোস্কি

36

আমার একই ত্রুটি ছিল, তবে আমি php.ini সংশোধন করে এবং / অথবা পিএইচপি ফাইল সম্পাদনা করে এটি ঠিক করেছিলাম!

পার্স ত্রুটি সিনট্যাক্সটি পেতে দুটি পৃথক পদ্ধতি রয়েছে।

পদ্ধতি 1 (আপনার পিএইচপি ফাইল)

আপনার পিএইচপি ফাইলে এটি এড়ান:

<? } ?>

আপনি এটি এই মত রাখেন তা নিশ্চিত করুন

<?php ?>

আপনার কোড রয়েছে <? ?>

দ্রষ্টব্য: পরে নিখোঁজ !php<?

পদ্ধতি 2 (php.ini ফাইল)

আপনার সমস্যা সমাধানের একটি সহজ উপায়ও রয়েছে। short_open_tagসম্পত্তি মানটি অনুসন্ধান করুন (এর সাথে আপনার পাঠ্য সম্পাদককে ব্যবহার করুন Ctrl + F!) এবং নিম্নলিখিত পরিবর্তনটি প্রয়োগ করুন:

; short_open_tag = Off

প্রতি

short_open_tag = On

মূল php.ini নির্দেশের বিবরণ অনুসারে , short_open_tagআপনাকে শর্ট ওপেন ট্যাগ ( <?) ব্যবহার করার অনুমতি দেয় যদিও এক্সএমএল ব্যবহার করার সময় এটি সমস্যার কারণ হতে পারে ( <?xmlএটি সক্ষম হওয়ার পরে কাজ করবে না)!

দ্রষ্টব্য: আপনার সার্ভারটি পুনরায় লোড করুন (উদাহরণস্বরূপ: অ্যাপাচি) এবং আপনার ব্রাউজারে আপনার পিএইচপি ওয়েবপৃষ্ঠাটি পুনরায় লোড করুন।



6

কোনও লুপ বা বিবৃতি বন্ধ রেখে দেওয়া দেখুন Look

আমি যখন কোনও পিএইচপি ফোরচ ছেড়ে দিয়েছিলাম: ট্যাগটি বন্ধ না করে আমি এই সমস্যায় পড়েছি।

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

ক্লোজিং কোঁকড়া ধনুর্বন্ধনী কন্ডিশনাল বিভাগটি সঠিকভাবে বন্ধ করবে না এবং পিএইচপি সঠিকভাবে কোডের বাকী প্রক্রিয়া করবে না।


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
হ্যাঁ, যাইহোক যাইহোক, আমি এটি পেয়েছিলাম তবে আমি কেবল সেভাবেই এটি করতে চাই। এবং আপনার নিশ্চিত
ryanc1256

1

আমার ক্ষেত্রে দোষীটি <?phpফাইলের শেষ লাইনে একমাত্র খোলার ট্যাগ ছিল। স্পষ্টতই এটি কোনও কনফিগারেশনে কোনও সমস্যা ছাড়াই কাজ করে তবে অন্যকে সমস্যা সৃষ্টি করে।


1

এছাড়াও, বংশগত সমাপ্তি শনাক্তকারীদের জন্য নজর রাখুন।

অবৈধ উদাহরণ:

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 নম্বর আপনার ফাইলের শেষ লাইন নম্বর হতে পারে।

পিএইচপি ম্যানুয়াল অনুসারে :

সতর্কতা এটি লক্ষ করা খুব গুরুত্বপূর্ণ যে সমাপ্তি শনাক্তকরণকারী রেখায় একটি সেমিকোলন (;) ব্যতীত অন্য কোনও অক্ষর থাকতে হবে না। এর অর্থ বিশেষত যে শনাক্তকারী ইন্ডেন্টেড নাও হতে পারে এবং সেমিকোলনের আগে বা পরে কোনও স্পেস বা ট্যাব থাকতে পারে না। ক্লোজিং আইডেন্টিফায়ারির আগে প্রথম অক্ষরটি স্থানীয় অপারেটিং সিস্টেম দ্বারা নির্ধারিত একটি নতুন লাইন হওয়া আবশ্যক তা উপলব্ধি করাও গুরুত্বপূর্ণ। এটি ম্যাকোস সহ ইউনিক্স সিস্টেমে \ n। সমাপ্ত ডিলিমিটার অবশ্যই একটি নতুন লাইন অনুসরণ করা উচিত।

টিএলডিআর : বন্ধকারী শনাক্তকারীদেরইন্টেন্ট করাউচিত নয়

বৈধ উদাহরণ:

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

আপনি আইএফ / ইএলএসই নির্দেশাবলী দুটি পৃথক ব্লকে ভাগ করতে পারবেন না। আপনার যদি প্রিন্ট করার জন্য এইচটিএমএল কোডের প্রয়োজন হয় তবে প্রতিধ্বনি ব্যবহার করুন ।

<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

অন্যান্য উত্তরগুলির পরিপূরক হিসাবে, আপনি যদি ফাইলজিলার মতো কোনও এফটিপি ক্লায়েন্ট ব্যবহার করেন তবে এটি আপনার পিএইচপি স্ক্রিপ্টের স্ব-মিনিফিকেশনের কারণেও হতে পারে। নিশ্চিত করুন যে স্থানান্তর প্রকারটি বাইনারি তে সেট করা হয়েছে এবং ASCII বা অটোতে নয়। ASCII বা স্বতঃস্থাপনের ধরণটি আপনার পিএইচপি কোডকে এই ত্রুটির দিকে পরিচালিত করতে পারে।


-1

যদি আপনার parse_ini_file ($ ফাইল) বা একটি রুটিন একটি .ini ফাইল রেড করছে, আপনার আইএনআই ফাইলটিতে ডেটা উদ্ধৃত হয়েছে কিনা তা পরীক্ষা করে দেখুন। উদ্ধৃত ডেটা এই ত্রুটির কারণ ঘটবে। প্রাক্তন; ডেটা 1 = পরীক্ষা ত্রুটির কারণ ঘটবে, ডেটা 1 = "পরীক্ষা" করবে না।


-2

আমার ক্ষেত্রে আমি সামগ্রীগুলি অন্য কোনও ফাইলে অনুলিপি করেছিলাম এবং তারপরে পিএইচপি ফাইলটি মুছে ফেলে একটি নতুন ফাইল তৈরি করেছি, সামগ্রীগুলি আবার একই ফাইলটিতে অনুলিপি করেছি এবং এটি কার্যকর হয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.