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


Answers

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

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

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

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

एक विशिष्ट उदाहरण होगा

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

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

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

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

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

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

यह क्या है?

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

ऐसा क्यों है?

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

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

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

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

सूचि

यह भी देखें




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

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

एक Undefined Index नोटिस के लिए एक विशिष्ट उदाहरण होगा ( डेमो )

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

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

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

$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

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




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

$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 अलग प्रतिस्थापन चर के साथ बदलें।

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

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



घातक त्रुटि: अनिर्धारित फ़ंक्शन 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() एक मौजूदा फ़ंक्शन के रीडकेवारेशन के बारे में त्रुटि को ट्रिगर करेगा।

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

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

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

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

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

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

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



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 (पोस्ट n ° 10 को संपादित करने के लिए) सबमिट करने के लिए एक फार्म के साथ शामिल किया जा सकता है

यदि प्रस्तुत पाठ में एकल उद्धरण शामिल हों तो क्या होगा? $query साथ समाप्त होगा:

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

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

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

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

प्रलेखन:




पार्स त्रुटि: सिंटैक्स त्रुटि, अनपेक्षित 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 उपयोग करने की अनुमति देगा, और 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 स्ट्रिंग मैन्युअल पेज में वेरिएबल पार्सिंग पर अनुभाग देखें




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

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

इसका अर्थ है आप या तो एक ही फ़ंक्शन / वर्ग का नाम दो बार प्रयोग कर रहे हैं और उनमें से एक का नाम बदलने की ज़रूरत है, या ऐसा इसलिए है क्योंकि आपने require उपयोग किया require या include उस स्थान का उपयोग किया जाना चाहिए जहां आप की require होनी चाहिए या 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 होने की require है, हम निश्चित हो सकते हैं कि फाइल जिसमें MyClass की परिभाषा होती है, केवल एक बार भरी जाएगी, और त्रुटि से बचा जायेगा।




सूचना: अपरिभाषित निरंतर XXX का उपयोग - 'XXX' मान लिया गया

यह नोटिस तब होता है जब कोड में टोकन का उपयोग किया जाता है और एक स्थिर प्रतीत होता है, लेकिन उस नाम से एक स्थिर परिभाषित नहीं होता है।

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

उदाहरण के लिए:

// Wrong
echo $array[key];

// Right
echo $array['key'];

एक अन्य आम कारण एक चर नाम के पीछे लापता $ (डॉलर) चिह्न है:

// Wrong
echo varName;

// Right
echo $varName;

यह एक संकेत भी हो सकता है कि एक आवश्यक PHP एक्सटेंशन या लाइब्रेरी अनुपलब्ध है जब आप उस पुस्तकालय द्वारा निरंतर परिभाषित करने का प्रयास करते हैं।

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




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

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

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

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

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

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

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




सूचना: आरंभिक तार ऑफसेट: *

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

विचार करें, $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 से गिनती शुरू होता है और D 4 तक पहुंचने के समय से, यह एक ऑफ़सेट त्रुटि फेंक देगा।

समान त्रुटियाँ:

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



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

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

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

MySQL मॉड्यूल में दो संसाधन प्रकार हैं। पहले एक डेटाबेस कनेक्शन, दूसरा एक संसाधन है जो एक प्रश्न का परिणाम धारण के लिए लिंक पहचानकर्ता है।

CURL विस्तार एक और परिभाषित करता है दो संसाधन प्रकार :

... एक cURL संभाल और एक cURL बहु संभाल।

जब var_dumpएड, मूल्यों इस तरह दिखेगा:

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

resource(1) of type (curl)

यही कारण है, सभी सबसे संसाधन हैं एक संख्यात्मक पहचानकर्ता ( (1)एक खास प्रकार के) ( (curl))।

आप चारों ओर ले जाने के लिए इन संसाधनों और उन्हें जिसके लिए इस तरह के एक संसाधन कुछ का मतलब है विभिन्न कार्यों के लिए गुजरती हैं। आमतौर पर इन कार्यों पृष्ठभूमि में कुछ डेटा का आवंटन और एक संसाधन सिर्फ एक संदर्भ जो वे आंतरिक रूप से इस डेटा का ट्रैक रखने के लिए करते हैं।

" ... उम्मीद पैरामीटर 1 संसाधन, यह देखते हुए बूलियन होना करने के लिए " त्रुटि आम तौर पर एक अनियंत्रित आपरेशन कि एक संसाधन बनाने के लिए चाहिए था, लेकिन उसके परिणाम का नतीजा है falseबजाय। उदाहरण के लिए, fopenसमारोह इस विवरण नहीं है:

वापसी मान

एक फ़ाइल सूचक संसाधन सफलता पर, या रिटर्न FALSEत्रुटि पर।

इस कोड में तो, $fpया तो एक हो जाएगा resource(x) of type (stream)या false:

$fp = fopen(...);

आप की जाँच नहीं करते हैं कि क्या fopenकार्रवाई सफल या असफल है और इसलिए है कि क्या $fpएक वैध स्रोत है या falseऔर पारित $fpएक और समारोह जो एक संसाधन की उम्मीद करने के लिए, आप ऊपर त्रुटि मिलती है हो सकता है:

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

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

तुम हमेशा त्रुटि के लिए कार्य करता है जो एक संसाधन आवंटित करने के लिए कोशिश कर रहे हैं की वापसी मान की जाँच की जरूरत है और विफल हो सकता है :

$fp = fopen(...);

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

$data = fread($fp, 1024);

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




चेतावनी: अवैध स्ट्रिंग ऑफसेट 'XXX'

यह तब होता है जब आप वर्ग कोष्ठक वाक्य रचना के साथ एक सरणी तत्व तक पहुँचने का प्रयास है, लेकिन आप एक स्ट्रिंग पर यह कर रहे हैं, और एक सरणी पर नहीं है, इसलिए आपरेशन स्पष्ट रूप से मतलब नहीं है

उदाहरण:

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

अगर आपको लगता है चर श्रृंखला होनी चाहिए, देखें कि यह कहाँ से आता है और वहाँ इस समस्या को ठीक।




चेतावनी: mysql_connect (): पहुँच उपयोगकर्ता 'नाम' @ 'होस्ट' के लिए इनकार किया

यह चेतावनी दिखाई देता है जब आप अमान्य या गुम क्रेडेंशियल्स (उपयोगकर्ता नाम / पासवर्ड) के साथ एक MySQL / MariaDB सर्वर से कनेक्ट। तो यह आम तौर पर है नहीं एक कोड समस्या है, लेकिन सर्वर कॉन्फ़िगरेशन की समस्या।

  • पर मैनुअल पृष्ठ देखें mysql_connect("localhost", "user", "pw")उदाहरण के लिए।

  • जाँच करें कि आप वास्तव में एक प्रयोग किया जाता है $usernameऔर $password

    • ने कहा: जो है क्या हुआ जब चेतावनी - ऐसा नहीं है कि आप कोई पासवर्ड का उपयोग कर पहुँच प्राप्त नहीं होता (using password: NO)
    • केवल स्थानीय परीक्षण सर्वर आमतौर पर उपयोगकर्ता नाम के साथ कनेक्ट करने की अनुमति देता है root, कोई पासवर्ड, और testडेटाबेस नाम।

    • अगर वे कर रहे हैं आप परीक्षण कर सकते हैं वास्तव में सही कमांड लाइन ग्राहक का उपयोग कर:
      mysql --user="username" --password="password" testdb

    • उपयोगकर्ता नाम और पासवर्ड हैं केस-संवेदी और रिक्त स्थान को है नहीं नजरअंदाज कर दिया। अपना पासवर्ड मेटा वर्ण की तरह हैं, तो $, उन्हें बचने के लिए, या में पासवर्ड डाल एकल उद्धरण

    • अधिकांश साझा होस्टिंग प्रदाता यूनिक्स उपयोगकर्ता खाता (कभी कभी बस उपसर्ग या अतिरिक्त संख्यात्मक प्रत्यय) के संबंध में mysql खातों predeclare। एक पासवर्ड सेट करने के लिए एक पैटर्न या दस्तावेज, और CPanel या जो कुछ भी इंटरफेस के लिए दस्तावेज़ देख सकेंगे।

    • पर MySQL मैनुअल देखें उपयोगकर्ता खातों को जोड़ने से कमांड लाइन का उपयोग कर। जब के रूप में जुड़े व्यवस्थापक उपयोगकर्ता आप की तरह एक क्वेरी जारी कर सकते हैं:
      CREATE USER 'username'@'localhost' IDENTIFIED BY 'newpassword';

    • या का उपयोग Adminer या कार्यक्षेत्र या, बनाने की जाँच करें या सही खाते के विवरण में किसी भी अन्य ग्राफिकल टूल।

    • आप अपने क्रेडेंशियल्स को ठीक नहीं कर सकते, तो इंटरनेट "मदद कृपया" करने के लिए पूछ रहा कोई असर नहीं होगा। केवल आप और अपने होस्टिंग प्रदाता अनुमतियाँ और पर्याप्त पहुँच का निदान करने और चीजों को ठीक करने के लिए किया है।

  • सत्यापित करें कि आप तक पहुँच सकता है , डेटाबेस सर्वर अपने प्रदाता द्वारा दिए गए होस्ट नाम का उपयोग करते हुए:
    ping dbserver.hoster.example.net

    • एक SSH अपने वेब सर्वर पर सीधे कंसोल से इस की जाँच करें। अपने स्थानीय विकास ग्राहक से अपने साझा होस्टिंग सर्वर के लिए परीक्षण शायद ही कभी सार्थक है।

    • अक्सर आप सिर्फ सर्वर नाम होना चाहते हैं "localhost", जो आम तौर पर एक स्थानीय नामित सॉकेट जब उपलब्ध का इस्तेमाल करता है। Othertimes तुम कोशिश कर सकते "127.0.0.1"वापस आने के रूप में।

    • चाहिए अपने MySQL / MariaDB सर्वर एक अलग बंदरगाह पर सुनने है, तो का उपयोग "servername:3306"

    • अगर यह काम नहीं है, तो वहाँ एक शायद एक फ़ायरवॉल मुद्दा है। (विषय से संबंधित नहीं है, न कि एक प्रोग्रामिंग सवाल। कोई दूरस्थ अनुमान-की मदद करने के लिए संभव।)

  • का उपयोग करते समय स्थिरांक जैसे जैसे DB_USERया DB_PASSWORD, जाँच करें कि वे वास्तव में कर रहे हैं परिभाषित

    • यदि आप एक मिलता है "Warning: Access defined for 'DB_USER'@'host'"और एक "Notice: use of undefined constant 'DB_PASS'"है, तो है कि आपकी समस्या है।

    • सत्यापित करें कि आपके जैसे xy/db-config.phpवास्तव में शामिल किया गया था और whatelse।

  • सही तरीके से सेट के लिए जाँच करें GRANTअनुमतियाँ

    • यह एक है करने के लिए पर्याप्त नहीं है username+ passwordजोड़ी।

    • प्रत्येक MySQL / MariaDB खाता अनुमतियों की एक संलग्न सेट हो सकता है।

    • उन सीमित कर सकते हैं जो डेटाबेस आप जो क्लाइंट / सर्वर से कनेक्शन से ही शुरू हो सकता है, से कनेक्ट करने के लिए अनुमति दी जाती है, और जिन तक प्रश्नों की अनुमति है।

    • "प्रवेश निषेध" इस प्रकार की चेतावनी के साथ ही के लिए दिखाई दे सकते हैं mysql_query, कॉल आप करने के लिए अनुमति यदि नहीं SELECTएक विशिष्ट तालिका से, या INSERT/ UPDATEऔर अधिक सामान्यतः DELETEकुछ भी।

    • आप कर सकते हैं खाता अनुमतियों अनुकूलन का उपयोग करते समय प्रति कमांड लाइन ग्राहक जुड़े व्यवस्थापक खाते की तरह एक प्रश्न के साथ:
      GRANT ALL ON yourdb.* TO 'username'@'localhost';

  • चेतावनी के साथ पहली बार दिखाई देती है Warning: mysql_query(): Access denied for user ''@'localhost'तो आप एक हो सकता है php.ini-पहले से कॉन्फ़िगर खाता / पासवर्ड जोड़ा

    • कि जाँच करें mysql.default_user=और mysql.default_password=सार्थक मान हैं।

    • कई बार यह एक प्रदाता-विन्यास है। तो बेमेल के लिए उनके समर्थन से संपर्क करें।

  • अपने साझा होस्टिंग सेवा प्रदाता की दस्तावेज़ प्राप्त करें:

  • ध्यान दें कि आप भी हो सकता है उपलब्ध कनेक्शन पूल समाप्त । आपके पास बहुत अधिक समवर्ती कनेक्शन के लिए पहुँच से मना कर चेतावनी मिल जाएगा। (आप सेटअप की जांच के लिए किया है। यही कारण है कि एक विषय से हटकर सर्वर कॉन्फ़िगरेशन की समस्या, नहीं एक प्रोग्रामिंग सवाल है।)

  • आपका libmysql ग्राहक संस्करण संगत नहीं हो सकता है डाटाबेस सर्वर के साथ। आम तौर पर MySQL और MariaDB सर्वर ड्राइवर में संकलित PHPs के साथ पहुँचा जा सकता है। आप एक कस्टम स्थापना, या किसी पुराने PHP संस्करण है, और एक बहुत नए डेटाबेस सर्वर, या काफी पुरानी हो चुकी एक है - तो संस्करण बेमेल कनेक्शन रोक सकता है। (नहीं, आप अपने आप को जांच करने के लिए किया है। कोई भी अपने स्थापना अनुमान लगा सकते हैं)।

अधिक संदर्भ:

Btw, तो आप शायद नहीं उपयोग करना चाहते हैं mysql_*अब और कार्यों । नए चेहरे अक्सर में माइग्रेट mysqli , जो हालांकि बस के रूप में कठिन है। इसके बजाय को पढ़ने पीडीओ और तैयार बयान
$db = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");




चेतावनी: शून्य से विभाजन

चेतावनी संदेश 'डिवीजन शून्य से' नई PHP डेवलपर के बीच सबसे अधिक पूछे जाने वाले प्रश्नों में से एक है। यह त्रुटि एक अपवाद है, इसलिए, कुछ डेवलपर्स कभी कभी चेतावनी अभिव्यक्ति से पहले त्रुटि दमन ऑपरेटर @ जोड़कर दबाने जाएगा पैदा नहीं होगी। उदाहरण के लिए:

$value = @(2 / 0);

लेकिन, किसी चेतावनी के साथ की तरह, सबसे अच्छा तरीका चेतावनी के कारण नज़र रखने और उसे हल करने के लिए होगा। चेतावनी के कारण किसी भी घटना से आने के लिए आप जहां 0, एक चर बराबर से 0 को विभाजित करने के लिए प्रयास करने के लिए जा रहा है, या एक चर जो सौंपा नहीं किया गया है (क्योंकि शून्य == 0) क्योंकि परिणाम 'अनिर्धारित' दिया जाएगा।

इस चेतावनी को ठीक करने के लिए, आप यह देखना होगा कि मान 0 नहीं है आपकी अभिव्यक्ति को फिर से लिखने चाहिए, अगर ऐसा है, कुछ और। यदि मान शून्य है आप को विभाजित नहीं करना चाहिए, या 1 के लिए मूल्य बदल सकते हैं और उसके बाद ही अतिरिक्त चर से विभाजित होने के बराबर में ऐसा विभाजन परिणाम विभाजित करते हैं।

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
}

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