संदर्भ-PHP में यह त्रुटि क्या है?




माप में त्रुटियों के प्रकार (24)

पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित '['

यह त्रुटि दो variatians में आता है:

बदलाव 1

$arr = [1, 2, 3];

यह सरणी प्रारंभकर्ता वाक्यविन्यास केवल PHP 5.4 में पेश किया गया था; इससे पहले संस्करणों पर एक पार्सर त्रुटि बढ़ेगी। यदि संभव हो, तो अपनी स्थापना को अपग्रेड करें या पुराने सिंटैक्स का उपयोग करें:

$arr = array(1, 2, 3);

मैनुअल से यह उदाहरण भी देखें।

बदलाव 2

$suffix = explode(',', 'foo,bar')[1];

PHP 5.4 में ऐरे डीरफ्रेंसिंग फ़ंक्शन परिणाम भी पेश किए गए थे। यदि अपग्रेड करना संभव नहीं है तो आपको एक (अस्थायी) चर का उपयोग करने की आवश्यकता है:

$parts = explode(',', 'foo,bar');
$suffix = $parts[1];

मैनुअल से यह उदाहरण भी देखें।

यह क्या है?

चेतावनी, त्रुटियों और सूचनाओं के बारे में कई जवाब हैं जो प्रोग्रामिंग PHP के दौरान आपको सामना करना पड़ सकता है और कोई संकेत नहीं है कि कैसे ठीक किया जाए। यह एक सामुदायिक विकी भी है, इसलिए इस सूची को जोड़ने और बनाए रखने में सभी को भाग लेने के लिए आमंत्रित किया जाता है।

ऐसा क्यों है?

"हेडर पहले से भेजे गए" या "गैर-ऑब्जेक्ट के सदस्य को कॉल करना " जैसे प्रश्न स्टैक ओवरफ़्लो पर अक्सर पॉप अप करते हैं। उन प्रश्नों का मूल कारण हमेशा समान होता है। तो उन सवालों के जवाब आम तौर पर उन्हें दोहराते हैं और फिर ओपी को दिखाते हैं कि कौन सी रेखा उसके विशेष मामले में बदल सकती है। ये उत्तर साइट पर कोई मूल्य नहीं जोड़ते हैं क्योंकि वे केवल ओपी के विशेष कोड पर लागू होते हैं। अन्य उपयोगकर्ताओं को एक ही त्रुटि होने से आसानी से समाधान को पढ़ नहीं सकता है क्योंकि वे बहुत स्थानीय हैं। यह दुखद है, क्योंकि एक बार जब आप मूल कारण समझते हैं, तो त्रुटि को ठीक करना मामूली होता है। इसलिए, यह सूची लागू करने के सामान्य तरीके से समाधान की व्याख्या करने की कोशिश करती है।

मुझे यहाँ क्या करना चाहिए?

यदि आपका प्रश्न इस के डुप्लिकेट के रूप में चिह्नित किया गया है, तो कृपया नीचे अपना त्रुटि संदेश ढूंढें और अपने कोड पर फिक्स लागू करें। उत्तरों में आम तौर पर सामान्य उत्तर से स्पष्ट नहीं होने पर जांच के लिए और अधिक लिंक होते हैं।

यदि आप योगदान देना चाहते हैं, तो कृपया अपना "पसंदीदा" त्रुटि संदेश, चेतावनी या नोटिस, प्रति जवाब एक, एक संक्षिप्त वर्णन जिसका अर्थ है (यहां तक ​​कि यदि यह केवल उनके मैन्युअल पृष्ठ पर शर्तों को हाइलाइट कर रहा है), एक संभावित समाधान या डिबगिंग दृष्टिकोण जोड़ें और मौजूदा क्यू एंड ए की एक सूची जो मूल्य के हैं। साथ ही, किसी भी मौजूदा उत्तर में सुधार करने के लिए स्वतंत्र महसूस करें।

सूचि

और देखें


Strict Standards: Non-static method [<class>::<method>] should not be called statically

Occurs when you try to call a non-static method on a class as it was static, and you also have the E_STRICT flag in your error_reporting() settings.

उदाहरण :

class HTML {
   public function br() {
      echo '<br>';
   }
}

HTML::br() or $html::br()

You can actually avoid this error by not adding E_STRICT to error_reporting() , eg

error_reporting(E_ALL & ~E_STRICT);

since as for PHP 5.4.0 and above, E_STRICT is included in E_ALL [ ref ]. But that is not adviceable. The solution is to define your intended static function as actual static :

public static function br() {
  echo '<br>';
}

or call the function conventionally :

$html = new HTML();
$html->br();

Related questions :


चेतावनी: हेडर जानकारी संशोधित नहीं कर सकता - हेडर पहले ही भेजे गए हैं

ऐसा होता है जब आपकी स्क्रिप्ट क्लाइंट को HTTP शीर्षलेख भेजने की कोशिश करती है लेकिन पहले से ही आउटपुट पहले से ही था, जिसके परिणामस्वरूप हेडर क्लाइंट को पहले से ही भेजे जा सकते थे।

यह एक E_WARNING - E_WARNING और यह स्क्रिप्ट को नहीं रोक पाएगा।

एक सामान्य उदाहरण इस तरह एक टेम्पलेट फ़ाइल होगी:

<html>
    <?php session_start(); ?>
    <head><title>My Page</title>
</html>
...

session_start() फ़ंक्शन क्लाइंट को सत्र कुकी के साथ शीर्षलेख भेजने का प्रयास करेगा। लेकिन जब PHP ने आउटपुट स्ट्रीम में <html> तत्व लिखा था तो PHP ने पहले से ही हेडर भेजे थे। आपको session_start() को शीर्ष पर ले जाना होगा।

चेतावनी ट्रिगर करने वाले कोड से पहले लाइनों के माध्यम से जाकर इसे हल कर सकते हैं और यह जांच सकते हैं कि यह कहां आउटपुट करता है। उस कोड से पहले कोड भेजने वाले किसी हेडर को ले जाएं।

PHP के बंद होने के बाद अक्सर अनदेखा आउटपुट नई लाइनें होती है ?> । इसे छोड़ने के लिए एक मानक अभ्यास माना जाता है ?> जब यह फ़ाइल में आखिरी बात है। इसी प्रकार, इस चेतावनी के लिए एक और आम कारण यह है कि जब <?php पास एक खाली स्थान, रेखा या अदृश्य चरित्र होता है, जिससे वेबसर्वर हेडर और व्हाइटस्पेस / न्यूलाइन भेजता है, इस प्रकार PHP PHP पार्सिंग शुरू करने में सक्षम नहीं होगा कोई हेडर सबमिट करने के लिए।

यदि आपकी फ़ाइल में एक से अधिक <?php ... ?> कोड ब्लॉक है, तो आपके बीच कोई रिक्त स्थान नहीं होना चाहिए। (नोट: यदि आपके पास कोड था जो स्वचालित रूप से बनाया गया था तो आपके पास एकाधिक ब्लॉक हो सकते हैं)

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

संबंधित सवाल:


घातक त्रुटि: किसी गैर-ऑब्जेक्ट पर किसी सदस्य फ़ंक्शन को कॉल करें

xyz->method() के समान कोड के साथ होता है जहां xyz कोई ऑब्जेक्ट नहीं है और इसलिए उस method को नहीं कहा जा सकता है।

यह एक घातक त्रुटि है जो स्क्रिप्ट को रोक देगा (आगे संगतता नोटिस: यह PHP 7 से शुरू होने वाली एक आकर्षक त्रुटि बन जाएगी)।

अक्सर यह एक संकेत है कि कोड में त्रुटि स्थितियों के लिए चेक गुम है। मान्य करें कि एक वस्तु वास्तव में अपनी विधियों को कॉल करने से पहले एक वस्तु है।

एक typical उदाहरण होगा

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

उपर्युक्त उदाहरण में, क्वेरी तैयार नहीं की जा सकती है और prepare() $statement को false सौंपा जाएगा। execute() विधि को कॉल करने का प्रयास करने के परिणामस्वरूप घातक त्रुटि होगी क्योंकि false एक "गैर-वस्तु" है क्योंकि मान एक बूलियन है।

चित्रित करें कि आपके फ़ंक्शन ने ऑब्जेक्ट के बजाय बूलियन क्यों लौटाया। उदाहरण के लिए, हुई अंतिम त्रुटि के लिए $pdo ऑब्जेक्ट की जांच करें। इस पर डीबग करने के तरीके पर विवरण इस बात पर निर्भर करेगा कि प्रश्न में विशेष कार्य / वस्तु / कक्षा के लिए त्रुटियों को कैसे नियंत्रित किया जाता है।

यदि यहां तक ​​कि ->prepare में असफल रहा है तो आपके $pdo डेटाबेस हैंडल ऑब्जेक्ट को मौजूदा दायरे में पारित नहीं किया गया था । यह कहां परिभाषित किया गया है। फिर इसे पैरामीटर के रूप में पास करें, इसे संपत्ति के रूप में स्टोर करें, या इसे वैश्विक दायरे के माध्यम से साझा करें।

एक और समस्या सशर्त रूप से एक वस्तु बना सकती है और फिर उस सशर्त ब्लॉक के बाहर एक विधि को कॉल करने का प्रयास कर सकती है। उदाहरण के लिए

if ($someCondition) {
    $myObj = new MyObj();
}
// ...
$myObj->someMethod();

सशर्त ब्लॉक के बाहर विधि को निष्पादित करने का प्रयास करके, आपकी ऑब्जेक्ट को परिभाषित नहीं किया जा सकता है।

संबंधित सवाल:

  • किसी गैर-ऑब्जेक्ट पर किसी सदस्य फ़ंक्शन पर कॉल करें
  • सभी PHP की सूची "घातक त्रुटि: किसी सदस्य फ़ंक्शन पर कॉल करें ... गैर-ऑब्जेक्ट पर" पर प्रश्न

चेतावनी: प्रभाव में open_basedir प्रतिबंध

यह चेतावनी फ़ाइल और निर्देशिका पहुंच से संबंधित विभिन्न कार्यों के साथ दिखाई दे सकती है। यह एक विन्यास मुद्दे के बारे में चेतावनी देता है।

जब ऐसा प्रतीत होता है, तो इसका मतलब है कि कुछ फ़ाइलों को एक्सेस प्रतिबंधित कर दिया गया है।

चेतावनी स्वयं कुछ भी नहीं तोड़ती है, लेकिन फ़ाइल-एक्सेस को रोका जाने पर अक्सर एक स्क्रिप्ट ठीक से काम नहीं करती है।

फिक्स सामान्य रूप से PHP कॉन्फ़िगरेशन को बदलने के लिए होता है , संबंधित सेटिंग को open_basedir कहा जाता है।

कभी-कभी गलत फ़ाइल या निर्देशिका नामों का उपयोग किया जाता है, तो फ़िक्स सही का उपयोग करने के लिए होता है।

संबंधित सवाल:


पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_ENCAPSED_AND_WHITESPACE

डबल-उद्धृत स्ट्रिंग के अंदर इंटरपोलेशन के लिए उद्धृत कुंजी के साथ सरणी मान को संदर्भित करने का प्रयास करते समय यह त्रुटि अक्सर सामना की जाती है, जब संपूर्ण जटिल चर निर्माण {} में संलग्न नहीं होता है।

त्रुटि मामला:

इसके परिणामस्वरूप Unexpected T_ENCAPSED_AND_WHITESPACE :

echo "This is a double-quoted string with a quoted array key in $array['key']";
//---------------------------------------------------------------------^^^^^

संभावित सुधार:

एक डबल-उद्धृत स्ट्रिंग में, PHP सरणी कुंजी स्ट्रिंग्स को बिना उपयोग किए जाने की अनुमति देगा, और E_NOTICE जारी नहीं करेगा। तो उपर्युक्त के रूप में लिखा जा सकता है:

echo "This is a double-quoted string with an un-quoted array key in $array[key]";
//------------------------------------------------------------------------^^^^^

संपूर्ण जटिल सरणी चर और कुंजी को {} में संलग्न किया जा सकता है, इस मामले में उन्हें E_NOTICE से बचने के लिए उद्धृत किया जाना चाहिएPHP दस्तावेज़ जटिल चर के लिए इस वाक्यविन्यास की सिफारिश करता है।

echo "This is a double-quoted string with a quoted array key in {$array['key']}";
//--------------------------------------------------------------^^^^^^^^^^^^^^^
// Or a complex array property of an object:
echo "This is a a double-quoted string with a complex {$object->property->array['key']}";

बेशक, उपर्युक्त में से किसी का भी विकल्प एरे वैरिएबल को इसके बीच इंटरपोलेट करने के बजाय जोड़ना है:

echo "This is a double-quoted string with an array variable " . $array['key'] . " concatenated inside.";
//----------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^

संदर्भ के लिए, PHP स्ट्रिंग्स मैनुअल पेज में वेरिएबल पार्सिंग पर अनुभाग देखें


चेतावनी: mysql_fetch_array () पैरामीटर 1 संसाधन होने के लिए उम्मीद करता है, बूलियन दिया गया

सबसे पहले:

कृपया, नए कोड में mysql_* फ़ंक्शंस का उपयोग न करें । वे अब बनाए रखा नहीं है और आधिकारिक तौर पर बहिष्कृत हैंलाल बॉक्स देखें? इसके बजाय तैयार बयानों के बारे में जानें, और PDO या MySQLi उपयोग करें - यह आलेख आपको यह तय करने में मदद करेगा कि कौन सा है। यदि आप पीडीओ चुनते हैं, तो यहां एक अच्छा ट्यूटोरियल है

यह तब होता है जब आप mysql_query के परिणाम से डेटा लाने का प्रयास करते हैं लेकिन क्वेरी विफल हुई।

यह एक चेतावनी है और स्क्रिप्ट को नहीं रोक पाएगी, लेकिन आपके प्रोग्राम को गलत बना देगा।

आपको mysql_query द्वारा दिए गए परिणाम की जांच करने की आवश्यकता है

$res = mysql_query($sql);
if (!$res) {
   die(mysql_error());
}
// after checking, do the fetch

संबंधित सवाल:

संबंधित त्रुटियां:

अन्य mysql* फ़ंक्शंस जो कि एक MySQL परिणाम संसाधन को पैरामीटर के रूप में भी उम्मीद करते हैं, उसी कारण से एक ही त्रुटि उत्पन्न करेंगे।


नोटिस: अपरिभाषित चर

ऐसा होता है जब आप एक वेरिएबल का उपयोग करने का प्रयास करते हैं जिसे पहले परिभाषित नहीं किया गया था।

एक सामान्य उदाहरण होगा

foreach ($items as $item) {
    // do something with item
    $counter++;
}

यदि आपने पहले $counter को परिभाषित नहीं किया है, तो ऊपर दिया गया कोड नोटिस ट्रिगर करेगा।

इसका उपयोग करने से पहले वैरिएबल को सेट करने का सही तरीका होगा, भले ही यह केवल खाली स्ट्रिंग है

$counter = 0;
foreach ($items as $item) {
    // do something with item
    $counter++;
}

संबंधित सवाल:


पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_PAAMAYIM_NEKUDOTAYIM

स्कोप रेज़ोल्यूशन ऑपरेटर को हिब्रू פעמיים נקודתיים से "Paamayim Nekudotayim" भी कहा जाता है। जिसका अर्थ है "डबल कॉलन" या "डबल डॉट दो बार"।

यह त्रुटि आमतौर पर तब होती है जब आप अनजाने में :: अपने कोड में डाल दें।

संबंधित सवाल:

प्रलेखन:


नोटिस: अपरिभाषित सूचकांक

ऐसा होता है जब आप सरणी में मौजूद किसी कुंजी द्वारा किसी सरणी को एक्सेस करने का प्रयास करते हैं।

एक Undefined Index नोटिस के लिए एक सामान्य उदाहरण होगा ( demo )

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

दोनों spinach और 1 सरणी में मौजूद नहीं हैं, जिससे E_WARNING ट्रिगर हो जाता है।

समाधान यह सुनिश्चित करना है कि इंडेक्स या ऑफसेट उस इंडेक्स तक पहुंचने से पहले मौजूद है। इसका मतलब यह हो सकता है कि आपको यह सुनिश्चित करने के लिए अपने प्रोग्राम में एक बग ठीक करने की आवश्यकता है कि जब आप उन्हें उम्मीद करते हैं तो वे इंडेक्स मौजूद होते हैं। या इसका मतलब यह हो सकता है कि आपको यह जांचने की आवश्यकता है कि इंडेक्स array_key_exists या array_key_exists का उपयोग कर मौजूद हैं या नहीं:

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in array';
}

यदि आपके पास कोड है:

<?php echo $_POST['message']; ?>
<form method="post" action="">
    <input type="text" name="message">
    ...

तब $_POST['message'] सेट नहीं किया जाएगा जब यह पृष्ठ पहली बार लोड हो और आपको उपरोक्त त्रुटि मिल जाएगी। केवल जब फॉर्म सबमिट किया जाता है और यह कोड दूसरी बार चलाया जाता है तो सरणी अनुक्रमणिका मौजूद होगी। आप आमतौर पर इसके साथ जांचते हैं:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

संबंधित सवाल:


चेतावनी: [फ़ंक्शन] : स्ट्रीम खोलने में विफल: [कारण]

ऐसा तब होता है जब आप आमतौर पर फ़ाइल को कॉल, require या fopen द्वारा कॉल करते हैं और PHP फ़ाइल नहीं ढूंढ सका या फ़ाइल लोड करने के लिए पर्याप्त अनुमति नहीं है।

यह कई कारणों से हो सकता है:

  • फ़ाइल पथ गलत है
  • फ़ाइल पथ सापेक्ष है
  • पथ शामिल गलत है
  • अनुमतियां बहुत ही सीमित हैं
  • SELinux बल में है
  • और बहुत सारे ...

एक सामान्य गलती एक पूर्ण पथ का उपयोग नहीं करना है। इसे आसानी से __DIR__ या dirname(__FILE__) जैसे पूर्ण पथ या जादू स्थिरांक का उपयोग करके हल किया जा सकता है:

include __DIR__ . '/inc/globals.inc.php';

या:

require dirname(__FILE__) . '/inc/globals.inc.php';

सही पथ सुनिश्चित करना इन मुद्दों का निवारण करने में एक कदम है, यह गैर-मौजूदा फ़ाइलों से भी संबंधित हो सकता है, फ़ाइल सिस्टम के अधिकारों को रोकने या PHP द्वारा स्वयं आधारित आधार प्रतिबंधों के अधिकार भी हो सकते हैं।

इस समस्या को हल करने का सबसे अच्छा तरीका नीचे समस्या निवारण चेकलिस्ट का पालन करना है।

संबंधित सवाल:

संबंधित त्रुटियां:


Warning: Illegal string offset 'XXX'

This happens when you try to access an array element with the square bracket syntax, but you're doing this on a string, and not on an array, so the operation clearly doesn't make sense .

उदाहरण:

$var = "test";
echo $var["a_key"];

If you think the variable should be an array, see where it comes from and fix the problem there.


पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_XXX

ऐसा होता है जब आपके पास अप्रत्याशित स्थान पर T_XXX टोकन होता है, असंतुलित (अनावश्यक) कोष्ठक, php.ini में इसे सक्रिय किए बिना संक्षिप्त टैग का उपयोग, और बहुत कुछ।

संबंधित सवाल:

आगे की सहायता के लिए देखें:

  • http://phpcodechecker.com/ - जो आपके वाक्यविन्यास संकटों पर कुछ और उपयोगी स्पष्टीकरण प्रदान करता है।

नोटिस: अनियमित स्ट्रिंग ऑफ़सेट: *

जैसा कि नाम इंगित करता है, इस प्रकार की त्रुटि होती है, जब आप अधिकतर पुन: प्रयास करने की कोशिश कर रहे हैं, या गैर-मौजूदा कुंजी के साथ सरणी से मान प्राप्त करते हैं।

आप पर विचार करें, $string से प्रत्येक पत्र दिखाने की कोशिश कर रहे हैं

$string = 'ABCD'; 
for ($i=0, $len = strlen($string); $i <= $len; $i++){
    echo "$string[$i] \n"; 
}

उपर्युक्त उदाहरण उत्पन्न होगा ( ऑनलाइन डेमो ):

A
B
C
D
Notice: Uninitialized string offset: 4 in XXX on line X

और, जैसे ही स्क्रिप्ट D प्रतिबिंबित करती है, आपको त्रुटि मिल जाएगी, क्योंकि के for() लूप के अंदर, आपने PHP को बताया है कि आपको 'ABCD' से पहले से पांचवें स्ट्रिंग कैरेक्टर से दिखाया गया है, जो मौजूद है, लेकिन चूंकि लूप 0 से गिनने लगता है और जब तक यह 4 तक पहुंच जाता है तब तक D को इकोज़ करता है, यह ऑफ़सेट त्रुटि फेंक देगा।

इसी तरह की त्रुटियां:

  • अवैध स्ट्रिंग ऑफ़सेट 'विकल्प 1'

घातक त्रुटि: वर्ग [वर्ग का नाम] पुन: वर्गीकृत नहीं कर सकता

घातक त्रुटि: पुन: दावा नहीं कर सकता [फ़ंक्शन नाम]

इसका मतलब है कि आप या तो एक ही फ़ंक्शन / क्लास नाम का दो बार उपयोग कर रहे हैं और उनमें से किसी एक का नाम बदलने की आवश्यकता है, या ऐसा इसलिए है क्योंकि आपने require include require या include जहां आपको require_once या include_once का उपयोग करना चाहिए।

जब PHP में कोई वर्ग या फ़ंक्शन घोषित किया जाता है, तो यह अपरिवर्तनीय है, और बाद में इसे नए मान के साथ घोषित नहीं किया जा सकता है।

निम्नलिखित कोड पर विचार करें:

class.php

<?php

class MyClass
{
    public function doSomething()
    {
        // do stuff here
    }
}

index.php

<?php

function do_stuff()
{
   require 'class.php';
   $obj = new MyClass;
   $obj->doSomething();
}

do_stuff();
do_stuff();

do_stuff() लिए दूसरा कॉल उपर्युक्त त्रुटि उत्पन्न करेगा। require_once require को बदलकर, हम निश्चित हो सकते हैं कि MyClass की परिभाषा वाली फ़ाइल केवल एक बार लोड की जाएगी, और त्रुटि से बचा जाएगा।


Code doesn't run/what looks like parts of my PHP code are output

If you see no result from your PHP code whatsoever and/or you are seeing parts of your literal PHP source code output in the webpage, you can be pretty sure that your PHP isn't actually getting executed. If you use View Source in your browser, you're probably seeing the whole PHP source code file as is. Since PHP code is embedded in <?php ?> tags, the browser will try to interpret those as HTML tags and the result may look somewhat confused.

To actually run your PHP scripts, you need:

  • a web server which executes your script
  • to set the file extension to .php, otherwise the web server won't interpret it as such*
  • to access your .php file via the web server

* Unless you reconfigure it, everything can be configured.

This last one is particularly important. Just double clicking the file will likely open it in your browser using an address such as:

file://C:/path/to/my/file.php

This is completely bypassing any web server you may have running and the file is not getting interpreted. You need to visit the URL of the file on your web server, likely something like:

http://localhost/my/file.php

You may also want to check whether you're using short open tags <? instead of <?php and your PHP configuration has turned short open tags off.

Also see PHP code is not being executed, instead code shows on the page


पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_VARIABLE

संभावित परिदृश्य

मुझे लगता है कि मेरा कोड गलत कहां गया है। यहां मेरी पूरी त्रुटि है:

पार्स त्रुटि: वाक्य x पर वाक्यविन्यास त्रुटि, अप्रत्याशित T_VARIABLE

मैं क्या कोशिश कर रहा हूँ

$sql = 'SELECT * FROM dealer WHERE id="'$id.'"';

उत्तर

पार्स त्रुटि: आपके प्रोग्राम के सिंटैक्स के साथ एक समस्या, जैसे किसी कथन के अंत से अर्धविराम को छोड़ना या उपरोक्त मामले की तरह, गायब होना . ऑपरेटर। दुभाषिया आपके प्रोग्राम को चलाने से रोकता है जब यह एक पार्स त्रुटि का सामना करता है।

सरल शब्दों में यह एक वाक्यविन्यास त्रुटि है, जिसका अर्थ है कि आपके कोड में कुछ ऐसा है जो इसे सही ढंग से पार्स किए जाने से रोक रहा है और इसलिए चल रहा है।

आपको क्या करना चाहिए , इस बारे में लाइनों पर सावधानी से जांच करें जहां त्रुटि किसी भी साधारण गलतियों के लिए है।

उस त्रुटि संदेश का अर्थ है कि फ़ाइल के लाइन एक्स में, PHP दुभाषिया एक खुले कोष्ठक को देखने की उम्मीद कर रहा था, लेकिन इसके बजाय, इसे T_VARIABLE नामक कुछ का सामना करना पड़ा। उस T_VARIABLE चीज़ को token कहा जाता है। यह प्रोग्राम के विभिन्न मौलिक भागों को व्यक्त करने का PHP दुभाषिया का तरीका है। जब दुभाषिया किसी प्रोग्राम में पढ़ता है, तो यह आपके द्वारा टोकन की सूची में लिखे गए शब्दों का अनुवाद करता है। जहां भी आप अपने प्रोग्राम में एक चर T_VARIABLE , दुभाषिया की सूची में एक T_VARIABLE टोकन होता है।

अच्छा पढ़ा: पार्सर टोकन की सूची

तो सुनिश्चित करें कि आप अपने php.ini में कम से कम E_PARSE सक्षम करें। पर्स त्रुटियों को उत्पादन स्क्रिप्ट में मौजूद नहीं होना चाहिए।

कोडिंग करते समय, मैंने हमेशा निम्नलिखित कथन जोड़ने की सिफारिश की:

error_reporting(E_ALL);

PHP त्रुटि रिपोर्टिंग

आईडीई का उपयोग करने के लिए भी एक अच्छा विचार है जो आपको टाइप करते समय पार्स त्रुटियों को बताएगा। आप उपयोग कर सकते हैं:

  1. NetBeans (सौंदर्य की अच्छी शांति, मुफ्त सॉफ्टवेयर) (मेरी राय में सबसे अच्छा)
  2. PhpStorm (चाचा गॉर्डन इसे प्यार करता हूँ: पी, भुगतान योजना, मालिकाना और मुफ्त सॉफ्टवेयर शामिल है)
  3. Eclipse (सौंदर्य और जानवर, मुफ्त सॉफ्टवेयर)

संबंधित सवाल:

  • संदर्भ: PHP पार्स / सिंटेक्स त्रुटियां; और उन्हें कैसे हल करें?

चेतावनी: [फ़ंक्शन] पैरामीटर 1 संसाधन होने की अपेक्षा करता है, बूलियन दिया जाता है

( चेतावनी का एक और सामान्य भिन्नता : mysql_fetch_array () पैरामीटर 1 संसाधन होने के लिए उम्मीद करता है, बूलियन दिया गया )

संसाधन PHP में एक type हैं (जैसे स्ट्रिंग्स, पूर्णांक या ऑब्जेक्ट्स)। एक संसाधन एक अपारदर्शी ब्लॉब है जिसमें स्वयं का कोई स्वाभाविक अर्थपूर्ण मूल्य नहीं है। एक संसाधन PHP कार्यों या एक्सटेंशन के एक निश्चित सेट द्वारा विशिष्ट और परिभाषित किया गया है। उदाहरण के लिए, MySQL एक्सटेंशन दो संसाधन प्रकारों को परिभाषित करता है :

MySQL मॉड्यूल में दो संसाधन प्रकार उपयोग किए जाते हैं। The first one is the link identifier for a database connection, the second a resource which holds the result of a query.

The cURL extension defines another two resource types :

... a cURL handle and a cURL multi handle.

When var_dump ed, the values look like this:

$resource = curl_init();
var_dump($resource);

resource(1) of type (curl)

That's all most resources are, a numeric identifier ( (1) ) of a certain type ( (curl) ).

You carry these resources around and pass them to different functions for which such a resource means something. Typically these functions allocate certain data in the background and a resource is just a reference which they use to keep track of this data internally.

The " ... expects parameter 1 to be resource, boolean given " error is typically the result of an unchecked operation that was supposed to create a resource, but returned false instead. For instance, the fopen function has this description:

Return Values

Returns a file pointer resource on success, or FALSE on error.

So in this code, $fp will either be a resource(x) of type (stream) or false :

$fp = fopen(...);

If you do not check whether the fopen operation succeed or failed and hence whether $fp is a valid resource or false and pass $fp to another function which expects a resource, you may get the above error:

$fp   = fopen(...);
$data = fread($fp, 1024);

Warning: fread() expects parameter 1 to be resource, boolean given

You always need to error check the return value of functions which are trying to allocate a resource and may fail :

$fp = fopen(...);

if (!$fp) {
    trigger_error('Failed to allocate resource');
    exit;
}

$data = fread($fp, 1024);

Related Errors:


कुछ भी नहीं देखा जाता है। पृष्ठ खाली और सफेद है।

मृत्यु के सफेद पृष्ठ या मौत की सफेद स्क्रीन के रूप में भी जाना जाता है। यह तब होता है जब त्रुटि रिपोर्टिंग बंद होती है और एक घातक त्रुटि (अक्सर वाक्यविन्यास त्रुटि) उत्पन्न होती है।

अगर आपके पास त्रुटि लॉगिंग सक्षम है, तो आपको अपने त्रुटि लॉग में ठोस त्रुटि संदेश मिलेगा। यह आमतौर पर "php_errors.log" नामक फ़ाइल में होगा, या तो केंद्रीय स्थान (उदाहरण के लिए /var/log/apache2 कई लिनक्स वातावरण पर) या स्क्रिप्ट की निर्देशिका में (कभी-कभी साझा होस्टिंग वातावरण में उपयोग किया जाता है) में होता है।

कभी-कभी त्रुटियों के प्रदर्शन को अस्थायी रूप से सक्षम करने के लिए यह अधिक सरल हो सकता है। फिर सफेद पृष्ठ त्रुटि संदेश प्रदर्शित करेगा। ध्यान रखें क्योंकि ये त्रुटियां वेबसाइट पर आने वाले सभी के लिए दृश्यमान हैं।

यह निम्नलिखित PHP कोड स्क्रिप्ट के शीर्ष पर जोड़कर आसानी से किया जा सकता है:

ini_set('display_errors', 1); error_reporting(~0);

कोड त्रुटियों के प्रदर्शन को चालू करेगा और उच्चतम स्तर पर रिपोर्टिंग सेट करेगा।

चूंकि ini_set() को रनटाइम पर निष्पादित किया जाता है, इसका पार्सिंग / वाक्यविन्यास त्रुटियों पर कोई प्रभाव नहीं पड़ता है। लॉग में लॉग इन दिखाई देंगे। यदि आप उन्हें आउटपुट में भी दिखाना चाहते हैं (उदाहरण के लिए ब्राउज़र में) तो आपको display_startup_errors निर्देश को true पर सेट करना होगा। इसे या तो php.ini या .htaccess या किसी भी अन्य विधि से करें जो रनटाइम से पहले कॉन्फ़िगरेशन को प्रभावित करता है

आप अपने स्वयं के लॉग फ़ाइल स्थान का चयन करने के लिए log_errors और error_log निर्देश सेट करने के लिए समान विधियों का उपयोग कर सकते हैं।

लॉग में या डिस्प्ले का उपयोग करके, आपको एक बेहतर त्रुटि संदेश और कोड की रेखा मिल जाएगी जहां आपकी स्क्रिप्ट रुक जाएगी।

संबंधित सवाल:

संबंधित त्रुटियां:


MySQL: आपके SQL वाक्यविन्यास में आपको एक त्रुटि है; मैन्युअल रूप से उपयोग करने के लिए सही वाक्यविन्यास के लिए आपके MySQL सर्वर संस्करण से मेल खाने वाले मैन्युअल की जांच करें ...

यह त्रुटि अक्सर होती है क्योंकि आप एक MySQL क्वेरी को पारित डेटा से ठीक से बचने के लिए भूल गए हैं।

क्या करना है ("बुरा विचार") का एक उदाहरण:

$query = "UPDATE `posts` SET my_text='{$_POST['text']}' WHERE id={$_GET['id']}";
mysqli_query($db, $query);

यह कोड किसी पृष्ठ में सबमिट करने के लिए एक फॉर्म में शामिल किया जा सकता है, जैसे कि http://example.com/edit.php?id=10 (पोस्ट एन ° 10 संपादित करने के लिए)

क्या होगा यदि सबमिट किए गए टेक्स्ट में सिंगल कोट्स हों? $query समाप्त हो जाएगी:

$query = "UPDATE `posts` SET my_text='I'm a PHP newbie' WHERE id=10';

और जब यह क्वेरी MySQL को भेजी जाती है, तो यह शिकायत करेगी कि वाक्यविन्यास गलत है, क्योंकि बीच में एक अतिरिक्त एकल उद्धरण है।

ऐसी त्रुटियों से बचने के लिए, आपको क्वेरी में उपयोग करने से पहले हमेशा डेटा से बचना होगा।

SQL क्वेरी में उपयोग करने से पहले डेटा से बचना भी बहुत महत्वपूर्ण है क्योंकि यदि आप नहीं करते हैं, तो आपकी स्क्रिप्ट SQL इंजेक्शन के लिए खुली होगी। एक एसक्यूएल इंजेक्शन एक रिकॉर्ड, एक टेबल या एक संपूर्ण डेटाबेस में परिवर्तन, हानि या संशोधन का कारण बन सकता है। यह एक बहुत ही गंभीर सुरक्षा समस्या है!

प्रलेखन:


घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना

$this PHP में एक विशेष चर है जिसे असाइन नहीं किया जा सकता है। यदि इसे किसी संदर्भ में एक्सेस किया गया है जहां यह अस्तित्व में नहीं है, तो यह घातक त्रुटि दी गई है।

यह त्रुटि हो सकती है:

  1. यदि एक गैर स्थैतिक विधि स्थैतिक रूप से कहा जाता है। उदाहरण:

    class Foo {
       protected $var;
       public function __construct($var) {
           $this->var = $var;
       }
    
       public static function bar () {
           // ^^^^^^
           echo $this->var;
           //   ^^^^^
       }
    }
    
    Foo::bar();
    

    कैसे ठीक करें: अपने कोड की फिर से समीक्षा करें, $this केवल ऑब्जेक्ट संदर्भ में उपयोग किया जा सकता है, और किसी स्थिर विधि में कभी भी इसका उपयोग नहीं किया जाना चाहिए। साथ ही, एक स्थैतिक विधि को गैर स्थैतिक संपत्ति तक नहीं पहुंचना चाहिए। स्थैतिक संपत्ति तक पहुंचने के लिए self::$static_property का उपयोग करें।

  2. यदि किसी क्लास विधि से कोड को सामान्य फ़ंक्शन या केवल वैश्विक दायरे में कॉपी किया गया है और $this विशेष चर रखा गया है।
    कैसे ठीक करें : कोड की समीक्षा करें और $this एक अलग प्रतिस्थापन चर के साथ $this प्रतिस्थापित करें।

संबंधित सवाल:

  1. स्थैतिक के रूप में गैर स्थैतिक विधि को कॉल करें: PHP घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना
  2. कोड पर कॉपी करें: घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना
  3. सभी "ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना" स्टैक ओवरफ्लो पर प्रश्न

Warning: Division by zero

The warning message 'Division by zero' is one of the most commonly asked questions among new PHP developers. This error will not cause an exception, therefore, some developers will occasionally suppress the warning by adding the error suppression operator @ before the expression. उदाहरण के लिए:

$value = @(2 / 0);

But, like with any warning, the best approach would be to track down the cause of the warning and resolve it. The cause of the warning is going to come from any instance where you attempt to divide by 0, a variable equal to 0, or a variable which has not been assigned (because NULL == 0) because the result will be 'undefined'.

To correct this warning, you should rewrite your expression to check that the value is not 0, if it is, do something else. If the value is zero you should not divide, or change the value to 1 and then divide so the division results in the equivalent of having divided only by the additional variable.

if ( $var1 == 0 ) { // check if var1 equals zero
    $var1 = 1; // var1 equaled zero so change var1 to equal one instead
    $var3 = ($var2 / $var1); // divide var1/var2 ie. 1/1
} else {
    $var3 = ($var2 / $var1); // if var1 does not equal zero, divide
}

Related Questions:


Notice: Array to string conversion

This simply happens if you try to treat an array as a string:

$arr = array('foo', 'bar');

echo $arr;  // Notice: Array to string conversion
$str = 'Something, ' . $arr;  // Notice: Array to string conversion

An array cannot simply be echo 'd or concatenated with a string, because the result is not well defined. PHP will use the string "Array" in place of the array, and trigger the notice to point out that that's probably not what was intended and that you should be checking your code here. You probably want something like this instead:

echo $arr[0];  // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar

Or loop the array:

foreach($arr as $key => $value) {
    echo "array $key = $value";
    // displays first: array 0 = foo
    // displays next:  array 1 = bar
}

If this notice appears somewhere you don't expect, it means a variable which you thought is a string is actually an array. That means you have a bug in your code which makes this variable an array instead of the string you expect.


घातक त्रुटि: अपरिभाषित फ़ंक्शन XXX पर कॉल करें

ऐसा होता है जब आप किसी फ़ंक्शन को कॉल करने का प्रयास करते हैं जिसे अभी तक परिभाषित नहीं किया गया है। सामान्य कारणों में अनुपलब्ध एक्सटेंशन शामिल हैं और इसमें सशर्त कार्य घोषणा, फ़ंक्शन घोषणा या सरल टाइपो में कार्य शामिल है।

उदाहरण 1 - सशर्त समारोह घोषणा

$someCondition = false;
if ($someCondition === true) {
    function fn() {
        return 1;
    }
}
echo fn(); // triggers error

इस मामले में, fn() कभी घोषित नहीं किया जाएगा क्योंकि $someCondition सच नहीं है।

उदाहरण 2 - फ़ंक्शन घोषणा में फ़ंक्शन

function createFn() 
{
    function fn() {
        return 1;
    }
}
echo fn(); // triggers error

इस मामले में, fn केवल एक बार createFn() जाएगा createFn() को कॉल किया जाता है। ध्यान दें कि बनाने के लिए बाद की कॉल createFn() मौजूदा फ़ंक्शन के पुनर्वितरण के बारे में एक त्रुटि को ट्रिगर करेगा।

आप इसे PHP अंतर्निहित फ़ंक्शन के लिए भी देख सकते हैं। आधिकारिक मैन्युअल में फ़ंक्शन की खोज करने का प्रयास करें, और यह जांचें कि "एक्सटेंशन" (PHP मॉड्यूल) क्या है, और PHP के कौन से संस्करण इसका समर्थन करते हैं।

अनुपलब्ध एक्सटेंशन के मामले में, उस एक्सटेंशन को इंस्टॉल करें और इसे php.ini में सक्षम करें। आपके फ़ंक्शन में विस्तार के विस्तार के लिए PHP मैन्युअल में स्थापना निर्देशों का संदर्भ लें। आप अपने पैकेज मैनेजर (उदाहरण के लिए डेबियन या उबंटू में apt , Red Hat या CentOS में yum ) का उपयोग करके एक्सटेंशन को सक्षम या इंस्टॉल करने में सक्षम हो सकते हैं, या एक साझा होस्टिंग वातावरण में नियंत्रण कक्ष।

यदि आपके द्वारा उपयोग किए जा रहे PHP से नए संस्करण में फ़ंक्शन पेश किया गया था, तो आपको मैन्युअल या इसके टिप्पणी अनुभाग में वैकल्पिक कार्यान्वयन के लिंक मिल सकते हैं। अगर इसे PHP से हटा दिया गया है, तो क्यों जानकारी के बारे में जानकारी देखें, क्योंकि यह अब आवश्यक नहीं हो सकता है।

गायब होने के मामले में, फ़ंक्शन को कॉल करने से पहले फ़ंक्शन घोषित करने वाली फ़ाइल को शामिल करना सुनिश्चित करें।

टाइपो के मामले में, टाइपो को ठीक करें।

संबंधित सवाल:

  • https://.com/search?q=Fatal+error%3A+Call+to+undefined+function




warnings