انواع خطاها در php

  • آپدیت شده در تاریخ

انواع خطاها در php وجود دارد که وقتی در حال نوشتن کد ها هستید ممکن است با آنها برخورد داشته باشید . این خطاها در php (error) بر اساس زمان رخداد آنها دسته بندی می شوند و بعد این درجه بندی ها بر اساس اینکه چطور این موارد یک پیام خطا را به مرورگر ارسال کنند.

این خطاها در php ممکن است به صورت خودگار هنگام اجرای یک کد با سینتکس یا نوشتار غلط ایجاد و توسط تابع trigger_error() به کاربر پاس داده شوند.

خطاها در php ممکن است به خاطر مواردی مثل اجرای یک خط کد اشتباه ، یک حلقه بینهایت که به صورت پیش فرض تا ۳۰ ثانیه اجرا می شود . و غیره … رخ دهند . خب اجازه بدید با چند درجه بندی بزرگ خطاهای php آشنا بشیم .

  1. Fatal error
  2. Parse error
  3. Warning
  4. Notices

Fatal Error

این نوع خطا به خاطر استثناهای نادیده گرفته شده که قابل بازیابی نیستند اتفاق می افتد . زمانی که این خطا رخ می دهد ، ادامه اجرا برنامه (اسکریپت php) متوقف می شود .برا اساس زمان بندی رخداد ، fatal error ها درجه می شوند بصورت ،

  • Startup fatal error – این ارور زمانی رخ می دهد که کد در محیط php نمی تواند اجرا شود .
  • Compile time fatal error – این نوع خطا زمانی رخ میدهد که در حال استفاده از داده هایی که وجود نداد هستیم مثل فایل ، کلاس ، تابع و …
  • Runtime fatal error – این خطا در زمان اجرا رخ میدهد . که شبیه خطای Compile time fatal error است به استثنای اینکه Compile time fatal error توسط انجین Zend برا اساس زمان رخداد ایجاد می شود.

مثال : خطای Fatal Error

یک تابع از پیش تعریف نشده به اسم NetParadis() را در اسکریپت php خود اجرا کردیم .

این برنامه یک خروجی fatal error  در زمان اجرا رو ایجاد می کند که اجرای خط echo شده را استاپ می کند

Parse Error

Parse errors فقط در زمان compile رخ می دهد (compile time) که همچنین به  syntax error  معروف است . اگر هرگونه خطای نوشتاری یا سینتکسی رخ دهد ، برای مثال یم semi-colon ; را در آخر خط جا بیاندازید ، عملگر این نوع ارور را برای مرورگر ارسال و نمایش می دهد.

این کد اسکریپت php یک خطای parse error را به خاطر نبود ; را نمایش می دهد.

Warning

شبیه fatal errors ، پیام های warning بر اساس سه نوع startup warning ، compile time warning ، runtime warning . php یک خطای warning را برای ارسال به به کاربر ایجاد میکند که این خطا هیچ اختلالی در اجرای ادامه کد های php ایجاد نمی کند . یک سناریو ساده برای ساخت خطای warning تقسیم یک عدد بر صفر است که کد php آن در زیر آمده است .

در کد php بالا ، مقدار متغییر $count نیز صفر است و تقسیم هر عدد بر ۰ تعریف نشده است . در خط آخر مقدار تقسیم این دو عدد  توسط دستور echo در صفحه چاپ میشود .همانطور که در خروجی هم می بینید خطا ایجاد می شود ولی تابع echo بدون هیچ مشکلی اجرا شده است .

Notice

مثل تمام خطاها در php ، پیام notice می تواند به صورت خودکار یا اینکه توسط کاربر با استفاده از تابع trigger_error() ایجاد شود . این قابلیت برای ایجاد و ارسال پیام هایی به مرورگر برای با خبر گذاشتن کاربر از مشکل در کد مورد نظری که سبب ایحاد خطا شده است ، استفاده می شود.

برای مثال ، کد php زیر با یک متغییر $result افزایشی که از قبل مقدار دهی نشده  ، شروع شده است . تا زمانی که متغییر $result  تعریف نشده باشد ، یک پیام خودکار notice در حین اجرای برنامه نمایش داده می شود

و متن خطای notice :

ولی اجرای برنامه با مشکل روبرو نمی شود چراکه یک خطای notice به مرورگر ارسال می شود و سپس مقدار افزایشی متغییر $result در صفحه چاپ می شود.

نکته :

  • در php به جای نمایش خطا از اصطلاح شلیک خطا (trigger) استفاده می شود یعنی زمانی خطایی رخ دهد گلوله (ارور) مربط به آن همزمان به مرورگر شلیک می شود که ما ترجیحا از کلمه نمایش استفاده کردیم
  • ثابت ارور های از پیش تعیین شده ای مثل E_ERROR  ، E_WARNING  , E_NOTICE , E_PARSE , .. وجود دارد که هر یک از آنها با یک مقدار عددی تعریف شده اند . برای مثال ، مقدار عددی تعریف شده برای E_ERROR عدد ۱ است.
  • این ثابت های (CONSTANTS) نیاز است که داخل فایل پیکربندی php که php.ini است, مشخص شوند تا هنگام اجرای کد ها نمایش داده شوند .
  • از طرف دیگر می توانیم تنظیمات نمایش خطا را به صورت run time متوقف کنیم . با استفاده از تابع error_reporting() در php
  • یکی از راه های جایگزین برای تغییر تنظیمات نمایش خطا در فایل پیکربندی ، فعال کردن php flags توسط فایل .htaccess است . برای مثال :

مطمینا همه شما با این گونه خطا ها در برنامه خود برخوده اید و مطمینا خطا ها یکی از موارد بسیار کاربردی در برنامه نویسی است که شناخت آنها اطلاعات کاملی در اینکه چی هستند و چرا رخ می دهند و راه حل آنها چیست را برای ما مشخص می کنند . حتما زمانی که در حال نوشتن کد ها در سیستم لوکال هستید ،
قابلیت نمایش خطا را فعال بگذارید تا بتوانید تمام آن ها را ببینید و دیباگ کنید ولی هنگام عمومی کردن کد ها سعی کنید نمایش خطا را مخفی کنید چونکه باعث افشای بعضی اطلاعات سرور و سایت شما می شوند و می تواند اطلاعات زیادی را برای نفوذ به سایت شما در اختیار هکرها قرار دهد .

موفق باشید

حسن شفیعی علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم

آموزش های رایگان بیشتر در اینستاگرام ما ...

NETPARADIS /
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۱۰)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. عباس ۷ مهر ۱۳۹۷

    جواب نگرفتم حتی ادرس را هم جداگانه باز نمی کند اگه امکان دارد به سایت http://www.hdigim .ir در قسمت سبد خرید نگاه کنید البته از ساختار mvc استفاده شده

    پاسخ
    1. حسن شفیعی ۷ مهر ۱۳۹۷

      خطایی در قسمت سبد خرید مشاهده نشد.احتمالا شما در حالتی که لاگین کردید این خطا رو می بینید. به هر حال اگر اسکریپت رو از جایی تهیه کردید بهتره پیگیری کنید تا پشتیبانی شما رو راهنمایی و مشکل سورس رو حل کنه.
      موفق باشید.

      پاسخ
  2. عباس ۷ مهر ۱۳۹۷

    مهندس شفعیی این ادرس دهی بر روی local کاملا کار می کند و مشکلی نداره
    اگه زحمتی نیست می تونید یک نگاهی کنید

    پاسخ
    1. حسن شفیعی ۷ مهر ۱۳۹۷

      درسته . احتمالا به خاطر وجود .htaccess و ری رایت شدن آدرس ها این مشکل روی سرور پیش اومده
      الان اگر این آدرس باز بشه http://hdigim.ir/views/showcart2/index.php فایل مورد نظر رو میخونه ولی اگر از داخل controller.php این رو اینکلود می کنید مشخصه که نمیتونه باز کنه و شما بهتره یکبار آدرس دهی رو که
      views/showcart2/index.php
      است به
      ../views/showcart2/index.php
      تغییر و به اینصورت برای بقیه تست کنید.
      مطمینا مشکل خاصی نیست و اگر کمی با php آشنا باشید به راحتی قابل حله.

      موفق باشید.

      پاسخ
  3. عباس ۷ مهر ۱۳۹۷

    Warning: require(views/showcart2/index.php): failed to open stream: No such file or directory in /home/hdigimir/domains/hdigim.ir/public_html/core/controller.php on line 17

    Warning: require(views/showcart2/index.php): failed to open stream: No such file or directory in /home/hdigimir/domains/hdigim.ir/public_html/core/controller.php on line 17

    Fatal error: require(): Failed opening required ‘views/showcart2/index.php’ (include_path=’.:/usr/lib/php:/usr/local/lib/php’) in /home/hdigimir/domains/hdigim.ir/public_html/core/controller.php on line 17

    پاسخ
    1. حسن شفیعی ۷ مهر ۱۳۹۷

      کاملا مشخصه که آدرس دهی فایل های شما اشتباه است و سعی کنید آدرس فایل رو بر اساس فایلی که الان در حال اجرای آن هستید تنظیم کنید و اگر نیاز به یک فولدر عقب تر دارید ../ را به اول آدرس اضافه کنید.

      موفق باشید.

      پاسخ
  4. عباس ۷ مهر ۱۳۹۷

    سلام می تونید مشکل در لود شدن یکی از صفحات من وجود دارد را به من کمک کنید ؟

    پاسخ
    1. حسن شفیعی ۷ مهر ۱۳۹۷

      سلام. دقیقا چه خطایی دارید ؟ متن خطا را ارسال کنید

      پاسخ
  5. مدنی ۱ مرداد ۱۳۹۷

    سلام، وقتتون بخیر
    در مورد php ، میخواستم بپرسم چرا خطاها برام داخل خروجی نمایش داده نمیشه؟
    مثلا وقتی داخل تگ php یه تگ p تعریف میکنم و داخل بروزر خروجی رو میخوام ببینم، به جای اینکه pars error مبنی بر نشناختن (“) برام رو صفحه بروزر بیاد میزنه not found؟؟؟؟

    پاسخ
    1. حسن شفیعی ۱ مرداد ۱۳۹۷

      سلام . در چه محیطی کد php رو اجرا می کنید ؟ آیا مطمین هستید که آدرس فایل php رو از طریق مرورگر اجرا می کنید ؟

      اگر آدرس رو درست فراخوانی می کنید و فایل شما داخل پوشه سرور (htdocs یا www) است احتمالا نمایش ارور ها در فایل php.ini خاموش است (مقادیر error_reporting و display_errors) .

      در حالت بعدی هم بهتره کد خود رو قرار بدید تا بررسی بشه .

      موفق باشید.

      پاسخ
دوره های آموزشی

دانلود رایگان کتاب آموزش PHP

صفر تا صد PHP و MySQL را یکجا یاد بگیرید
همین الان دانلود کن
نگران نباشید. ایمیل‌های مزاحم نمی‌فرستیم
close-link