/ / संदर्भ - PHP में यह त्रुटि क्या है? - PHP, mysql, डीबगिंग, चेतावनियां

संदर्भ - PHP में यह त्रुटि क्या है? - PHP, mysql, डीबगिंग, चेतावनियां

यह क्या है?

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

ऐसा क्यों है?

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

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

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

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

सूचि

और देखें

उत्तर:

जवाब के लिए 226 № 1

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

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

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

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

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

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

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

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

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

यह भी सुनिश्चित करें कि आप डॉन "टी अपने कोड में किसी भी बाइट आदेश के निशान है, उदाहरण के लिए जब स्क्रिप्ट की एंकोडिंग utf-8 BOM के साथ है ।

संबंधित प्रश्न:


उत्तर № 2 के लिए १५७

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

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

यह एक गंभीर त्रुटि है जो स्क्रिप्ट बंद हो जाएगा (आगे संगतता सूचना: यह एक पकड़ने योग्य त्रुटि के साथ शुरू हो जाएगा PHP 7) ।

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

ठेठ उदाहरण होगा

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

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

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

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

किसी अंय समस्या सशर्त हो सकता है कोई ऑब्जेक्ट बनाने और फिर उस कंडीशनल ब्लॉक के बाहर एक विधि को कॉल करने का प्रयास कर रहा है ।उदाहरण के लिए

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

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

संबंधित प्रश्न:


उत्तर № 3 के लिए १०२

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

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

यदि आपके पास त्रुटि लॉगिंग सक्षम है, तो आप अपने त्रुटि लॉग में ठोस त्रुटि संदेश मिल जाएगा ।यह आमतौर पर एक फ़ाइल में किया जाएगा "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 अपने स्वयं के लॉग फ़ाइल स्थान का चयन करने के लिए निर्देश ।

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

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

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


उत्तर № 4 के लिए ९०

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

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

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

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

दोनों spinach तथा 1 सरणी में मौजूद नहीं है, जिससे एक E_NOTICE चालू हो जाए ।

यह सुनिश्चित करने के लिए समाधान है कि अनुक्रमणिका तक पहुंचने से पहले इंडेक्स या ऑफ़सेट मौजूद है ।इसका मतलब यह हो सकता है कि आप अपने कार्यक्रम में एक बग को ठीक करने के लिए सुनिश्चित करें कि उन अनुक्रमित मौजूद है जब आप उंहें उंमीद की जरूरत है ।या इसका अर्थ यह हो सकता है कि आपको यह परीक्षण करने की आवश्यकता है कि इंडेक्स का उपयोग करना 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

संबंधित प्रश्न:


७६ उत्तर № के लिए 5

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

सबसे पहले:

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


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

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

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

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

संबंधित प्रश्न:

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

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


जवाब नहीं 6 के लिए ७०

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

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

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

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

    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 गंभीर त्रुटि: जब ऑब्जेक्ट प्रसंग में नहीं $this का उपयोग करना
  2. कोड पर कॉपी करें: घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना
  3. सभी "का उपयोग $this जब ऑब्जेक्ट संदर्भ में नहीं" stackoverflow पर प्रश्न

जवाब के लिए कोई 7 ६७

गंभीर त्रुटि: अनिर्धारित फ़ंक्शन XXX करने के लिए कॉल

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

उदाहरण 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() किसी मौजूदा फ़ंक्शन के redeclaration के बारे में त्रुटि ट्रिगर करेगा ।

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

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

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

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

typos के मामले में, typo को ठीक करें ।

संबंधित प्रश्न:


जवाब नहीं 8 के लिए ६६

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

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

संबंधित प्रश्न:

आगे की मदद के लिए देखें:

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

६१ जवाब नहीं 9 के लिए

घातक त्रुटि: लेखन संदर्भ में फ़ंक्शन रिटर्न मान का उपयोग नहीं कर सकता है

यह आमतौर पर होता है जब एक समारोह के साथ सीधे का उपयोग empty.

उदाहरण:

if (empty(is_null(null))) {
echo "empty";
}

यह है क्योंकि empty एक भाषा का निर्माण और नहीं एक समारोह है, यह ५.५ से पहले PHP संस्करणों में अपने तर्क के रूप में एक अभिव्यक्ति के साथ नहीं कहा जा सकता है ।PHP ५.५ से पहले, के लिए तर्क empty() एक होना चाहिए परिवर्तनशील, लेकिन एक मनमाना [हटा] जैसे एक समारोह के एक वापसी मूल्य) PHP 5.5 में स्वीकार्य है ।

empty, इसके नाम के बावजूद, वास्तव में अगर एक चर "खाली" है की जांच नहीं करता है ।इसके बजाय, यह जांच करता है अगर एक चर doesn ' t मौजूद है, या == false. भाव (जैसे is_null(null) उदाहरण में) हमेशा के लिए मौजूद माना जाएगा, तो यहां empty केवल जांच है अगर यह झूठी के बराबर है । आप बदल सकते है empty() यहाँ के साथ !, उदा। if (!is_null(null)), या स्पष्ट रूप से false से तुलना करें, उदा. if (is_null(null) == false).

संबंधित प्रश्न:


५७ जवाब नहीं 10 के लिए

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

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

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

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

इस कोड को सबमिट करने के लिए प्रपत्र के साथ किसी पृष्ठ में शामिल किया जा सकता है, जैसे किसी URL के साथ 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, आपकी स्क्रिप्ट SQL इंजेक्शन के लिए खुला हो जाएगा ।एक एसक्यूएल इंजेक्शन परिवर्तन, हानि या एक रिकॉर्ड, एक मेज या एक पूरे डेटाबेस के संशोधन के कारण हो सकता है ।यह एक बहुत ही गंभीर सुरक्षा मुद्दा है!

प्रलेखन:


४९ जवाब नहीं 11 के लिए

घातक त्रुटि: XXX बाइट्स की अनुमति दी गई स्मृति आकार (XXX बाइट आवंटित करने का प्रयास किया गया)

आपकी स्क्रिप्ट चलाने के लिए पर्याप्त स्मृति नहीं है । PHP स्मृति सीमा तक पहुंच गया है और इसे क्रियांवित बंद हो जाता है ।यह त्रुटि घातक है, स्क्रिप्ट रोकता है । का मान स्मृति की सीमा में या तो कॉंफ़िगर किया जा सकता है php.ini फ़ाइल या का उपयोग करके ini_set("memory_limit", "128 M"); लिपि में (जो में परिभाषित मूल्य को अधिलेखित कर देगा php.ini). स्मृति सीमा का उद्देश्य सभी उपलब्ध स्मृति gobbling से एक PHP स्क्रिप्ट को रोकने और पूरे वेब सर्वर नीचे लाने के लिए है ।

पहली बात करने के लिए स्मृति की मात्रा को कम करने के लिए अपनी स्क्रिप्ट की जरूरत है ।उदाहरण के लिए, यदि आप "एक चर में एक बड़ी फ़ाइल पढ़ रहे है या एक डेटाबेस से कई रिकॉर्ड ला रहे है और उंहें एक सरणी में सभी भंडारण कर रहे हैं, कि स्मृति का एक बहुत का उपयोग कर सकते हैं ।इसके बजाय पंक्ति द्वारा फ़ाइल पंक्ति को पढ़ने या डेटाबेस रिकॉर्ड एक समय में उंहें सभी स्मृति में संग्रहीत किए बिना लाने के लिए अपना कोड परिवर्तित करें ।यह क्या "परदे के पीछे पर जा रहा है और जब डेटा बनाम स्मृति में संग्रहीत है की एक संकल्पनात्मक जागरूकता का एक बिट की आवश्यकता होती हैकहीं.

यदि यह त्रुटि उत्पंन हुई जब आपकी स्क्रिप्ट स्मृति-गहन कार्य नहीं कर रही थी, तो आपको यह देखने के लिए अपने कोड की जांच करने की आवश्यकता होगी कि क्या स्मृति रिसाव है ।को memory_get_usage समारोह में अपने दोस्त है ।

संबंधित प्रश्न:


४५ जवाब के लिए कोई 12

पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित 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"]}";

बेशक, विकल्प के लिए कोई के ऊपर के बजाय यह लगाना में सरणी चर concatenate है:

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

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


३९ उत्तर के लिए कोई 13

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

स्कोप रिज़ॉल्यूशन ऑपरेटर को हिब्रू से "पैमायम नेकुदोटयिम" भी कहा जाता है। जिसका अर्थ है "डबल कोलन" या "डबल डॉट दो बार"।

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

संबंधित प्रश्न:

प्रलेखन:


३७ उत्तर के लिए कोई 14

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

घातक त्रुटि: रिक्लेयर नहीं कर सकता [फंक्शन का नाम]

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


३७ उत्तर के लिए कोई 15

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

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

यह कारणों की एक किस्म के लिए हो सकता है:

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

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

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

या:

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

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

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

संबंधित प्रश्न:

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


३६ उत्तर के लिए कोई 16

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

होता है जब आप एक चर कि wasn "पहले परिभाषित t का उपयोग करने का प्रयास करें ।

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

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

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

सही तरीका यह प्रयोग करने से पहले चर सेट होगा, भले ही यह ' एस बस एक खाली स्ट्रिंग की तरह

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

संबंधित प्रश्न:


३५ उत्तर के लिए कोई 17

नोटिस: अपरिभाषित निरंतर XXX का उपयोग - माना गया "XXX"

या, PHP ७.२ या बाद में:

चेतावनी: अपरिभाषित लगातार XXX का उपयोग करें-कल्पित "XXX" (यह PHP के भविष्य के संस्करण में एक त्रुटि फेंक देंगे)

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

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

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

// Wrong
echo $array[key];

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

एक अंय सामांय कारण है एक अनुपलब्ध $ (डॉलर) एक चर नाम के सामने साइन इन करें:

// Wrong
echo varName;

// Right
echo $varName;

या शायद तुम कुछ अंय निरंतर या खोजशब्द अशुद्ध वर्तनी है:

// Wrong
$foo = fasle;

// Right
$foo = false;

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

संबंधित प्रश्न:


28 के लिए कोई जवाब नहीं 18

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

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

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

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

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

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

संबंधित प्रश्न:


28 के लिए कोई जवाब नहीं 19

सूचना: शुरू नहीं की गई स्ट्रिंग ऑफ़सेट: *

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

तुम पर विचार, हर पत्र दिखाने की कोशिश कर रहे है $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 तुम ' ll त्रुटि मिल जाए, क्योंकि अंदर for() लूप, आप PHP से कहा है कि आप से पांचवीं स्ट्रिंग चरित्र को दिखाने के लिए पहले "ABCD" जो, मौजूद है, लेकिन क्योंकि पाश से गिनती शुरू होती है 0 और गूंज D जब तक यह पहुंचता है 4, यह एक ऑफसेट त्रुटि फेंक देंगे ।

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


27 के लिए कोई जवाब नहीं 20

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

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

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

पार्स त्रुटि: सिंटैक्स त्रुटि, अनपेक्षित T_VARIABLE पर रेखा x

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

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

उत्तर

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

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

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

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

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

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

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

error_reporting(E_ALL);

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

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

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

संबंधित प्रश्न:


25 जवाब नहीं 21 के लिए

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

यह त्रुटि दो वेरिएन्स में आती है:

भिंनता 1

$arr = [1, 2, 3];

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

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

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

भिंनता 2

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

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

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

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


23 कोई जवाब नहीं 22 के लिए

नोटिस: गैर-ऑब्जेक्ट त्रुटि की संपत्ति प्राप्त करने का प्रयास कर रहा है

होता है जब आप किसी ऑब्जेक्ट के किसी गुण तक पहुँचने का प्रयास करते समय कोई ऑब्जेक्ट नहीं है ।

एक गैर-वस्तु सूचना के लिए एक विशिष्ट उदाहरण होगा

$users = json_decode("[{"name": "hakre"}]");
echo $users->name; # Notice: Trying to get property of non-object

इस मामले में, $users एक सरणी है (तो एक वस्तु नहीं) और यह कोई गुण नहीं है ।

यह एक गैर-मौजूदा अनुक्रमणिका या किसी सरणी की कुंजी तक पहुंचने के समान है (देखें नोटिस: अपरिभाषित सूचकांक)।

यह उदाहरण बहुत सरल है । अक्सर इस तरह के एक नोटिस एक अनियंत्रित वापसी मूल्य का संकेत है, उदा ।जब कोई लायब्रेरी देता है NULL यदि कोई ऑब्जेक्ट मौजूद नहीं है या केवल अनपेक्षित गैर-ऑब्जेक्ट मान (उदा.किसी Xpath परिणाम में, अनपेक्षित स्वरूप के साथ JSON संरचनाएं, XML अनपेक्षित स्वरूप आदि के साथ) लेकिन कोड ऐसी शर्त के लिए जांच नहीं करता है ।

के रूप में उन गैर वस्तुओं अक्सर पर आगे संसाधित कर रहे हैं, अक्सर एक घातक-त्रुटि एक गैर पर एक वस्तु विधि बुला पर अगले होता है-वस्तु (देखें: घातक त्रुटि: किसी गैर-ऑब्जेक्ट पर किसी सदस्य फ़ंक्शन को कॉल करें) स्क्रिप्ट को विराम ।

यह त्रुटि की स्थिति के लिए जांच करके आसानी से रोका जा सकता है और/या कि एक चर एक उंमीद से मेल खाता है ।यहां इस तरह के एक नोटिस के साथ एक DOMXPath उदाहरण:

$result  = $xpath->query("//*[@id="detail-sections"]/div[1]");
$divText = $result->item(0)->nodeValue; # Notice: Trying to get property of non-object

समस्या पहुंच रही है nodeValue पहले आइटम का गुण (फ़ील्ड) हालांकि यह चेक नहीं किया गया है यदि वह मौजूद है या नहीं $result संग्रह. इसके बजाय यह कोड वस्तुओं पर संचालित करने के लिए चर निर्दिष्ट द्वारा और अधिक स्पष्ट करने के लिए भुगतान करता है:

$result  = $xpath->query("//*[@id="detail-sections"]/div[1]");
$div     = $result->item(0);
$divText = "-/-";
if ($div) {
$divText = $div->nodeValue;
}
echo $divText;

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


22 उत्तर के लिए नहीं 23

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

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

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

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

कर्ल एक्सटेंशन दूसरे को परिभाषित करता है दो संसाधन प्रकार:

... कर्ल हैंडल और कर्ल मल्टी हैंडल ।

कब var_dumped, मान इस तरह दिखते हैं:

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

resource(1) of type (curl)

कि "s सभी अधिकांश संसाधन हैं, एक संख्यात्मक पहचानकर्ता ((1)) एक निश्चित प्रकार के ((curl))।

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


"... पैरामीटर 1 को संसाधन, बूलियन दिए जाने की अपेक्षा करता है"त्रुटि सामान्यतया एक संसाधन बनाने के लिए supposed था एक अनचेक की गई कार्रवाई का परिणाम है, लेकिन दिए गए 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);

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


18 उत्तर के लिए कोई 24

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

यह तब होता है जब आप वर्ग कोष्ठक सिंटैक्स के साथ किसी सरणी तत्व तक पहुँचने का प्रयास करें, लेकिन आप "एक स्ट्रिंग पर यह कर रहा है, और नहीं एक सरणी पर, इसलिए कार्रवाई स्पष्ट रूप से doesn ' t भावना बना.

उदाहरण:

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

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


उत्तर के लिए 17 नहीं 25

संहिता नहीं चला / मेरे PHP कोड के कुछ हिस्सों की तरह दिखता है आउटपुट

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

वास्तव में अपने PHP लिपियों चलाने के लिए, आप की जरूरत है:

  • एक वेब सर्वर जो आपकी स्क्रिप्ट निष्पादित करता है
  • . php के लिए फ़ाइल एक्सटेंशन सेट, अंयथा वेब सर्वर जीता "टी यह व्याख्या के रूप में ऐसे *
  • वेब सर्वर के माध्यम से अपने. php फ़ाइल का उपयोग

* जब तक आप इसे पुनः विंयस्त, सब कुछ विंयस्त किया जा सकता है ।

यह पिछले एक विशेष रूप से महत्वपूर्ण है । बस डबल क्लिक फ़ाइल की संभावना यह आपके ब्राउज़र में इस तरह के रूप में एक पते का उपयोग कर खुला होगा:

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

यह पूरी तरह से आप चल रहे हो सकता है किसी भी वेब सर्वर को दरकिनार है और फ़ाइल व्याख्या नहीं हो रही है ।आपको अपने वेब सर्वर पर फ़ाइल के URL पर जाने की आवश्यकता है, संभावित रूप से कुछ ऐसा:

http://localhost/my/file.php

आप यह भी जांच करना चाह सकते है कि क्या आप "लघु खुले टैग्स का उपयोग कर रहे है <? के बजाय <?php और अपने PHP विंयास कम खुले टैग बंद कर दिया है ।

और देखें PHP कोड निष्पादित नहीं किया जा रहा है, बजाय कोड पृष्ठ पर दिखाता है


16 के लिए कोई जवाब नहीं 26

चेतावनी: mysql_connect (): प्रवेश निषेध उपयोगकर्ता के लिए "नाम" @ "होस्ट"

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

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

  • जांच करें कि आप वास्तव में इस्तेमाल किया एक $username तथा $password.

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

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

    • उपयोगकर्ता नाम और पासवर्ड है अक्षर संवेदनशील और रहितसफेद है नहीं अनदेखी. यदि आपके पासवर्ड में मेटा वर्ण जैसे $, उंहें बच, या पासवर्ड में डाल एकल कोट.

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

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

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

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

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

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

    • अक्सर तुम सिर्फ सर्वर का नाम होना चाहता हूं "localhost", जो आम तौर पर एक स्थानीय नाम सॉकेट का इस्तेमाल जब उपलब्ध है । अन्य बार आप कोशिश कर सकते हैं "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 अनुमतियाँ.

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

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

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

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

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

  • यदि चेतावनी के साथ पहले दिखाता है Warning: mysql_query(): Access denied for user ""@"localhost" तो फिर तुम हो सकता है एक php. ini-preconfigured खाता/.

    • जांच करे mysql.default_user= तथा mysql.default_password= सार्थक मूल्य है ।

    • Oftentimes यह एक प्रदाता-कॉंफ़िगरेशन है । तो mismatches के लिए उनके समर्थन से संपर्क करें ।

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

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

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

अधिक संदर्भ:

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


14 उत्तर के लिए नहीं 27

नोटिस: स्ट्रिंग रूपांतरण करने के लिए ऐरे

यह बस होता है यदि आप एक स्ट्रिंग के रूप में एक सरणी के इलाज की कोशिश:

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

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

एक सरणी बस नहीं किया जा सकता है echo"d या एक स्ट्रिंग के साथ concatenated, क्योंकि परिणाम अच्छी तरह से परिभाषित नहीं है ।PHP स्ट्रिंग सरणी के स्थान पर "सरणी" का उपयोग करें, और सूचना को ट्रिगर करने के लिए कहना है कि "शायद नहीं क्या इरादा था और है कि आप अपने कोड की जांच यहां होना चाहिए ।आप शायद इस तरह के बजाय कुछ करना चाहते हैं:

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

या सरणी लूप:

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

यदि यह नोटिस कहीं दिखाई देता है आप "t उंमीद है, यह एक चर जो तुमने सोचा था कि एक स्ट्रिंग वास्तव में एक सरणी है मतलब है ।इसका मतलब है कि आप अपने कोड जो इस चर तुम उंमीद स्ट्रिंग के बजाय एक सरणी बनाता में एक बग है ।


11 उत्तर के लिए कोई 28

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

चेतावनी संदेश "शूंय से डिवीजन" नए 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
}

संबंधित प्रश्न:


8 उत्तर के लिए कोई 29

सख्त मानक: गैर स्थैतिक विधि [<वर्ग> :: <विधि>] स्थिर रूप से नहीं कहा जाना चाहिए

तब होती है जब आप एक गैर-स्थैतिक पद्धति को किसी वर्ग पर कॉल करने का प्रयास करते है क्योंकि यह स्थैतिक था, और आपके पास E_STRICT अपने में झंडा error_reporting() सेटिंग्स।

उदाहरण :

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

HTML::br() या $html::br()

आप वास्तव में नहीं जोड़ कर इस त्रुटि से बच सकते है E_STRICT सेवा मेरे error_reporting()उदाहरण के लिए

error_reporting(E_ALL & ~E_STRICT);

के बाद से PHP 5.4.0 और इसके बाद के संस्करण के लिए के रूप में, E_STRICT में शामिल है E_ALL [रेफरी]. लेकिन यह एडविसेबल नहीं है । समाधान के लिए वास्तविक रूप में अपने इच्छित स्थैतिक फ़ंक्शन को परिभाषित करने के लिए है static :

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

या समारोह पारंपरिक कॉल:

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

संबंधित प्रश्न:


2 जवाब नहीं 30 के लिए

गंभीर त्रुटि: [TraitA] और [TraitB] परिभाषित एक ही संपत्ति ([$x]) की संरचना में [ClassC]

जब एक वर्ग के लिए प्रयास करता है use बहु-लक्षण, जहां दो या उन Traits के दो या अधिक है संपत् ति एक ही नाम से, और संपत्ति के साथ प्रारंभिक मान भिन्न है.

उदाहरण:

<?php
trait TraitA
{
public $x = "a";
}
trait TraitB
{
public $x = "b";
}
class ClassC
{
use TraitA, TraitB;
}

समस्याग्रस्त: हालांकि यह "के बीच संघर्ष को हल करने के लिए संभव है प्रतिस्पर्धा पद् ध ति, वर्तमान में कोई सिंटैक्स नहीं है जो दो प्रतिस्पर्धी गुणों के बीच विरोध को हल करेगा.इस समय एकमात्र समाधान है refactor; यानी, एक घातक त्रुटि पैदा करता है जो संपत्ति के नाम के बीच एक संघर्ष से बचें।


संबंधित प्रश्न: