پی ایچ پی ایچر ہینڈلنگ

ਪਹਿਲੇ ਪੰਜਾਬੀ ਵਿੱਚ, ਮੂਲਤਬੀ ਗਲਤੀ ਪ੍ਰਬੰਧਨ ਬਹੁਤ ਸਰਲ ਹੈ। ਇੱਕ ਸੁਨੇਹਾ ਬਰਾਉਜ਼ਰ ਵੱਲ ਭੇਜਿਆ ਜਾਵੇਗਾ, ਇਹ ਸੁਨੇਹਾ ਫਾਈਲ ਨਾਮ, ਲਾਈਨ ਨੰਬਰ ਅਤੇ ਗਲਤੀ ਦੀ ਵੇਰਵੇ ਵਾਲਾ ਸੁਨੇਹਾ ਰੱਖਦਾ ਹੈ。

پی ایچ پی ایچر ہینڈلنگ

اسکریپت بنانے اور ویب ایپلی کیشن کے دوران، غلطی پروسیسنگ ایک اہم حصہ ہے۔ اگر آپ کا کد غلطی دکھاوتوں کا پروسیسنگ نہ کریگا تو پروگرام نا حرفه گار بن جائے گا اور حفاظتی خطرات کو کھول دیا جائے گا۔

یہ تعلیمی میٹری پی ایچ پی میں سب سے اہم غلطی دکھاوتوں کی روشنی میں پیش کی گئی ہے。

آپ کے لئے مختلف غلطی پروسیسنگ طریقوں کی تعلیم کریں گے:

  • سادے "die()" بیت
  • تعمیداتی غلطی اور غلطی انگیز
  • غلطی رپورٹ

بنیادی غلطی پروسیسنگ: die() فونکشن کا استعمال

پہلے مثال میں ایک کتبہ فائل کھولنے والا سادے اسکریپٹ دیکھیئے:

<?php
$file=fopen("welcome.txt","r");
?>

اگر فائل نہیں ملتا تو آپ کو مزید ایسا غلطی ملے گا:

اخطار: fopen(welcome.txt) [function.fopen]: failed to open stream: 
فائل یا ڈائرکٹری نہیں ملتا C:\webfolder\test.php خط 2

کہ آپ کو مزید ایسا غلطی پیغام مل نہ جائے، فائل کی موجودگی کا پتہ لگانے کے بعد فائل کو چاہئیے:

<?php
if(!file_exists("welcome.txt"))
 {
 die("File not found");
 }
else
 {
 $file=fopen("welcome.txt","r");
 }
?>

اب، اگر فائل نہیں ملتا تو آپ کو مزید ایسا غلطی پیغام ملے گا:

فائل نہیں ملتا

سابق کے کد کے مقابلے میں، اُس کد کا اس کی مؤثر ہونے کی وجہ سادے غلطی پروسیسنگ مکمل میکینزم کو اختیار کرنا ہے جس نے اسکریپٹ کو غلطی کے بعد متوقف کردیا ہے。

امیدوار ہم نہیں کہ سادے طور پر اسکریپٹ کو متوقف کرنا ہمیشہ مناسب طریقہ ہوگا۔ ہم غلطی کا پروسیس کرنے والی آلٹرنٹیو پی ایچ پی فونکشنوں کا مطالعہ کریں گے。

تعمیداتی غلطی پروسیسور بنانا

ایک تعمیداتی غلطی پروسیسور بنانا بہت آسان ہے۔ ہم نے ایک مخصوص فونکشن بنایا ہے جو پی ایچ پی میں غلطی کے موقع پر اس فونکشن کو بلائیاجاسکتا ہے。

یہ فونکشن کم از کم دو پارامتر(غلطی درجہ اور پیغام غلطی) کا ہوگا، لیکن زیادہ سے زیادہ پانچ پارامتر(اختیاری: فائل، نمبر ردیف اور error context) کا حصہ لینے کا اختیار رکھتا ہے:

زبان برنامه نویسی

error_function(error_level, error_message,
error_file, error_line, error_context)
پارامتر ਵਰਣਨ
error_level

ضروری ہے۔ استعمال کنندہ کے ذریعہ طے شدہ غلطی کی رپورٹ درجہ تعین کی جاندی ہے۔ لازمی طور پر ایک اعداد شمار کا حصہ ہونا چاہئیے。

درج ذیل جدول دیکھیے: غلطی رپورٹ درجہ

error_message ضروری ہے۔ استعمال کنندہ کے ذریعہ طے شدہ غلطی کی پیغامات تعین کی جاندی ہیں。
error_file 可选。规定错误在其中发生的文件名。
error_line 可选。规定错误发生的行号。
error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。

ਗਲਤੀ ਰਿਪੋਰਟ ਪੱਧਰ

ਇਹ ਗਲਤੀ ਰਿਪੋਰਟ ਪੱਧਰ ਗਲਤੀ ਹੱਲਕਰਨ ਪ੍ਰੋਗਰਾਮ ਦੁਆਰਾ ਹੱਲ ਕੀਤੀਆਂ ਜਾਣ ਵਾਲੀਆਂ ਵੱਖ-ਵੱਖ ਤਰ੍ਹਾਂ ਦੀਆਂ ਗਲਤੀਆਂ ਹਨ:

ਮੁੱਲ ਸਥਾਰਾ ਵਰਣਨ
2 E_WARNING ਰਨ-ਟਾਈਮ ਗਲਤੀ ਦੀ ਚਿਤਾਵਨੀ। ਇਹ ਸਕ੍ਰਿਪਟ ਚਲਾਉਣ ਨੂੰ ਰੋਕ ਨਹੀਂ ਦਿੰਦੀ。
8 E_NOTICE

ਰਨ-ਟਾਈਮ ਨੋਟੀਸ

ਸਕ੍ਰਿਪਟ ਨੇ ਗਲਤੀ ਹੋਣ ਦੀ ਸੰਭਾਵਨਾ ਨੂੰ ਖੋਜ ਕੀਤੀ ਹੈ, ਪਰ ਇਹ ਸਕ੍ਰਿਪਟ ਦੇ ਸਾਧਾਰਨ ਚਲਾਉਣ ਦੌਰਾਨ ਵੀ ਹੋ ਸਕਦੀ ਹੈ。

256 E_USER_ERROR ਯੂਜ਼ਰ ਵਰਗੀ ਮੌਤਾਲਾ ਗਲਤੀ। ਇਹ ਪ੍ਰੋਗਰਾਮਰ ਵੱਲੋਂ PHP ਫੰਕਸ਼ਨ trigger_error() ਦੁਆਰਾ ਸੈਟ ਕੀਤੀ ਗਈ E_ERROR ਨਾਲ ਸਮਾਨ ਹੈ。
512 E_USER_WARNING ਯੂਜ਼ਰ ਵਰਗੀ ਗਲਤੀ ਚਿਤਾਵਨੀ। ਇਹ ਪ੍ਰੋਗਰਾਮਰ ਵੱਲੋਂ PHP ਫੰਕਸ਼ਨ trigger_error() ਦੁਆਰਾ ਸੈਟ ਕੀਤੀ ਗਈ E_WARNING ਨਾਲ ਸਮਾਨ ਹੈ。
1024 E_USER_NOTICE ਯੂਜ਼ਰ ਵਰਗੀ ਸੁਨੇਹਾ। ਇਹ ਪ੍ਰੋਗਰਾਮਰ ਵੱਲੋਂ PHP ਫੰਕਸ਼ਨ trigger_error() ਦੁਆਰਾ ਸੈਟ ਕੀਤੀ ਗਈ E_NOTICE ਨਾਲ ਸਮਾਨ ਹੈ。
4096 E_RECOVERABLE_ERROR ਕੈਪਚਰੇਬਲ ਮੌਤਾਲਾ ਗਲਤੀ। ਇਹ E_ERROR ਨਾਲ ਸਮਾਨ ਹੈ, ਪਰ ਇਹ ਯੂਜ਼ਰ ਵਰਗੇ ਹੱਲਕਰਨ ਪ੍ਰੋਗਰਾਮ ਦੁਆਰਾ ਕੈਪਚਰ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ (ਵੇਖ set_error_handler()).
8191 E_ALL

ਸਾਰੀਆਂ ਗਲਤੀਆਂ ਅਤੇ ਚਿਤਾਵਨੀਆਂ, ਇਕੱਲੇ E_STRICT ਪੱਧਰ ਤੋਂ ਮੁਕਤ ਰਹਿੰਦੀਆਂ ਹਨ。

(ਵਿੱਚ ਪਾਠ ਨਹੀਂ ਹੈ)

ਹੁਣ, ਅਸੀਂ ਇੱਕ ਗਲਤੀ ਹੱਲਕਰਨ ਫੰਕਸ਼ਨ ਬਣਾਉਣ ਲਈ ਚਾਹੁੰਦੇ ਹਾਂ:

function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "ਸਕ੍ਰਿਪਟ ਦੀ ਸਮਾਪਤੀ";
 die();
 }

ਉੱਪਰੋਕਤ ਕੋਡ ਇੱਕ ਸਰਲ ਗਲਤੀ ਹੱਲਕਰਨ ਫੰਕਸ਼ਨ ਹੈ। ਜਦੋਂ ਇਹ ਚਲਦਾ ਹੈ, ਇਹ ਗਲਤੀ ਪੱਧਰ ਅਤੇ ਗਲਤੀ ਸੁਨੇਹਾ ਲੈ ਲੈਂਦਾ ਹੈ। ਫਿਰ ਇਹ ਗਲਤੀ ਪੱਧਰ ਅਤੇ ਸੁਨੇਹਾ ਨੂੰ ਬਾਹਰ ਕੱਢ ਦਿੰਦਾ ਹੈ ਅਤੇ ਸਕ੍ਰਿਪਟ ਨੂੰ ਸਮਾਪਤ ਕਰ ਦਿੰਦਾ ਹੈ。

ਹੁਣ, ਅਸੀਂ ਇੱਕ ਗਲਤੀ ਹੱਲਕਰਨ ਫੰਕਸ਼ਨ ਬਣਾ ਚੁੱਕੇ ਹਾਂ, ਹੁਣ ਅਸੀਂ ਇਹ ਨਿਰਧਾਰਿਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹਾਂ ਕਿ ਇਹ ਫੰਕਸ਼ਨ ਕਦੋਂ ਚਲੇਗਾ。

ਸੈਟ ਗਲਤੀ ਹੱਲਕਰਨ

PHP ਦਾ ਮੂਲਭੂਤ ਗਲਤੀ ਹੱਲਕਰਨ ਪ੍ਰੋਗਰਾਮ ਹੈ। ਅਸੀਂ ਉੱਪਰੋਕਤ ਫੰਕਸ਼ਨ ਨੂੰ ਸਕ੍ਰਿਪਟ ਚਲਾਉਣ ਦੌਰਾਨ ਮੂਲਭੂਤ ਗਲਤੀ ਹੱਲਕਰਨ ਪ੍ਰੋਗਰਾਮ ਵਜੋਂ ਬਣਾਉਣਾ ਚਾਹੁੰਦੇ ਹਾਂ。

ਗਲਤੀ ਹੱਲਕਰਨ ਪ੍ਰੋਗਰਾਮ ਨੂੰ ਸੰਸ਼ੋਧਿਤ ਕਰ ਸਕਦੇ ਹਾਂ ਤਾਕਿ ਉਹ ਕੁਝ ਗਲਤੀਆਂ ਉੱਤੇ ਹੀ ਲਾਗੂ ਹੋਵੇ, ਇਸ ਤਰ੍ਹਾਂ ਸਕ੍ਰਿਪਟ ਵੱਖ-ਵੱਖ ਤਰ੍ਹਾਂ ਨਾਲ ਵੱਖ-ਵੱਖ ਗਲਤੀਆਂ ਨੂੰ ਹੱਲ ਕਰ ਸਕਦਾ ਹੈ। ਲੇਕਿਨ, ਇਸ ਉਦਾਹਰਣ ਵਿੱਚ, ਅਸੀਂ ਸਾਰੇ ਗਲਤੀਆਂ ਉੱਤੇ ਆਪਣੇ ਪਰਸੋਨਲ ਗਲਤੀ ਹੱਲਕਰਨ ਪ੍ਰੋਗਰਾਮ ਦਾ ਉਪਯੋਗ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹਾਂ:

set_error_handler("customError");

ਜਦੋਂ ਅਸੀਂ ਆਪਣੇ ਪਰਸੋਨਲ ਫੰਕਸ਼ਨ ਨੂੰ ਸਾਰੇ ਗਲਤੀਆਂ ਦੇ ਹੱਲ ਕਰਨ ਲਈ ਚਾਹੁੰਦੇ ਹਾਂ, set_error_handler() ਨੂੰ ਇੱਕ ਪੈਰਾਮੀਟਰ ਚਾਹੀਦਾ ਹੈ, ਦੂਜਾ ਪੈਰਾਮੀਟਰ ਗਲਤੀ ਪੱਧਰ ਨੂੰ ਨਿਰਧਾਰਿਤ ਕਰਨ ਲਈ ਜੋੜ ਸਕਦੇ ਹਾਂ。

ਮਿਸਾਲ

ਇਸ ਗਲਤੀ ਪ੍ਰਬੰਧਕ ਨੂੰ ਟੈਸਟ ਕਰਨ ਲਈ, ਅਣਪ੍ਰਵਾਨ ਵੇਰਵੇ ਨੂੰ ਬਾਹਰ ਲਿਆਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr";
 }
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>

مذکورہ بالا کوڈ کا اخراج اس طرح کا ہونا چاہئے:

ਗਲਤੀ: [8] ਅਣਪਰਿਭਾਸ਼ਿਤ ਵੇਰਵੇ: test

ਗਲਤੀ ਟ੍ਰਿਗਰ ਕਰਨਾ

ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਉਪਭੋਗਤਾ ਦਾ ਇਨਪੁਟ ਦਿੱਤੇ ਜਾਣ ਦੇ ਸਥਾਨ 'ਤੇ, ਜਦੋਂ ਉਪਭੋਗਤਾ ਦਾ ਇਨਪੁਟ ਬੇਵਾਕਿਫੀ ਹੁੰਦਾ ਹੈ ਤਾਂ ਗਲਤੀ ਟ੍ਰਿਗਰ ਕਰਨ ਦਾ ਬਹੁਤ ਹੀ ਉਪਯੋਗੀ ਹੈ।ਇਹ ਕੰਮ PHP ਵਿੱਚ trigger_error() ਦੁਆਰਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ。

ਮਿਸਾਲ

ਇਸ ਮਿਸਾਲ ਵਿੱਚ, ਜੇਕਰ "test" ਵੇਰਵੇ "1" ਤੋਂ ਵੱਡਾ ਹੈ ਤਾਂ ਗਲਤੀ ਹੁੰਦੀ ਹੈ:

<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>

مذکورہ بالا کوڈ کا اخراج اس طرح کا ہونا چاہئے:

ਚਿਤਾਵਨੀ: ਮੁੱਲ 1 ਜਾਂ ਘੱਟ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ
in C:\webfolder\test.php on line 6

ਤੁਸੀਂ ਸਕ੍ਰਿਪਟ ਦੇ ਕਿਸੇ ਵੀ ਸਥਾਨ 'ਤੇ ਗਲਤੀ ਟ੍ਰਿਗਰ ਕਰ ਸਕਦੇ ਹੋ, ਦੂਜੇ ਪੈਰਾਮੀਟਰ ਦੀ ਮਦਦ ਨਾਲ, ਤੁਸੀਂ ਟ੍ਰਿਗਰ ਕੀਤੀ ਗਈ ਗਲਤੀ ਪੱਧਰ ਨਿਰਧਾਰਿਤ ਕਰ ਸਕਦੇ ਹੋ。

ਸੰਭਾਵਿਤ ਗਲਤੀ ਪ੍ਰਕਾਰ:

  • E_USER_ERROR - ਗੰਭੀਰ ਉਪਭੋਗਤਾ ਦਾ ਰਨ-ਟਾਈਮ ਗਲਤੀ।ਗਲਤੀ ਨੂੰ ਬਹਾਲ ਕੀਤਾ ਨਹੀਂ ਜਾ ਸਕਦਾ।ਸਕ੍ਰਿਪਟ ਦੀ ਚਲਾਣਾ ਰੁਕਦੀ ਹੈ。
  • E_USER_WARNING - ਗੰਭੀਰ ਨਹੀਂ ਦੇਣਦਾਰ ਉਪਭੋਗਤਾ ਦਾ ਰਨ-ਟਾਈਮ ਚਿਤਾਵਨੀ।ਸਕ੍ਰਿਪਟ ਦੀ ਚਲਾਣਾ ਰੁਕਦੀ ਨਹੀਂ ਹੈ。
  • E_USER_NOTICE - ਮੂਲਤਬੀ।ਉਪਭੋਗਤਾ ਦਾ ਰਨ-ਟਾਈਮ ਨੋਟੀਸ।ਸਕ੍ਰਿਪਟ ਗਲਤੀ ਦੇ ਸੰਭਾਵਨਾ ਨੂੰ ਖੋਜ ਲਈ ਹੈ, ਜਾਂ ਸਕ੍ਰਿਪਟ ਦੀ ਨਾਮਜਾਦਗੀ ਦੌਰਾਨ ਵੀ ਹੋ ਸਕਦੀ ਹੈ。

ਮਿਸਾਲ

ਇਸ ਮਿਸਾਲ ਵਿੱਚ, ਜੇਕਰ "test" ਵੇਰਵੇ "1" ਤੋਂ ਵੱਡਾ ਹੈ ਤਾਂ E_USER_WARNING ਗਲਤੀ ਹੁੰਦੀ ਹੈ।ਜੇਕਰ E_USER_WARNING ਹੁੰਦਾ ਹੈ, ਤਾਂ ਅਸੀਂ ਆਪਣੇ ਪਰਸੰਦੇ ਗਲਤੀ ਪ੍ਰਬੰਧਕ ਵਰਤੀਏ ਅਤੇ ਸਕ੍ਰਿਪਟ ਨੂੰ ਸਮਾਪਤ ਕਰਾਂਗੇ:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "ਸਕ੍ਰਿਪਟ ਦੀ ਸਮਾਪਤੀ";
 die();
 }
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
 {
 trigger_error("کا رقمی 1 یا نیچل سے کم ہونا چاہئے",E_USER_WARNING);
 }
?>

مذکورہ بالا کوڈ کا اخراج اس طرح کا ہونا چاہئے:

خطا: [512] کا رقمی 1 یا نیچل سے کم ہونا چاہئے
ਸਕ੍ਰਿਪਟ ਦੀ ਸਮਾਪਤੀ

ਹੁਣ, ਅਸੀਂ ਆਪਣੇ ਆਪਣੇ error ਬਣਾਉਣ ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰਨ ਦੇ ਤਰੀਕੇ ਸਿੱਖ ਚੁੱਕੇ ਹਾਂ, ਹੁਣ ਅਸੀਂ ਗਲਤੀ ਰਿਕਾਰਡ ਦੀ ਜਾਂਚ ਕਰੀਏ。

ਗਲਤੀ ਰਿਕਾਰਡ

ਮੂਲ ਰੂਪ ਵਿੱਚ, error_log ਕੰਫ਼ੀਗਰੇਸ਼ਨ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਰੱਖਦੇ ਹੋਏ, PHP ਗਲਤੀ ਰਿਕਾਰਡ ਪ੍ਰਣਾਲੀ ਜਾਂ ਫਾਇਲ ਨੂੰ ਗਲਤੀ ਰਿਕਾਰਡ ਭੇਜਦਾ ਹੈ।error_log() ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਨਾਲ, ਤੁਸੀਂ ਨਿਰਧਾਰਿਤ ਫਾਇਲ ਜਾਂ ਰਿਮੋਟ ਗਲਤੀ ਰਿਕਾਰਡ ਮਿਸਾਲ ਭੇਜ ਸਕਦੇ ਹੋ।

ਆਪਣੇ ਆਪ ਨੂੰ ਈ-ਮੇਲ ਰਾਹੀਂ ਗਲਤੀ ਸੰਦੇਸ਼ ਭੇਜਣਾ, ਇੱਕ ਸ਼ਾਨਦਾਰ ਤਰੀਕਾ ਹੈ ਕਿ ਨਿਰਧਾਰਿਤ ਗਲਤੀ ਨੂੰ ਸੂਚਿਤ ਕਰਨ ਲਈ。

ਈ-ਮੇਲ ਰਾਹੀਂ ਗਲਤੀ ਸੰਦੇਸ਼ ਭੇਜੋ

در مثال زیر، اگر معینہ خطا رخ کرد، ما ای-میل فرستادیم جس میں خطا پیغام شامل ہوگا، اور اسکریپت کو ختم کردیم: }}

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Webmaster has been notified";
 error_log("Error: [$errno] $errstr",1,
 "someone@example.com","From: webmaster@example.com");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
 {
 trigger_error("کا رقمی 1 یا نیچل سے کم ہونا چاہئے",E_USER_WARNING);
 }
?>

مذکورہ بالا کوڈ کا اخراج اس طرح کا ہونا چاہئے:

خطا: [512] کا رقمی 1 یا نیچل سے کم ہونا چاہئے
وبرسٹر نوٹیفائی کیا گیا ہے

مذکورہ بالا کوڈ سے وصول شدہ ای-میل اس طرح کا ہوگا:

خطا: [512] کا رقمی 1 یا نیچل سے کم ہونا چاہئے

یہ طریقہ تمام خطا کیلئے نہیں مناسب ہے۔ معمولی خطا کو سرور پر مستقل ریکارڈنگ سسٹم کے استعمال سے ریکارڈ کیا جانا چاہئے۔