मैं PHP त्रुटियों को प्रदर्शित करने के लिए कैसे प्राप्त करूं?




error-reporting (19)

मैंने अपनी PHP ini फ़ाइल की जांच की है और डिस्प्ले त्रुटियां सेट की गई हैं और त्रुटि रिपोर्टिंग भी E_ALL । मैंने अपना अपाचे वेब सर्वर पुनरारंभ किया है।

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

error_reporting(E_ALL);
ini_set('display_errors', 1);

क्या करना बाकी है?


अपाचे मॉड्यूल के रूप में PHP का उपयोग करते समय, हम अपाचे कॉन्फ़िगरेशन फ़ाइलों (जैसे httpd.conf) और .htaccess फ़ाइलों में निर्देशों का उपयोग करके कॉन्फ़िगरेशन सेटिंग्स को बदल सकते हैं। ऐसा करने के लिए आपको "ऑर्डर ओवरराइड विकल्प" या "सभी को ओवरराइड करें" विशेषाधिकारों की आवश्यकता होगी।

इसे देखो

http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess


यदि आपके पास xdebug इंस्टॉल है तो आप सेटिंग करके प्रत्येक सेटिंग को ओवरराइड कर सकते हैं:

xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;

force_display_errors

टाइप: int, डिफ़ॉल्ट मान: 0, Xdebug में प्रस्तुत किया गया> = 2.3 यदि यह सेटिंग 1 पर सेट की गई है तो त्रुटियों को हमेशा प्रदर्शित किया जाएगा, इससे कोई फर्क नहीं पड़ता कि PHP के display_errors की सेटिंग क्या है।

force_error_reporting

टाइप: int, डिफ़ॉल्ट मान: 0, Xdebug में प्रस्तुत किया गया> = 2.3 यह सेटिंग एक बिटमास्क है, जैसे error_reporting। यह बिटकमास्क तर्कसंगत रूप से त्रुटिपूर्ण होने के लिए त्रुटि_ रिपोर्टिंग द्वारा प्रतिनिधित्व बिटमैस्क के साथ ऑर्ड किया जाएगा, जो त्रुटियों को प्रदर्शित किया जाना चाहिए। यह सेटिंग केवल php.ini में बनाई जा सकती है और आपको कुछ त्रुटियों को दिखाए जाने से मजबूर करने की अनुमति देती है इससे कोई फर्क नहीं पड़ता कि कोई एप्लिकेशन ini_set () के साथ क्या करता है।


सबसे अच्छा / आसान / तेज़ समाधान जिसका उपयोग आप त्वरित डिबगिंग कर सकते हैं, अपने कोड को आकर्षक अपवादों से घिरा हुआ है। जब मैं उत्पादन पर कुछ तेजी से जांचना चाहता हूं तो मैं यही कर रहा हूं।

try {

//Page code

} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

आशा है कि ये आपकी मदद करेगा।


चूंकि हम अब PHP7 चला रहे हैं, यहां दिए गए उत्तरों अब और सही नहीं हैं। केवल एक ही फ्रैंक फोर्ट से ठीक है, क्योंकि वह PHP7 के बारे में बात करता है। दूसरी ओर, कोशिश / पकड़ के साथ त्रुटि पकड़ने की कोशिश करने के बजाय आप एक चाल का उपयोग कर सकते हैं: उपयोग शामिल हैं। यहां कोड के 3 टुकड़े:

फ़ाइल: tst1.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
// Missing " and ;
echo "Testing
?>  

PHP7 में इसे चलाने से कुछ भी नहीं दिखाया जाएगा

अब, इसे आज़माएं:

फ़ाइल: tst2.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
include ("tst3.php");
?> 

फ़ाइल: tst3.php

<?php
// Missing " and ;
echo "Testing
?>  

अब tst2 चलाएं जो त्रुटि रिपोर्टिंग सेट करता है तो tst3 शामिल करें। तुम देखोगे:

पार्स त्रुटि: सिंटैक्स त्रुटि, फ़ाइल का अप्रत्याशित अंत, लाइन 4 पर tst3.php में परिवर्तनीय (T_VARIABLE) या $ {(T_DOLLAR_OPEN_CURLY_BRACES) या {$ (T_CURLY_OPEN) की अपेक्षा करता है


यदि, उपरोक्त सभी उत्तरों का पालन करने के बावजूद (या आप अपनी php.ini फ़ाइल को संपादित नहीं कर सकते हैं), तो आपको अभी भी एक त्रुटि संदेश नहीं मिल रहा है, एक नई PHP फ़ाइल बनाने का प्रयास करें जो त्रुटि रिपोर्टिंग को सक्षम बनाता है और फिर समस्या फ़ाइल शामिल करता है। उदाहरण के लिए:

error_reporting(9999999);
ini_set('display_errors', 1);
require_once('problem_file.php');

मेरे php.ini फ़ाइल में सब कुछ ठीक से सेट करने के बावजूद, यह एकमात्र तरीका था जिसे मैं नेमस्पेस त्रुटि पकड़ सकता था। मेरा सटीक परिदृश्य था:

//file1.php
namespace a\b;
class x {
    ...
}

//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
    ...
}

उस फ़ोल्डर में php.ini नामक फ़ाइल बनाएं जहां आपकी PHP फ़ाइल रहती है।

Php.ini के अंदर निम्न कोड जोड़ें (मैं कोड दिखाने में एक साधारण त्रुटि दे रहा हूं):

display_errors = on

display_startup_errors = on

यहां एक PHP स्क्रिप्ट है:

<?php
    ini_set("display_startup_errors", 1);
    ini_set("display_errors", 1);

    /* Reports for either E_ERROR | E_WARNING | E_NOTICE  | Any Error*/
    error_reporting(E_ALL);

    echo(abc); /* Notice: abc is an undefined constant */
?>

PHP त्रुटियों के बारे में अधिक विस्तृत स्पष्टीकरण के लिए, PHP त्रुटि - error_reporting () पर जाएं


यह हमेशा मेरे लिए काम करता है:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

हालांकि, यह PHP त्रुटियों को दिखाने के लिए PHP नहीं बनाता है - उन त्रुटियों को दिखाने का एकमात्र तरीका यह है कि इस लाइन के साथ अपने php.ini को संशोधित करें:

display_errors = on

अपने php.ini के अंदर:

display_errors = on

फिर अपने वेब सर्वर को पुनरारंभ करें।


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

function ERR_HANDLER($errno ,$errstr, $errfile, $errline){
    $msg="<b>Someting bad happened.</b> [$errno] $errstr <br><br>
    <b>File:</b> $errfile <br>
    <b>Line:</b> $errline <br>
    <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>";

    echo $msg;

    return false;
}

function EXC_HANDLER($exception){
    ERR_HANDLER(0,$exception->getMessage(),$exception->getFile(),$exception->getLine());
}

function shutDownFunction() {
    $error = error_get_last();
    if ($error["type"] == 1) {
        ERR_HANDLER($error["type"],$error["message"],$error["file"],$error["line"]);
    }
}

set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
register_shutdown_function("shutdownFunction");
set_exception_handler("EXC_HANDLER");

उपयोग:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

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

php -l phpfilename.php

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

यह प्रश्न अतिरिक्त जानकारी प्रदान कर सकता है।


यदि आप किसी ऐसी स्थिति में खुद को पाते हैं जहां आप php.ini या .htaccess माध्यम से सेटिंग को संशोधित नहीं कर सकते हैं तो आपकी PHP स्क्रिप्ट में पार्स त्रुटियों के दौरान त्रुटियों को प्रदर्शित करने के लिए आप भाग्य से बाहर हैं। इसके बाद आपको कमांड लाइन पर फ़ाइलों को लिफ्ट करने के लिए हल करना होगा:

find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"

यदि आपका होस्ट इतना लॉक हो गया है कि यह php.ini या .htaccess माध्यम से मान को बदलने की अनुमति नहीं देता है, तो यह ini_set माध्यम से मान को बदलने की अनुमति भी दे सकता है। आप निम्न PHP स्क्रिप्ट के साथ जांच सकते हैं:

<?php
if( !ini_set( 'display_errors', 1 ) ) {
  echo "display_errors cannot be set.";
} else {
  echo "changing display_errors via script is possible.";
}

आप नीचे कुछ ऐसा कर सकते हैं:

अपनी मुख्य अनुक्रमणिका फ़ाइल में पैरामीटर के नीचे सेट करें

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);

फिर अपनी आवश्यकता के आधार पर आप चुन सकते हैं कि आप कौन सा दिखाना चाहते हैं:

सभी त्रुटि, चेतावनी और सूचना के लिए

    error_reporting(E_ALL); OR error_reporting(-1);

सभी त्रुटियों के लिए

    error_reporting(E_ERROR);

सभी चेतावनियों के लिए

    error_reporting(E_WARNING);

सभी सूचनाओं के लिए

    error_reporting(E_NOTICE);

अधिक जानकारी के लिए here जांचें


मैंने यही सीखा। PHP.INI फ़ाइल में

error_reporting = E_ALL
display_errors = On

कुछ वेब होस्टिंग प्रदाता आपको .htaccess फ़ाइल में PHP पैरा को बदलने की अनुमति देते हैं।

आप निम्न पंक्ति जोड़ सकते हैं:

php_value display_errors 1

मेरे पास आपके जैसा ही मुद्दा था और इस समाधान ने इसे ठीक किया।


मैं आमतौर पर अपने सादा php प्रोजेक्ट में निम्न कोड के साथ जाऊंगा जो बहुत छोटा है, अगर परियोजना बड़ी हो जाती है तो मैं अनुशंसा करूंगा।

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT','DEVELOPMENT');
}

$base_url   =   null;

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
            $base_url   =   'http://localhost/product/';
            ini_set('display_errors',1);
            ini_set('display_startup_errors',1);
            error_reporting(E_ALL|E_STRICT);
            break;

        case 'PRODUCTION':
            $base_url   =   'Prod url'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}

उम्मीद है की यह मदद करेगा।


आपको "त्रुटि रिपोर्टिंग" या "प्रदर्शन त्रुटियों" के लिए सभी सेटिंग्स PHP 7 में काम करने के लिए प्रकट नहीं हो सकती हैं। ऐसा इसलिए है क्योंकि त्रुटि प्रबंधन बदल गया है। इसके बजाए इसे आजमाएं:

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

या, एक बार में अपवाद और त्रुटियों को पकड़ने के लिए (यह PHP 5 के साथ पिछड़ा संगत नहीं है):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

बस लिखें:

error_reporting(-1);






error-reporting