انواع خطاها در php وجود دارد که وقتی در حال نوشتن کد ها هستید ممکن است با آنها برخورد داشته باشید . این خطاها در php (error) بر اساس زمان رخداد آنها دسته بندی می شوند و بعد این درجه بندی ها بر اساس اینکه چطور این موارد یک پیام خطا را به مرورگر ارسال کنند.
این خطاها در php ممکن است به صورت خودگار هنگام اجرای یک کد با سینتکس یا نوشتار غلط ایجاد و توسط تابع trigger_error() به کاربر پاس داده شوند.
خطاها در php ممکن است به خاطر مواردی مثل اجرای یک خط کد اشتباه ، یک حلقه بینهایت که به صورت پیش فرض تا ۳۰ ثانیه اجرا می شود . و غیره … رخ دهند . خب اجازه بدید با چند درجه بندی بزرگ خطاهای php آشنا بشیم .
- Fatal error
- Parse error
- Warning
- 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 خود اجرا کردیم .
1 2 3 4 |
<?php NetParadis(); echo "netparadis.com Website!" ?> |
این برنامه یک خروجی fatal error در زمان اجرا رو ایجاد می کند که اجرای خط echo شده را استاپ می کند
1 |
Fatal error: Call to undefined function NetParadis() in ... on line 2 |
Parse Error
Parse errors فقط در زمان compile رخ می دهد (compile time) که همچنین به syntax error معروف است . اگر هرگونه خطای نوشتاری یا سینتکسی رخ دهد ، برای مثال یم semi-colon ; را در آخر خط جا بیاندازید ، عملگر این نوع ارور را برای مرورگر ارسال و نمایش می دهد.
1 2 3 4 |
<?php echo "content to be displayed to the browser!" echo "<br/>embedding line break"; ?> |
این کد اسکریپت php یک خطای parse error
را به خاطر نبود ; را نمایش می دهد.
1 |
Parse error: syntax error, unexpected 'echo' (T_ECHO), expecting ',' or ';' in ... on line 3 |
Warning
شبیه fatal errors ، پیام های warning بر اساس سه نوع startup warning ، compile time warning ، runtime warning . php یک خطای warning را برای ارسال به به کاربر ایجاد میکند که این خطا هیچ اختلالی در اجرای ادامه کد های php ایجاد نمی کند . یک سناریو ساده برای ساخت خطای warning تقسیم یک عدد بر صفر است که کد php آن در زیر آمده است .
1 2 3 4 5 6 |
<?php $count = 0; $total = 200; $result = $total/$count; echo "RESULT: ". $result; ?> |
در کد php بالا ، مقدار متغییر $count
نیز صفر است و تقسیم هر عدد بر ۰ تعریف نشده است . در خط آخر مقدار تقسیم این دو عدد توسط دستور echo در صفحه چاپ میشود .همانطور که در خروجی هم می بینید خطا ایجاد می شود ولی تابع echo
بدون هیچ مشکلی اجرا شده است .
1 2 |
Warning: Division by zero in ... on line 4 RESULT: |
Notice
مثل تمام خطاها در php ، پیام notice می تواند به صورت خودکار یا اینکه توسط کاربر با استفاده از تابع trigger_error()
ایجاد شود . این قابلیت برای ایجاد و ارسال پیام هایی به مرورگر برای با خبر گذاشتن کاربر از مشکل در کد مورد نظری که سبب ایحاد خطا شده است ، استفاده می شود.
برای مثال ، کد php زیر با یک متغییر $result افزایشی که از قبل مقدار دهی نشده ، شروع شده است . تا زمانی که متغییر $result
تعریف نشده باشد ، یک پیام خودکار notice در حین اجرای برنامه نمایش داده می شود
1 2 3 4 |
<?php $result += 1; echo "RESULT: ". $result; ?> |
و متن خطای notice :
1 2 |
Notice: Undefined variable: result in ... on line 2 RESULT: 1 |
ولی اجرای برنامه با مشکل روبرو نمی شود چراکه یک خطای 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
است . برای مثال :
1 |
php_flag display_errors on |
مطمینا همه شما با این گونه خطا ها در برنامه خود برخوده اید و مطمینا خطا ها یکی از موارد بسیار کاربردی در برنامه نویسی است که شناخت آنها اطلاعات کاملی در اینکه چی هستند و چرا رخ می دهند و راه حل آنها چیست را برای ما مشخص می کنند . حتما زمانی که در حال نوشتن کد ها در سیستم لوکال هستید ،
قابلیت نمایش خطا را فعال بگذارید تا بتوانید تمام آن ها را ببینید و دیباگ کنید ولی هنگام عمومی کردن کد ها سعی کنید نمایش خطا را مخفی کنید چونکه باعث افشای بعضی اطلاعات سرور و سایت شما می شوند و می تواند اطلاعات زیادی را برای نفوذ به سایت شما در اختیار هکرها قرار دهد .
موفق باشید
سلام من یه مشکل در هاست سی پنلم داشتم وقتی واردSSl/TLSمیشم و بر روی گزینه Manage SSL sitesکلیک میکنم A fatal error or timeoutoccurred while processing this directive. [close]این ارور رو میده چیکار باید بکنم؟
سلام. به هاستینگ تیکت بزنید.
با سلام : لطفا راهنمایی کنید .
Message: fopen(/var/www/www-root/data/mod-tmp/ci_sessionp84041ehbcttlj756mgvod0uls1patau): failed to open stream: No space left on device
Filename: drivers/Session_files_driver.php
Line Number: 176
A PHP Error was encountered
Severity: Warning
Message: session_start(): Failed to read session data: user (path: /var/www/www-root/data/mod-tmp)
Filename: Session/Session.php
Line Number: 129
سلام
ترجمه : No space left on device
هیچ فضایی در دستگاه باقی نمانده است
سلام حسن جان من از font awesom تو پروژم استفاده کردم دوتا فایل all.js و all.css رو قرار دادم بدون مشکل تو صفحات اجرا میشه ولی یه صفحه ای که توش تمرینی یه fab رو پیاده سازی کردم وقتی فایل all.js رو اضافه میکنم ارور ۴۰۴ مربوط به فونت میده که تو چت فرستادم براتون خیلی سرچ کردم ولی تنها جواب قرار دادن یه سری اطلاعات تو فایل web.config بود که مربوط به asp.net هستش
لنگ همین مشکلم مهندس شفیعی نازنین یه راهنمایی داداش ؟تشکر از راهنمایی ها تون
جواب نگرفتم حتی ادرس را هم جداگانه باز نمی کند اگه امکان دارد به سایت http://www.hdigim .ir در قسمت سبد خرید نگاه کنید البته از ساختار mvc استفاده شده
خطایی در قسمت سبد خرید مشاهده نشد.احتمالا شما در حالتی که لاگین کردید این خطا رو می بینید. به هر حال اگر اسکریپت رو از جایی تهیه کردید بهتره پیگیری کنید تا پشتیبانی شما رو راهنمایی و مشکل سورس رو حل کنه.
موفق باشید.
مهندس شفعیی این ادرس دهی بر روی local کاملا کار می کند و مشکلی نداره
اگه زحمتی نیست می تونید یک نگاهی کنید
درسته . احتمالا به خاطر وجود
.htaccess
و ری رایت شدن آدرس ها این مشکل روی سرور پیش اومدهالان اگر این آدرس باز بشه http://hdigim.ir/views/showcart2/index.php فایل مورد نظر رو میخونه ولی اگر از داخل
controller.php
این رو اینکلود می کنید مشخصه که نمیتونه باز کنه و شما بهتره یکبار آدرس دهی رو کهviews/showcart2/index.php
است به
../views/showcart2/index.php
تغییر و به اینصورت برای بقیه تست کنید.
مطمینا مشکل خاصی نیست و اگر کمی با php آشنا باشید به راحتی قابل حله.
موفق باشید.
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
کاملا مشخصه که آدرس دهی فایل های شما اشتباه است و سعی کنید آدرس فایل رو بر اساس فایلی که الان در حال اجرای آن هستید تنظیم کنید و اگر نیاز به یک فولدر عقب تر دارید ../ را به اول آدرس اضافه کنید.
موفق باشید.
سلام می تونید مشکل در لود شدن یکی از صفحات من وجود دارد را به من کمک کنید ؟
سلام. دقیقا چه خطایی دارید ؟ متن خطا را ارسال کنید
سلام، وقتتون بخیر
در مورد php ، میخواستم بپرسم چرا خطاها برام داخل خروجی نمایش داده نمیشه؟
مثلا وقتی داخل تگ php یه تگ p تعریف میکنم و داخل بروزر خروجی رو میخوام ببینم، به جای اینکه pars error مبنی بر نشناختن (“) برام رو صفحه بروزر بیاد میزنه not found؟؟؟؟
سلام . در چه محیطی کد php رو اجرا می کنید ؟ آیا مطمین هستید که آدرس فایل php رو از طریق مرورگر اجرا می کنید ؟
اگر آدرس رو درست فراخوانی می کنید و فایل شما داخل پوشه سرور (htdocs یا www) است احتمالا نمایش ارور ها در فایل php.ini خاموش است (مقادیر error_reporting و display_errors) .
در حالت بعدی هم بهتره کد خود رو قرار بدید تا بررسی بشه .
موفق باشید.