php - माप में त्रुटियों के प्रकार
संदर्भ-PHP में यह त्रुटि क्या है? (20)
यह क्या है?
चेतावनी, त्रुटियों और सूचनाओं के बारे में कई जवाब हैं जो प्रोग्रामिंग PHP के दौरान आपको सामना करना पड़ सकता है और कोई संकेत नहीं है कि कैसे ठीक किया जाए। यह एक सामुदायिक विकी भी है, इसलिए इस सूची को जोड़ने और बनाए रखने में सभी को भाग लेने के लिए आमंत्रित किया जाता है।
ऐसा क्यों है?
"हेडर पहले से भेजे गए" या "गैर-ऑब्जेक्ट के सदस्य को कॉल करना " जैसे प्रश्न स्टैक ओवरफ़्लो पर अक्सर पॉप अप करते हैं। उन प्रश्नों का मूल कारण हमेशा समान होता है। तो उन सवालों के जवाब आम तौर पर उन्हें दोहराते हैं और फिर ओपी को दिखाते हैं कि कौन सी रेखा उसके विशेष मामले में बदल सकती है। ये उत्तर साइट पर कोई मूल्य नहीं जोड़ते हैं क्योंकि वे केवल ओपी के विशेष कोड पर लागू होते हैं। अन्य उपयोगकर्ताओं को एक ही त्रुटि होने से आसानी से समाधान को पढ़ नहीं सकता है क्योंकि वे बहुत स्थानीय हैं। यह दुखद है, क्योंकि एक बार जब आप मूल कारण समझते हैं, तो त्रुटि को ठीक करना मामूली होता है। इसलिए, यह सूची लागू करने के सामान्य तरीके से समाधान की व्याख्या करने की कोशिश करती है।
मुझे यहाँ क्या करना चाहिए?
यदि आपका प्रश्न इस के डुप्लिकेट के रूप में चिह्नित किया गया है, तो कृपया नीचे अपना त्रुटि संदेश ढूंढें और अपने कोड पर फिक्स लागू करें। उत्तरों में आम तौर पर सामान्य उत्तर से स्पष्ट नहीं होने पर जांच के लिए और अधिक लिंक होते हैं।
यदि आप योगदान देना चाहते हैं, तो कृपया अपना "पसंदीदा" त्रुटि संदेश, चेतावनी या नोटिस, प्रति जवाब एक, एक संक्षिप्त वर्णन जिसका अर्थ है (यहां तक कि यदि यह केवल उनके मैन्युअल पृष्ठ पर शर्तों को हाइलाइट कर रहा है), एक संभावित समाधान या डिबगिंग दृष्टिकोण जोड़ें और मौजूदा क्यू एंड ए की एक सूची जो मूल्य के हैं। साथ ही, किसी भी मौजूदा उत्तर में सुधार करने के लिए स्वतंत्र महसूस करें।
सूचि
- कुछ भी नहीं देखा जाता है। पृष्ठ खाली और सफेद है। (जिसे व्हाइट पेज / मौत की स्क्रीन भी कहा जाता है)
- कोड नहीं चलाता / मेरे PHP कोड के कुछ हिस्सों की तरह दिखता है
- चेतावनी: हेडर जानकारी संशोधित नहीं कर सकता - हेडर पहले ही भेजे गए हैं
- चेतावनी: mysql_fetch_array () पैरामीटर 1 संसाधन होने की अपेक्षा करता है, बूलियन दिया उर्फ
चेतावनी: mysql_fetch_array (): आपूर्ति की गई तर्क मान्य MySQL परिणाम संसाधन उर्फ नहीं है
चेतावनी: mysqli_num_rows () पैरामीटर 1 को mysqli_result होने की अपेक्षा करता है, बूलियन दिया गया है (या समान भिन्नताएं) - चेतावनी: [फ़ंक्शन] पैरामीटर 1 संसाधन होने की अपेक्षा करता है, बूलियन दिया जाता है
- चेतावनी: [फ़ंक्शन] : स्ट्रीम खोलने में विफल: [कारण]
- चेतावनी: प्रभाव में open_basedir प्रतिबंध
- चेतावनी: शून्य से विभाजन
- चेतावनी: अवैध स्ट्रिंग ऑफ़सेट 'XXX'
- पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित '['
- पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_XXX
- पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_ENCAPSED_AND_WHITESPACE
- पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_PAAMAYIM_NEKUDOTAYIM
- पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित 'requ_once' (T_REQUIRE_ONCE), फ़ंक्शन की अपेक्षा (T_FUNCTION)
- पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_VARIABLE
- घातक त्रुटि: XXX बाइट्स की अनुमति दी गई स्मृति आकार (XXX बाइट आवंटित करने का प्रयास किया गया)
- घातक त्रुटि: किसी गैर-ऑब्जेक्ट पर किसी सदस्य फ़ंक्शन को कॉल करें
- घातक त्रुटि: अपरिभाषित फ़ंक्शन XXX पर कॉल करें
- घातक त्रुटि: XXX को फिर से नहीं चलाया जा सकता है
- घातक त्रुटि: लेखन संदर्भ में फ़ंक्शन रिटर्न मान का उपयोग नहीं कर सकता
- घातक त्रुटि: एएए की घोषणा :: बीबीबी () सीसीसी :: बीबीबी () के साथ संगत होना चाहिए
- घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना
- नोटिस: स्ट्रिंग रूपांतरण करने के लिए ऐरे
- नोटिस: गैर-ऑब्जेक्ट त्रुटि की संपत्ति प्राप्त करने का प्रयास कर रहा है
- नोटिस: अपरिभाषित चर
- नोटिस: अपरिभाषित सूचकांक
- नोटिस: अनिर्धारित ऑफसेट XXX [संदर्भ]
- नोटिस: अनियमित स्ट्रिंग ऑफ़सेट: XXX
- नोटिस: अपरिभाषित निरंतर XXX का उपयोग - माना गया 'XXX'
- MySQL: आपके SQL वाक्यविन्यास में आपको एक त्रुटि है; मैन्युअल रूप से उपयोग करने के लिए सही वाक्यविन्यास के लिए आपके MySQL सर्वर संस्करण से मेल खाने वाले मैन्युअल की जांच करें ...
- सख्त मानक: गैर स्थैतिक विधि [<class> :: <method>] को स्थैतिक रूप से नहीं कहा जाना चाहिए
और देखें
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 इंजेक्शन के लिए खुली होगी। एक एसक्यूएल इंजेक्शन एक रिकॉर्ड, एक टेबल या एक संपूर्ण डेटाबेस में परिवर्तन, हानि या संशोधन का कारण बन सकता है। यह एक बहुत ही गंभीर सुरक्षा समस्या है!
प्रलेखन:
कुछ भी नहीं देखा जाता है। पृष्ठ खाली और सफेद है।
मृत्यु के सफेद पृष्ठ या मौत की सफेद स्क्रीन के रूप में भी जाना जाता है। यह तब होता है जब त्रुटि रिपोर्टिंग बंद होती है और एक घातक त्रुटि (अक्सर वाक्यविन्यास त्रुटि) उत्पन्न होती है।
अगर आपके पास त्रुटि लॉगिंग सक्षम है, तो आपको अपने त्रुटि लॉग में ठोस त्रुटि संदेश मिलेगा। यह आमतौर पर "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 निर्देश सेट करने के लिए समान विधियों का उपयोग कर सकते हैं।
लॉग में या डिस्प्ले का उपयोग करके, आपको एक बेहतर त्रुटि संदेश और कोड की रेखा मिल जाएगी जहां आपकी स्क्रिप्ट रुक जाएगी।
संबंधित सवाल:
- मृत्यु की पीएचपी की सफेद स्क्रीन
- मौत की सफेद स्क्रीन!
- PHP त्रुटि संदेश प्रदर्शित नहीं करता है
- PHP त्रुटियों पर 500 उत्सर्जित - यह कहां दस्तावेज है?
- PHP में उपयोगी त्रुटि संदेश कैसे प्राप्त करें?
- पर सभी PHP "मृत्यु का सफेद पृष्ठ" प्रश्न
संबंधित त्रुटियां:
- पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_XXX
- घातक त्रुटि: किसी गैर-ऑब्जेक्ट पर किसी सदस्य फ़ंक्शन को कॉल करें
- कोड नहीं चलाता / मेरे PHP कोड के कुछ हिस्सों की तरह दिखता है
घातक त्रुटि: अपरिभाषित फ़ंक्शन 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
घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना
$this
PHP में एक विशेष चर है जिसे असाइन नहीं किया जा सकता है। यदि इसे किसी संदर्भ में एक्सेस किया गया है जहां यह अस्तित्व में नहीं है, तो यह घातक त्रुटि दी गई है।
यह त्रुटि हो सकती है:
यदि एक गैर स्थैतिक विधि स्थैतिक रूप से कहा जाता है। उदाहरण:
class Foo { protected $var; public function __construct($var) { $this->var = $var; } public static function bar () { // ^^^^^^ echo $this->var; // ^^^^^ } } Foo::bar();
कैसे ठीक करें: अपने कोड की फिर से समीक्षा करें,
$this
केवल ऑब्जेक्ट संदर्भ में उपयोग किया जा सकता है, और किसी स्थिर विधि में कभी भी इसका उपयोग नहीं किया जाना चाहिए। साथ ही, एक स्थैतिक विधि को गैर स्थैतिक संपत्ति तक नहीं पहुंचना चाहिए। स्थैतिक संपत्ति तक पहुंचने के लिएself::$static_property
का उपयोग करें।यदि किसी क्लास विधि से कोड को सामान्य फ़ंक्शन या केवल वैश्विक दायरे में कॉपी किया गया है और
$this
विशेष चर रखा गया है।
कैसे ठीक करें : कोड की समीक्षा करें और$this
एक अलग प्रतिस्थापन चर के साथ$this
प्रतिस्थापित करें।
संबंधित सवाल:
- स्थैतिक के रूप में गैर स्थैतिक विधि को कॉल करें: PHP घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना
- कोड पर कॉपी करें: घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना
- सभी "ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना" स्टैक ओवरफ्लो पर प्रश्न
घातक त्रुटि: लेखन संदर्भ में फ़ंक्शन रिटर्न मान का उपयोग नहीं कर सकता
आमतौर पर empty
फ़ंक्शन का उपयोग करते समय ऐसा होता है।
उदाहरण:
if (empty(is_null(null))) {
echo 'empty';
}
ऐसा इसलिए है क्योंकि empty
एक भाषा निर्माण है और एक समारोह नहीं है, इसे 5.5 से पहले PHP संस्करणों में इसकी अभिव्यक्ति के रूप में अभिव्यक्ति के साथ नहीं कहा जा सकता है। PHP 5.5 से पहले, empty()
को तर्क एक चर होना चाहिए, लेकिन PHP 5.5+ में एक मनमानी अभिव्यक्ति (जैसे किसी फ़ंक्शन का वापसी मान) अनुमत है।
empty
, इसके नाम के बावजूद, वास्तव में यह जांच नहीं करता है कि कोई चर "खाली" है या नहीं। इसके बजाए, यह जांचता है कि कोई चर मौजूद नहीं है, या == false
। अभिव्यक्तियां (जैसे उदाहरण में is_null(null)
) हमेशा मौजूद होने के लिए समझा जाएगा, इसलिए empty
केवल तभी जांच कर रहा है जब यह झूठी के बराबर है। आप यहां empty()
को प्रतिस्थापित कर सकते हैं !
, उदाहरण के लिए if (!is_null(null))
, या स्पष्ट रूप से झूठी तुलना करें, उदाहरण के लिए if (is_null(null) == false)
।
संबंधित सवाल:
घातक त्रुटि: वर्ग [वर्ग का नाम] पुन: वर्गीकृत नहीं कर सकता
घातक त्रुटि: पुन: दावा नहीं कर सकता [फ़ंक्शन नाम]
इसका मतलब है कि आप या तो एक ही फ़ंक्शन / क्लास नाम का दो बार उपयोग कर रहे हैं और उनमें से किसी एक का नाम बदलने की आवश्यकता है, या ऐसा इसलिए है क्योंकि आपने 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
की परिभाषा वाली फ़ाइल केवल एक बार लोड की जाएगी, और त्रुटि से बचा जाएगा।
चेतावनी: [फ़ंक्शन] पैरामीटर 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:
चेतावनी: 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_fetch_array () पैरामीटर 1 संसाधन होने के लिए, बूलियन चुनने में अपेक्षित है
- सभी "mysql_fetch_array () पैरामीटर 1 संसाधन होने की अपेक्षा करता है, बूलियन दिया गया" स्टैक ओवरफ्लो पर प्रश्न
संबंधित त्रुटियां:
अन्य mysql*
फ़ंक्शंस जो कि एक MySQL परिणाम संसाधन को पैरामीटर के रूप में भी उम्मीद करते हैं, उसी कारण से एक ही त्रुटि उत्पन्न करेंगे।
चेतावनी: हेडर जानकारी संशोधित नहीं कर सकता - हेडर पहले ही भेजे गए हैं
ऐसा होता है जब आपकी स्क्रिप्ट क्लाइंट को 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 है।
संबंधित सवाल:
- हेडर पहले ही PHP द्वारा भेजे गए हैं
- सभी PHP "हेडर पहले ही भेजे गए हैं" स्टैक ओवरफ्लो पर प्रश्न
- बाइट ऑर्डर मार्क
- क्या PHP कार्य आउटपुट बनाएँ?
नोटिस: अनियमित स्ट्रिंग ऑफ़सेट: *
जैसा कि नाम इंगित करता है, इस प्रकार की त्रुटि होती है, जब आप अधिकतर पुन: प्रयास करने की कोशिश कर रहे हैं, या गैर-मौजूदा कुंजी के साथ सरणी से मान प्राप्त करते हैं।
आप पर विचार करें, $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'
नोटिस: अपरिभाषित निरंतर XXX का उपयोग - माना गया 'XXX'
या, PHP 7.2 या बाद में:
चेतावनी: अपरिभाषित निरंतर XXX का उपयोग - माना गया 'XXX' (यह PHP के भविष्य के संस्करण में एक त्रुटि फेंक देगा)
यह नोटिस तब होता है जब कोड में टोकन का उपयोग किया जाता है और स्थिर होता प्रतीत होता है, लेकिन उस नाम से निरंतर परिभाषित नहीं किया जाता है।
इस नोटिस के सबसे आम कारणों में से एक एसोसिएटिव सरणी कुंजी के रूप में उपयोग की जाने वाली स्ट्रिंग को उद्धृत करने में विफलता है।
उदाहरण के लिए:
// Wrong
echo $array[key];
// Right
echo $array['key'];
एक अन्य आम कारण एक परिवर्तनीय नाम के सामने $
(डॉलर) संकेत गायब है:
// Wrong
echo varName;
// Right
echo $varName;
या शायद आपने कुछ अन्य निरंतर या कीवर्ड गलत वर्तनी की है:
// Wrong
$foo = fasle;
// Right
$foo = false;
यह एक संकेत भी हो सकता है कि जब आप उस लाइब्रेरी द्वारा निरंतर परिभाषित करने का प्रयास करते हैं तो एक आवश्यक PHP एक्सटेंशन या लाइब्रेरी गुम होती है।
संबंधित सवाल:
नोटिस: अपरिभाषित सूचकांक
ऐसा होता है जब आप सरणी में मौजूद किसी कुंजी द्वारा किसी सरणी को एक्सेस करने का प्रयास करते हैं।
एक 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
संबंधित सवाल:
- संदर्भ: "नोटिस: अपरिभाषित चर" और "नोटिस: अपरिभाषित अनुक्रमणिका"
- सभी PHP "सूचना: अपरिभाषित सूचकांक" पर प्रश्न
- http://php.net/arrays
पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित 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 स्ट्रिंग्स मैनुअल पेज में वेरिएबल पार्सिंग पर अनुभाग देखें
पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_PAAMAYIM_NEKUDOTAYIM
स्कोप रेज़ोल्यूशन ऑपरेटर को हिब्रू פעמיים נקודתיים से "Paamayim Nekudotayim" भी कहा जाता है। जिसका अर्थ है "डबल कॉलन" या "डबल डॉट दो बार"।
यह त्रुटि आमतौर पर तब होती है जब आप अनजाने में ::
अपने कोड में डाल दें।
संबंधित सवाल:
- संदर्भ: PHP पार्स / सिंटेक्स त्रुटियां; और उन्हें कैसे हल करें?
- PHP में दो कॉलन का क्या अर्थ है?
- PHP में :: (डबल कॉलन) और -> (तीर) के बीच क्या अंतर है?
- अनपेक्षित T_PAAMAYIM_NEKUDOTAYIM, T_NS_Separator की अपेक्षा करता है
प्रलेखन:
पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_XXX
ऐसा होता है जब आपके पास अप्रत्याशित स्थान पर T_XXX
टोकन होता है, असंतुलित (अनावश्यक) कोष्ठक, php.ini में इसे सक्रिय किए बिना संक्षिप्त टैग का उपयोग, और बहुत कुछ।
संबंधित सवाल:
- संदर्भ: PHP पार्स / सिंटेक्स त्रुटियां; और उन्हें कैसे हल करें?
- पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित '{'
- पार्स त्रुटि: सिंटेक्स त्रुटि, मेरे PHP कोड में फ़ाइल का अप्रत्याशित अंत
- पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित '<' में - ठीक करें?
- पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित '?'
आगे की सहायता के लिए देखें:
- http://phpcodechecker.com/ - जो आपके वाक्यविन्यास संकटों पर कुछ और उपयोगी स्पष्टीकरण प्रदान करता है।
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
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.
Notice: Trying to get property of non-object error
Happens when you try to access a property of an object while there is no object.
A typical example for a non-object notice would be
$users = json_decode('[{"name": "hakre"}]');
echo $users->name; # Notice: Trying to get property of non-object
In this case, $users
is an array (so not an object) and it does not have any properties.
This is similar to accessing a non-existing index or key of an array (see Notice: Undefined Index ).
This example is much simplified. Most often such a notice signals an unchecked return value, eg when a library returns NULL
if an object does not exists or just an unexpected non-object value (eg in an Xpath result, JSON structures with unexpected format, XML with unexpected format etc.) but the code does not check for such a condition.
As those non-objects are often processed further on, often a fatal-error happens next on calling an object method on a non-object (see: Fatal error: Call to a member function ... on a non-object ) halting the script.
It can be easily prevented by checking for error conditions and/or that a variable matches an expectation. Here such a notice with a DOMXPath example:
$result = $xpath->query("//*[@id='detail-sections']/div[1]");
$divText = $result->item(0)->nodeValue; # Notice: Trying to get property of non-object
The problem is accessing the nodeValue
property (field) of the first item while it has not been checked if it exists or not in the $result
collection. Instead it pays to make the code more explicit by assigning variables to the objects the code operates on:
$result = $xpath->query("//*[@id='detail-sections']/div[1]");
$div = $result->item(0);
$divText = "-/-";
if ($div) {
$divText = $div->nodeValue;
}
echo $divText;
Related errors:
- नोटिस: अपरिभाषित सूचकांक
- Fatal error: Call to a member function ... on a non-object
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:
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.