কীভাবে আমি পিএইচপি-তে দরকারী ত্রুটি বার্তা পেতে পারি?


583

বেশিরভাগ সময় আমি চেষ্টা করব এবং একটি পিএইচপি স্ক্রিপ্ট চালাব এবং কেবল একটি ফাঁকা স্ক্রিন ফিরে পাব। কোনও ত্রুটির বার্তা নেই; খালি পর্দা। কারণটি হতে পারে একটি সাধারণ বাক্য গঠন ত্রুটি (ভুল বন্ধনী, অনুপস্থিত সেমিকোলন), বা একটি ব্যর্থ ফাংশন কল, বা পুরোপুরি অন্য কিছু।

কী ভুল হয়েছে তা নির্ধারণ করা খুব কঠিন। আমি কোডটি মন্তব্য করার চেষ্টা করি, সর্বত্র "প্রতিধ্বনি" বিবৃতি প্রবেশ করান, ইত্যাদি সমস্যা সঙ্কুচিত করার চেষ্টা করে। তবে অবশ্যই আরও ভাল উপায় থাকতে হবে, তাই না?

জাভা যেমন একটি দরকারী ত্রুটি বার্তা উত্পাদন করার জন্য পিএইচপি করার উপায় আছে?



2
আরো দেখুন stackoverflow.com/q/1475297/632951
Pacerier

4
@ জুয়ান স্ট্রাস, এটি এটিকে কমিয়ে দিচ্ছে। এবং যখন আপনি শেষ পর্যন্ত ত্রুটিগুলি দেখেন, এটি বলে T_PAAMAYIM_NEKUDOTAYIM। অথবা হতে পারে "অবশ্যই পূর্ণসংখ্যার উদাহরণ হতে হবে, পূর্ণসংখ্যা দেওয়া হবে"
পেসারিয়ার

1
এ সম্পর্কে টিউটোরিয়াল: কোড2 real.blogspot.com/2015/06/…
ছাত্র

উত্তর:


498

সিনট্যাক্স ত্রুটির জন্য, আপনাকে php.ini এ ত্রুটি প্রদর্শন সক্ষম করতে হবে। ডিফল্টরূপে এগুলি বন্ধ করা হয় কারণ আপনি ত্রুটি বার্তা দেখে কোনও "গ্রাহক" চান না। এই 2 টি নির্দেশাবলীর তথ্যের জন্য পিএইচপি ডকুমেন্টেশনে এই পৃষ্ঠাটি দেখুন : error_reportingএবং display_errorsdisplay_errorsআপনি সম্ভবত এটি পরিবর্তন করতে চান। আপনি যদি php.ini সংশোধন করতে না পারেন তবে আপনি .htaccess ফাইলে নিম্নলিখিত লাইনগুলি যুক্ত করতে পারেন:

php_flag  display_errors        on
php_value error_reporting       2039

error_reportingসমস্ত ত্রুটি পেতে আপনার পিএইচপি এর সংস্করণটির জন্য আপনি E_ALL এর মান (গাম্বো দ্বারা উল্লিখিত) ব্যবহার করে বিবেচনা করতে পারেন । অধিক তথ্য

3 টি অন্যান্য আইটেম: (1) আপনি ত্রুটি লগ ফাইলটি পরীক্ষা করতে পারেন কারণ এতে সমস্ত ত্রুটি থাকবে (যদি না লগিং অক্ষম করা থাকে) (২) নিম্নলিখিত দুটি লাইন যুক্ত করা আপনাকে ত্রুটিগুলি ডিবাগ করতে সহায়তা করবে যা সিনট্যাক্স ত্রুটি নয়:

error_reporting(-1);
ini_set('display_errors', 'On');

(3) আরেকটি বিকল্প হ'ল এমন একটি সম্পাদক ব্যবহার করুন যা আপনার টাইপ করার সময় ত্রুটিগুলি পরীক্ষা করে, যেমন পিএইচপিইড । পিএইচপিইড একটি ডিবাগারও নিয়ে আসে যা আরও বিস্তারিত তথ্য সরবরাহ করতে পারে। (পিএইচপিইডি ডিবাগারটি এক্সডিবাগের সাথে খুব একই রকম এবং সরাসরি সম্পাদকের সাথে সংহত করে যাতে আপনি সবকিছু করার জন্য 1 টি প্রোগ্রাম ব্যবহার করেন))

Cartman এর লিংক এছাড়াও খুবই ভালো: http://www.ibm.com/developerworks/library/os-debug/


25
2039 এর মান E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICEDocs.php.net/manual/en/errorfunc.constants.php
গম্বো

আমি .htaccess ফাইলের বিকল্পটি পছন্দ করি। এটি আমাকে এমন একটি অঞ্চলে ডিবাগ করতে সহায়তা করে যা পাবলিক ওয়েবসাইটের অংশ নয়। এই টিপ জন্য অনেক ধন্যবাদ!
jacekn

1
আমি যুক্ত করব যে ফাইলগুলিতে লগিং ত্রুটিগুলি (এবং সেখানে তাদের সন্ধান করা) সর্বোত্তম সমাধান। অন-পৃষ্ঠায় ত্রুটিগুলি প্রদর্শন করার উপর নির্ভর করবেন না - তারা এটিকে নষ্ট করতে পারে, আপনি প্রোডাকশন সাইটের জন্য ত্রুটি প্রতিবেদন করতে ভুলে যেতে পারেন এবং এটি আপনাকে ভবিষ্যতে সমস্যার কারণ হতে পারে
ইভান ইয়ারিচ

455

নিম্নলিখিত সমস্ত ত্রুটি সক্ষম করে:

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

নীচের লিঙ্কগুলি দেখুন


28
.Ini ফাইল পর্যায়ে এই পরিবর্তনগুলি করা সেরা। কোনও স্ক্রিপ্টের মধ্যে থেকে ত্রুটি প্রতিবেদন করা অনর্থক, কারণ এটি সিনট্যাক্স ত্রুটিগুলি বা অন্যান্য মারাত্মক ত্রুটিগুলির সাথে সহায়তা করে না যা সংকলন পর্বটি মেরে ফেলে। এটি সম্পাদন শুরু হওয়ার আগে এবং রিপোর্টিং ওভাররাইডগুলিতে পৌঁছানোর আগে স্ক্রিপ্টটি মারা যায়।
মার্চ বি

আপনি সত্যই সঠিক। আমি খেয়াল করি নি যে সরানোটি আপনার নিজের সার্ভারে রয়েছে।
এলজাকিম

6
সঠিক php.ini ফাইলটি খুঁজতে phpinfo () চালান। দেখুন লোড করা কনফিগারেশন ফাইল লাইন।
ভয়ঙ্কর

1
আপনি যদি সংকলন পর্বের সময় ঘটে এমন ত্রুটিগুলি খুঁজছেন, আপনার
আপাচি

1
এই উত্তরটি php7 এ ব্যর্থ হবে যখন কঠোর টাইপিং সক্ষম করা থাকে, কারণ এর দ্বিতীয় প্যারামিটারটি ini_setএকটি স্ট্রিং।
PeeHaa

175

নিম্নলিখিত কোডটিতে সমস্ত ত্রুটি প্রদর্শন করা উচিত:

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

এই কোডটি দিয়ে খালি পৃষ্ঠা উত্পন্ন করার একমাত্র উপায় হ'ল শাটডাউন হ্যান্ডলারের কোনও ত্রুটি থাকলে have আমি এটি পরীক্ষা না করেই আমার নিজের সিমি থেকে অনুলিপি করে আটকালাম তবে আমি নিশ্চিত যে এটি কার্যকর হয়েছে।


4
আমি এই কোড থেকে একটি ফাঁকা পৃষ্ঠা পেয়েছি। "শাটডাউন হ্যান্ডলারটিতে আপনার একটি ত্রুটি আছে" বলতে কী বোঝায় এবং সমস্যাটি সমাধান করার জন্য আমার কী করা উচিত?
পাওলো এম

@ পাওলোম, তিনি ShutdownHandlerউপরের ফাংশনে একটি ত্রুটি বলছেন । মূলত এটি সঠিক ত্রুটি পরিচালনার জায়গায় স্টপগ্যাপ হ্যাক।
পেসারিয়ার

ধন্যবাদ, দরকারী ছিল, কিন্তু আমি এই ফাংশনটিতে E_NOTICEত্রুটিগুলি কীভাবে অক্ষম করতে পারি ?
মাজেএফাই

এটি সঠিক সমাধান, তবে ত্রুটি দেখা দিলে তথ্য ডিসসোজারে সতর্ক থাকুন ... (ব্যবহারকারীদের কাছে প্রতিধ্বনির পরিবর্তে লগিং পছন্দ করুন)
স্যাম জেসন ব্র্যাডক

1
সিমফনি সঠিকভাবে মারাত্মক ত্রুটিগুলি ধরতে না পারলে আমি এটি ব্যবহার করছি।
কয়েল

61

আপনার php.ini সেটিংসের উপর নির্ভর করে ....\logs\php_error.logবা ত্রুটিগুলি এবং সতর্কতাগুলি সাধারণত উপস্থিত হয় ....\logs\apache_error.log

এছাড়াও দরকারী ত্রুটিগুলি প্রায়শই ব্রাউজারে পরিচালিত হয় তবে এগুলি বৈধ এইচটিএমএল না হওয়ায় সেগুলি প্রদর্শিত হয় না।

সুতরাং "tail -f"আপনার লগ ফাইলগুলি এবং যখন আপনি একটি ফাঁকা স্ক্রিন পাবেন আইআই" ভিউ "->" উত্স "মেনু বিকল্পগুলি কাঁচা আউটপুট দেখতে ব্যবহার করুন।


13
দুঃখের বিষয়, পৃষ্ঠার উত্সটিও কিছুই দেখায় না।
ম্যাথু শার্লে

2
আপনার অন্য কোথাও কী সেটিংস রয়েছে তা নির্বিশেষে অ্যাপাচি এর ত্রুটি লগটিতে পার্স ত্রুটিগুলি দৃশ্যমান হওয়া উচিত। আপনার যদি সার্ভারের নিয়ন্ত্রণ না থাকে তবে অ্যাপাচি ত্রুটির লগ পাওয়া কঠিন হতে পারে তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি আপনার সরবরাহকারীর সাথে কথা বলুন এবং ত্রুটি লগটি আপনাকে ফাঁস করার উপায় রয়েছে। অন্যটি ছাড়াও, আমি কেবল অন্যগুলির কী আছে তা প্রস্তাব দিতে পারি - আপনি উত্পাদনে নিযুক্ত করার আগে আপনার স্থানীয় বিকাশ সার্ভারে ত্রুটি বিশ্লেষণের জন্য আপনার কোডটি ভেট। এছাড়াও, Eclipse এর PDT এর মতো একটি বৈধতা আইডিই সাহায্য করতে পারে।
25:55

5
এটি ফিরে আসার পরে, আমার সম্প্রতি একটি স্ট্যাক ওভারফ্লো সমস্যা ছিল যা কোনও ত্রুটি তৈরি করে না, এমনকি লগগুলিতেও এবং নিজেকে সার্ভারে xdebug ইনস্টল না করা পর্যন্ত নিজেকে প্রকাশ করে না। গাহ।
ম্যাথু শার্লে

আপনি যদি php.ini পরিবর্তন করতে না পারেন তবে এতে একটি htaccess ফাইল তৈরি করুন php_flag display_errors 1
টম

59

আপনি যে ফাইলটি ডিবাগ করতে চান তাতে আপনি নিম্নলিখিত লাইনগুলি অন্তর্ভুক্ত করতে পারেন:

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

এটি php.ini এ ডিফল্ট সেটিংসকে ওভাররাইড করে, যা পিএইচপি লগতে ত্রুটিগুলি রিপোর্ট করে।


2
সেটা সত্য. এক্ষেত্রে মানগুলি অবশ্যই আইএনআইতে নির্ধারণ করতে হবে - খাঁটি বিকাশের পরিবেশের জন্য এটি যাইহোক পছন্দনীয় হতে পারে।
তোমালাক

53

পিএইচপি কনফিগারেশন

Php.ini এ 2 টি প্রবেশিকা ত্রুটির আউটপুট নির্দেশ করে:

  1. display_errors
  2. error_reporting

ইন প্রকাশনা , display_errorsসাধারণত সেট করা হয় Off(যেটি, একটি ভাল জিনিস কারণ উৎপাদন সাইট ত্রুটি প্রদর্শন সাধারণত কাম্য নয়!)।

তবে, বিকাশে , এটি সেট করা উচিত On, যাতে ত্রুটিগুলি প্রদর্শিত হয়। চেক !

error_reporting(পিএইচপি ৫.৩ অনুসারে) ডিফল্টরূপে সেট করা আছে E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED(অর্থাত্, বিজ্ঞপ্তি, কঠোর মানদণ্ড এবং অবমূল্যায়নের বিজ্ঞপ্তিগুলি বাদ দিয়ে সবকিছু প্রদর্শিত হয়)। সন্দেহ হলে, সমস্ত ত্রুটি E_ALLপ্রদর্শন করতে এটি সেট করুন । চেক !

উফফফফ! চেক নেই! আমি আমার php.ini পরিবর্তন করতে পারি না!

এটা লজ্জার. সাধারণত ভাগ করা হোস্টগুলি তাদের php.ini ফাইলের পরিবর্তনের অনুমতি দেয় না এবং তাই, বিকল্পটি দুঃখজনকভাবে অনুপলব্ধ। তবে ভয় নেই! আমাদের অন্যান্য বিকল্প আছে !

রানটাইম কনফিগারেশন

কাঙ্ক্ষিত স্ক্রিপ্টে, আমরা রানটাইমে php.ini এন্ট্রিগুলি পরিবর্তন করতে পারি! মানে, স্ক্রিপ্ট চললে এটি চলবে! খুব সুন্দর!

error_reporting(E_ALL);
ini_set("display_errors", "On");

এই দুটি লাইন উপরের মতো php.ini এন্ট্রি পরিবর্তন করার মতো একই প্রভাব ফেলবে! অসাধারণ!

আমি এখনও একটি ফাঁকা পৃষ্ঠা / 500 ত্রুটি পাই!

তার মানে স্ক্রিপ্টটিও চলেনি! সাধারণত যখন আপনার সিনট্যাক্স ত্রুটি হয় তখনই ঘটে!

সিনট্যাক্স ত্রুটির সাথে, স্ক্রিপ্টটি রানটাইম পর্যন্ত পায় না। এটি সংকলনের সময় ব্যর্থ হয় , এর অর্থ এটি php.ini এর মানগুলি ব্যবহার করবে, আপনি যদি পরিবর্তন না করে থাকেন তবে ত্রুটি প্রদর্শনের অনুমতি নাও পেতে পারেন।

ত্রুটি লগ

উপরন্তু, পিএইচপি ডিফল্ট লগ ত্রুটি। ভাগ করা হোস্টিংয়ে, এটি কোনও উত্সর্গীকৃত ফোল্ডারে বা আপত্তিজনক স্ক্রিপ্টের মতো একই ফোল্ডারে থাকতে পারে।

আপনার যদি php.ini অ্যাক্সেস থাকে তবে আপনি error_logএন্ট্রিটির আওতায় খুঁজে পেতে পারেন ।


30

" Xdebug " নামে একটি সত্যই কার্যকর এক্সটেনশন রয়েছে যা আপনার প্রতিবেদনগুলিকে আরও সুন্দর করে তুলবে।


2
প্রকৃতপক্ষে, এটি একটি খুব দরকারী ডিবাগিং সরঞ্জাম error ত্রুটি বার্তাগুলিকে আরও অনেক শব্দভাবাপন্ন করে তোলে, পুরো স্ট্যাক ট্রেস এবং ভেরিয়েবল ডাম্প এবং সবকিছু সহ।
hbw

2
হ্যাঁ. এবং তারপরে আপনার কোডটি দিয়ে পদক্ষেপ নিতে এবং কোথায় ভুল হয়েছে তা খুঁজে পেতে VimDebugger প্লাগইনের মতো কিছু ব্যবহার করুন।
স্যান্ডার মেরেচাল

1
Xdebug সহ নেটবিনগুলি এখানে। এটা খুব দুর্দান্ত। আমি পিএইচপি (সাধারণত এএসপি.এনইটি) এ নতুন এবং এর আগে ইকো স্টেটমেন্ট দিয়ে আসছি।
কিছু কানক

30

আমি সবসময় এই সিনট্যাক্সটি পিএইচপি স্ক্রিপ্টের একেবারে শীর্ষে ব্যবহার করি।

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off

3
আমি দুঃখিত, তবে ইতিমধ্যে পোস্ট করা অন্যান্য উত্তরগুলি না পড়ার জন্য -1। ইতিমধ্যে বেশ কয়েকবার উল্লিখিত হিসাবে .htaccess এ এটি যত্ন নেওয়া হয়।
ম্যাথু Scharley


27

দ্রুত, হ্যান্ড-অন সমস্যা সমাধানের জন্য আমি সাধারণত এখানে এসওতে পরামর্শ দিই:

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

স্ক্রিপ্টের শুরুতে যা ঝামেলা-শ্যুটিংয়ের মধ্যে রয়েছে put এটি নিখুঁত নয়, নিখুঁত বৈকল্পিকটি হ'ল এটি যে আপনি সক্ষম করেছেন php.iniএবং সিনট্যাক্স এবং স্টার্টআপ ত্রুটিগুলি ধরতে আপনি পিএইচপিতে ত্রুটিগুলি লগইন করেন।

এখানে বর্ণিত সেটিংসটি কোনও পিএইচপি সংস্করণ নির্বিশেষে কঠোরগুলি সহ সমস্ত ত্রুটি, বিজ্ঞপ্তি এবং সতর্কতা প্রদর্শন করে।

পরবর্তী বিষয়গুলি বিবেচনা করুন:

  • এক্সডিবাগ ইনস্টল করুন এবং আপনার আইডিই দিয়ে রিমোট-ডিবাগিং সক্ষম করুন ।

পাশাপাশি দেখুন:


27

শেষ ত্রুটি বা সতর্কতা দৃশ্যমান করার জন্য একটি হুক নিবন্ধন করা সম্ভব।

function shutdown(){
  var_dump(error_get_last());
}

register_shutdown_function('shutdown');

আপনার সূচনার শুরুতে এই কোডটি যুক্ত করা সূচি। পিএফপি আপনাকে সমস্যার ডিবাগ করতে সহায়তা করবে।


1
এটি এমন লোকদের জন্য খাঁটি স্বর্ণ যা ওয়েবহোস্টগুলিতে আটকে গেছে যা কোনও ত্রুটি দেখায় না তবে শূন্য লগ অ্যাক্সেসের অনুমতি দেয়
রাফায়েল মেনা ব্যারেটো

18

এটি বোঝা বনাম রানটাইম কনফিগারেশন সমস্যা

সংশ্লেষ বা বিশ্লেষণের পদক্ষেপের সময় একটি সিনট্যাক্স ত্রুটি বা বিশ্লেষণ ত্রুটি ঘটেছিল তা সনাক্ত করা গুরুত্বপূর্ণ , যার অর্থ এই যে পিএইচপি আপনার কোনও কোড কার্যকর করার সুযোগ পাওয়ার আগেই জামিন দেবে। সুতরাং আপনি যদি display_errorsরানটাইম চলাকালীন পিএইচপি এর কনফিগারেশনটি সংশোধন করছেন , (এটিতে ini_setআপনার কোডটি ব্যবহার করা থেকে .htaccess ব্যবহার করা থেকে শুরু করে যা কোনও রানটাইম কনফিগারেশন ফাইল যা কিছু অন্তর্ভুক্ত ) তবে কেবলমাত্র ডিফল্ট লোড হওয়া কনফিগারেশন সেটিংস খেলতে ।

উন্নয়নের ক্ষেত্রে কীভাবে সর্বদা ডাব্লুএসওডি এড়ানো যায়

কোনও ডাব্লুএসওডি এড়ানোর জন্য আপনি নিশ্চিত করতে চান যে আপনার লোড হওয়া কনফিগারেশন ফাইলটি চালু আছে display_errorsএবং error_reportingসেট হয়েছে -1( এটি সমতুল্য E_ALL কারণ এটি নিশ্চিত করে যে আপনি যে বি পিএইচপি ব্যবহার করছেন তা নির্বিশেষে সমস্ত বিট চালু আছে) )। E_ALL এর ধ্রুবক মানটিকে হার্ডকোড করবেন না, কারণ এই মানটি পিএইচপি-র বিভিন্ন সংস্করণের মধ্যে পরিবর্তিত হতে পারে।

লোড করা কনফিগারেশন হয় আপনার লোড হয় php.iniফাইল বা আপনার apache.confবা httpd.confবা virtualhost ফাইল। এই ফাইলগুলি কেবল একবার স্টার্টআপ পর্যায়ে পড়লে (যখন আপনি প্রথম অ্যাপাচি httpd বা php-fpm শুরু করেন, উদাহরণস্বরূপ) এবং কেবল রানটাইম কনফিগারেশন পরিবর্তনের ফলে ওভাররাইড করা হয়। নিশ্চিত যে display_errors = 1error_reporting = -1আপনার লোড কনফিগারেশন ফাইল নিশ্চিত যে আপনি একটি দেখতে হবে না WSOD সিনট্যাক্স বা বিশ্লেষণ ত্রুটি যে মত একটি রানটাইম পরিবর্তন প্রভাবী হওয়ার আগে ঘটতে নির্বিশেষে ini_set('display_errors', 1);বা error_reporting(E_ALL);জায়গা নিতে পারে।

আপনার (php.ini) লোড কনফিগারেশন ফাইলগুলি কীভাবে সন্ধান করবেন

আপনার বোঝা কনফিগারেশন ফাইল (গুলি) সনাক্ত করতে কেবল নিম্নলিখিত কোড সহ একটি নতুন পিএইচপি ফাইল তৈরি করুন ...

<?php
phpinfo();

তারপরে সেখানে আপনার ব্রাউজারটি নির্দেশ করুন এবং লোড কনফিগারেশন ফাইল এবং অতিরিক্ত .ini ফাইলগুলি পার্স করা দেখুন যা সাধারণত আপনার শীর্ষে থাকে এবং আপনার phpinfo()সমস্ত লোড কনফিগারেশন ফাইলের পরম পথটি অন্তর্ভুক্ত করে।

আপনি যদি (none)ফাইলটির পরিবর্তে দেখতে পান তবে এর অর্থ আপনার কনফিগারেশন ফাইল (php.ini) পথে কোনও php.ini নেই । সুতরাং আপনি পিএইচপি এর সাথে বান্ডিল স্টক php.ini এখান থেকে ডাউনলোড করতে পারেন এবং পিএইচপি. inই হিসাবে আপনার কনফিগারেশন ফাইলের পাতায় অনুলিপি করতে পারেন তবে নিশ্চিত হন যে আপনার পিএইচপি ব্যবহারকারীকে সেই ফাইলটি থেকে পড়ার পর্যাপ্ত অনুমতি আছে। এটিকে লোড করার জন্য আপনাকে httpd বা php-fpm পুনরায় চালু করতে হবে Remember মনে রাখবেন, এটি এই পিএইচপি উত্সের সাথে বান্ডিলযুক্ত php.ini ফাইল development সুতরাং দয়া করে এটি উত্পাদন ব্যবহার করবেন না!


প্রযোজনায় কেবল এটি করবেন না

উন্নয়নের ক্ষেত্রে ডাব্লুএসওডকে এড়াতে এটিই সর্বোত্তম উপায়। আপনার প্রস্তাবিত যে কেউ আপনার পিএইচপি স্ক্রিপ্টের শীর্ষে রেখেছেন ini_set('display_errors', 1);বা error_reporting(E_ALL);আপনার মতো এখানে ব্যবহার করেছেন। Htaccess ব্যবহার করছেন, যদি আপনার বোঝা কনফিগারেশন ফাইলটি যদি আপনার সিন্টেক্স বা পার্স ত্রুটি ঘটে (যেমন আপনার ক্ষেত্রে এখানে রয়েছে) তখন আপনাকে WSOD এড়াতে সহায়তা করবে না হয়েছে display_errorsবন্ধ করেছেন।

অনেক লোক (এবং পিএইচপি-র স্টক ইনস্টলেশন) একটি প্রোডাকশন-ইনআই ফাইল ব্যবহার করবে display_errorsযা ডিফল্টরূপে বন্ধ হয়ে গেছে, যার ফলস্বরূপ আপনি এখানে একই হতাশার ফলস্বরূপ। কারণ পিএইচপি এটি শুরু হওয়ার সাথে সাথেই এটি বন্ধ হয়ে গেছে, তারপরে একটি বাক্য গঠন বা বিশ্লেষণ ত্রুটির মুখোমুখি হয় এবং আউটপুটে কিছুই না দিয়ে ব্যাল করে। আপনি আশা করেন যে আপনার ini_set('display_errors',1);পিএইচপি স্ক্রিপ্টের শীর্ষে এটি এড়ানো উচিত ছিল, তবে পিএইচপি আপনার কোডটি পার্স করতে পারে না তা বিবেচনা করে না কারণ এটি কখনই রানটাইমে পৌঁছায় না।


17

আপনি যদি দুর্দান্ত শীতল হন তবে আপনি চেষ্টা করতে পারেন:

$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";

ini_set('display_errors',$test_server);
error_reporting(E_ALL|E_STRICT);

আপনি কেবল স্থানীয়ভাবে চলতে থাকলে এটি ত্রুটিগুলি প্রদর্শন করবে। এটি আপনাকে উপযুক্ত যেখানে অন্য জায়গায় ব্যবহারের জন্য টেস্ট_সার্ভার ভেরিয়েবল দেয়।

স্ক্রিপ্ট রান হওয়ার আগে ঘটে যাওয়া কোনও ত্রুটি ধরা পড়বে না, তবে আমি যে 99% ত্রুটি করি তা কোনও সমস্যা নয়।


2
আপনি যদি স্থানীয় এবং উত্পাদন পরিবেশের মধ্যে পার্থক্য করছেন, আপনার কেবল বিশ্বব্যাপী ত্রুটিগুলি সক্ষম বা অক্ষম করা উচিত (আপনার php.ini তে) এবং কোডেও নয় যা প্রডাকশন কোডও হতে পারে। আপনি যদি তার উত্পাদন পরিবেশে কোনও প্রোডাক্ট ওয়েবসাইট ডিবাগ করতে চান এবং কেবল ত্রুটিগুলি দেখতে সক্ষম হতে চান $_SERVER['REMOTE_HOST']তবে ক্লায়েন্টটি ঠিক আছে কিনা তা পরীক্ষা করে দেখুন to
জাপ হাগম্যানস

17

পৃষ্ঠার শীর্ষে একটি পরামিতি চয়ন করুন

error_reporting(E_ERROR | E_WARNING | E_PARSE);

16

এটি অবিরত রাখতে এবং এটিকে কনফোর্টাল করতে আপনি নিজের php.ini ফাইলটি সম্পাদনা করতে পারেন। এটি সাধারণত /etc/php.iniবা এতে সঞ্চিত থাকে /etc/php/php.iniতবে php.iniআপনার হোস্টিং সরবরাহকারীর সেটআপ গাইডলাইনগুলির উপর নির্ভর করে আরও স্থানীয় লোকেরা এটি ওভাররাইট করতে পারে। কোনটি শেষের দিকে লোড হয় তা নিশ্চিত হতে শীর্ষে একটি phpinfo()ফাইল পরীক্ষা করুন Loaded Configuration File

সেই ফাইলটিতে প্রদর্শন_রফার জন্য অনুসন্ধান করুন। কেবলমাত্র 3 টি উদাহরণ থাকতে হবে, যার মধ্যে 2 টি মন্তব্য করা হয়েছে।

নিরক্ষিত লাইনটি এতে পরিবর্তন করুন:

display_errors = stdout

16

ডুনো যদি এটি সাহায্য করবে তবে পিএইচপি প্রকল্পগুলির জন্য এটি আমার মানক কনফিগারেশন ফাইলের একটি অংশ। আমি এমনকি আমার নিজের সার্ভারে অ্যাপাচি কনফিগারেশনের উপর খুব বেশি নির্ভর করে না।

আমার কখনই অদৃশ্য হয়ে যাওয়া ত্রুটির সমস্যা নেই, তাই সম্ভবত এখানে কিছু আপনাকে ধারণা দেবে।

APPLICATON_LIVE দেখানোর জন্য সম্পাদিত

/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment.  It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/

if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', false);
} else {
    die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
    // Log or take other appropriate action.
}


/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging.  Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");

if ( ! APPLICATION_LIVE ) {
    // A few changes to error handling for development.
    // We will want errors to be visible during development.
    ini_set ( "display_errors", "1");
    ini_set ( "display_startup_errors", "1");
    ini_set ( "html_errors", "1");
    ini_set ( "docref_root", "http://www.php.net/");
    ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
    ini_set ( "error_append_string", "</div>");
}

@ এলি, প্রতি পৃষ্ঠার অনুরোধে এটির একটি রানটাইম ওভারহেড রয়েছে ।
পেসারিয়ার


15
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);

এছাড়াও, আপনি xdebug এর সাথে আরও বিস্তারিত তথ্য পেতে পারেন ।


এক্সডিবাগ php.ini থেকে সক্ষম হতে পারবেন
jewelhuq

15

আমি পিএইচপি-তে ত্রুটি ও ব্যতিক্রমগুলির আরও ভাল দৃশ্যধারণের জন্য নেট ট্র্যাসিকে প্রস্তাব দিই :

নেট ট্রেসির স্ক্রিনশট


3
ট্রেসি মূল পোস্টে বর্ণিত যেমন পরিস্থিতিতে আউটপুট সরবরাহের জন্য সমস্ত ডিসপ্লে ত্রুটি এবং ত্রুটি প্রতিবেদন করার বিকল্পগুলির যথাযথ সেটিং সম্পর্কে যত্ন নিয়েছে ... সুতরাং এই সরঞ্জামটি প্রশ্নকর্তাকে সম্বোধন করার জন্য বিশেষভাবে সহায়ক "কেউ কি ভাল পিএইচপি ডিবাগিং টিপস, সরঞ্জাম এবং কৌশলগুলি সুপারিশ করতে পারে? "।
জান দ্রাবিব



9

আপনি পিএইচপি-তে নিজের ত্রুটি হ্যান্ডলারটি নিবন্ধন করতে পারেন । সমস্ত ত্রুটি কোনও ফাইলে ফেলে দেওয়া আপনাকে এই অস্পষ্ট ক্ষেত্রে যেমন সহায়তা করতে পারে। মনে রাখবেন যে আপনার ফাংশনটি কল হয়ে যাবে, আপনার বর্তমান ত্রুটি_রপোর্টিং সেট করা আছে তা বিবেচনা করেই । খুব মৌলিক উদাহরণ:

function dump_error_to_file($errno, $errstr) {
    file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND);
}
set_error_handler('dump_error_to_file');

7

আপনাকে পিএইচপি থেকে কার্যকর দুটি ত্রুটি পেতে প্রয়োজনীয় দুটি লাইন হ'ল:

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

অন্যান্য অবদানকারীদের দ্বারা নির্দেশিত হিসাবে, এগুলি সুরক্ষার কারণে ডিফল্টরূপে বন্ধ করা হয় ched দরকারী টিপ হিসাবে - আপনি যখন নিজের সাইটটি সেট আপ করবেন তখন আপনার বিভিন্ন পরিবেশের জন্য একটি স্যুইচ করার সুবিধাজনক যাতে আপনার স্থানীয় এবং বিকাশ পরিবেশে এই ত্রুটিগুলি ডিফল্টরূপে চালু থাকে। নিম্নলিখিত কোড সহ এটি অর্জন করা যেতে পারে (আদর্শভাবে আপনার সূচক.এফপি বা কনফিগারেশন ফাইলে তাই এটি শুরু থেকেই সক্রিয়):

switch($_SERVER['SERVER_NAME'])
{
    // local
    case 'yourdomain.dev':
    // dev
    case 'dev.yourdomain.com':
        ini_set('display_errors',1);
        error_reporting(E_ALL);
    break;
    //live
    case 'yourdomain.com':
        //...
    break;
}

6

ফায়ার পিএইচপি পাশাপাশি দরকারী হতে পারে।


আমার লক্ষ্য করা উচিত ফায়ার পিএইচপি একটি মৃত প্রকল্প, যেহেতু ফায়ারবগ ফায়ারফক্স কনসোলে সংহত হয়েছিল। ক্রোমপিএইচপি সেখানে উত্তরাধিকারী, তবে পুরোপুরি নয়।
মাচাভিটি

6

আপনার php.ini খুলুন, এটিতে সেট করা আছে তা নিশ্চিত করুন:

display_errors = On

আপনার সার্ভার পুনরায় চালু করুন।


6

আপনি নিজের কোড সম্পাদক হিসাবে পিএইচপিএসটারম চেষ্টা করতে চাইতে পারেন। আপনি সম্পাদকটিতে টাইপ করার সাথে সাথে এটি অনেকগুলি পিএইচপি এবং অন্যান্য সিনট্যাক্স ত্রুটিগুলি খুঁজে পাবে।


6

আপনি যদি উবুন্টু ব্যবহারকারী হন তবে আপনার টার্মিনালটিতে যান এবং এই কমান্ডটি চালান

sudo tail -50f /var/log/apache2/error.log

যেখানে এটি সাম্প্রতিক 50 ত্রুটি প্রদর্শন করবে। error.logApache2 এর জন্য একটি ত্রুটি ফাইল রয়েছে যা সমস্ত ত্রুটি লগ করে।


5

সম্পূর্ণ ত্রুটি প্রতিবেদন চালু করতে, এটি আপনার স্ক্রিপ্টে যুক্ত করুন:

error_reporting(E_ALL);

এটি এমনকি সর্বনিম্ন সতর্কতাগুলি দেখাতেও কারণ করে। এবং, কেবল ক্ষেত্রে:

ini_set('display_errors', '1');

ত্রুটি প্রদর্শন বাধ্য করবে। এটি প্রোডাকশন সার্ভারগুলিতে বন্ধ করা উচিত, তবে যখন আপনি বিকাশ করছেন not


তোমালকের উত্তরের মতো, এটি সিনট্যাক্স ত্রুটির জন্য কাজ করে না।
ড্যারিল হেইন

5

"ভুল "গুলি বিকাশকারীদের তাদের ভুলগুলি জানার জন্য এবং সিস্টেমটিকে নিখুঁতভাবে কাজ করার জন্য সমাধান করার জন্য সর্বাধিক দরকারী জিনিস।

পিএইচপি বিকাশকারীদের কেন এবং কোথায় তাদের কোডের টুকরা ত্রুটিগুলি পাচ্ছে তা জানার জন্য আরও কিছু ভাল উপায় সরবরাহ করে, তাই এই ত্রুটিগুলি বিকাশ করে বিকাশকারীরা তাদের কোডটি আরও অনেক উপায়ে আরও উন্নত করতে পারে।

সমস্ত ত্রুটি বার্তাগুলি পাওয়ার জন্য স্ক্রিপ্টের শীর্ষে দুটি লাইন নিম্নলিখিত লেখার সর্বোত্তম উপায়:

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

আপনার আইডিতে xdebug এর মতো ডিবাগার সরঞ্জামগুলি ব্যবহার করার আর একটি উপায় ।


4

আপনি সম্পূর্ণ ত্রুটি প্রতিবেদন সক্ষম করতে পারেন (বিজ্ঞপ্তি এবং কঠোর বার্তা সহ)। কিছু লোক এটিকে খুব ভার্জোজ মনে করে তবে এটি চেষ্টা করার মতো worth সেট error_reportingথেকে E_ALL | E_STRICTআপনার php.ini হবে।

error_reporting = E_ALL | E_STRICT

E_STRICT অবহেলিত ফাংশন সম্পর্কে আপনাকে অবহিত করবে এবং নির্দিষ্ট কিছু কাজ করার সর্বোত্তম পদ্ধতি সম্পর্কে আপনাকে সুপারিশ দেবে।

আপনি যদি বিজ্ঞপ্তি চান না, তবে আপনি অন্যান্য বার্তার প্রকারকে সহায়ক বলে মনে করেন তবে বিজ্ঞপ্তিগুলি বাদ দিয়ে চেষ্টা করুন:

error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE

display_errorsএটি php.ini এ সক্ষম কিনা তাও নিশ্চিত করুন । যদি আপনার পিএইচপি সংস্করণ 5.2.4 এর চেয়ে পুরানো হয় তবে এটিতে সেট করুন On:

display_errors = "On"

যদি আপনার সংস্করণটি 5.2.4 বা নতুন হয় তবে ব্যবহার করুন:

display_errors = "stderr"

4

ত্রুটি_বর্ধনা এবং প্রদর্শন_অবিধানগুলি ইন সেটিং বাদে আপনি নিজের ওয়েব সার্ভারের লগ ফাইল থেকে SYNTAX ত্রুটি পেতে পারেন। আমি যখন পিএইচপি বিকাশ করছি তখন আমি আমার বিকাশ সিস্টেমের ওয়েব সার্ভার লগগুলিকে আমার সম্পাদকটিতে লোড করি। আমি যখনই কোনও পৃষ্ঠা পরীক্ষা করি এবং একটি ফাঁকা স্ক্রিন পাই, লগ ফাইলটি বাসি হয়ে যায় এবং আমার সম্পাদক জিজ্ঞাসা করে আমি এটি পুনরায় লোড করতে চাইছি কিনা। আমি যখন করি তখন আমি নীচে লাফিয়ে যাই এবং সিনট্যাক্স ত্রুটি রয়েছে। উদাহরণ স্বরূপ:

[Sun Apr 19 19:09:11 2009] [error] [client 127.0.0.1] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\\webroot\\test\\test.php on line 9

3

যারা nginx ব্যবহার করেন এবং একটি সাদা পর্দা এমনকি ফাইলের জন্যও <?php echo 123;। আমার ক্ষেত্রে আমার কাছে এনজিএনএক্স কনফিগার ফাইলে পিএইচপি করার জন্য প্রয়োজনীয় বিকল্পটি ছিল না:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

এই বিকল্পটি ফাস্টসিজি_প্রেমস ফাইলে ছিল না, সুতরাং পিএইচপি কার্যকর হয়নি এবং লগগুলিতে কোনও ত্রুটি নেই।


আমার একই সমস্যা ছিল এবং এর কারণে এনজিন্সের ডিফল্ট কনফিগারেশন ফাইলটি সেই লাইনটি হারিয়েছে।
সালেম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.