אתה נמצא כאן יסודות השפה  >>  אופרטורים  >>  שליטה בטעויות

שליטה בטעויות

PHP תומכת בשליטה בטעויות ע"י האופרטור @. כאשר יש ביטוי שלפניו מופיע הסימן הזה, במידה והביטוי מוציא טעות, אז התוכנית מתעלמת מן הטעות ולא מדפיסה אותה. במקרה של טעות המשתנה הגלובלי $php_errormsg יכיל את הטקסט שמגדיר את הטעות (בהנחה והקונפיגורציה של PHP משתמשת במשתנה זה), וישוכתב בכל פעם שתיווצר טעות. ניתן להשתמש באופרטור הזה רק עבור ביטויים (ולא להגדרות של פונקציות ומחלקות או לביטויי תנאי ולולאות). במקרה של טעות קריטית, PHP תפסיק את המשך הריצה של התוכנית, ולפעמים תתעלם מן הסימן @ (בהתאם לקונפיגורציה) ותדפיס הודעת שגיאה.

פעמים רבות נרצה לסיים את התוכנית עבור שגיאה מסויימת גם אם PHP אינה מסיימת אותה אוטומטית באותו סוג השגיאה. זאת עושים ע"י הפונקציה exit() (או הפונקציה die()), שבדר"כ מופיעה בצורה: "@(expr) or exit("error_msg");". הביטוי שבא אחרי ה-or מופעל במידה והביטוי expr מחזיר ערך שקר (ובמקרה של טעות הביטוי אכן יחזיר ערך שקר).

<?php
  $my_file=@file("not_exist_file")
/*הפונקציה file() מנסה לקרוא קובץ שלא קיים,
אך עם שימוש באופרטור @ לא תודפס הודעת שגיאה,
והפונקציה תחזיר ערך שקר,
ותשים את הודעת השגיאה ב-$php_errormsg.
*/
 or exit("Failed to open file. Error was: '<B>$php_errormsg</B>'")
/*הביטוי שלפני or החזיר ערך שקר,
לכן אנו מבצעים את מה שבא אחרי ה-or:
יוצאים מהתוכנית תוך כדי הדפסת הודעת שגיאה
משלנו שכוללת את הודעת השגיאה של התוכנית.
*/
;
?>


תגובות בנושא

הדוגמא של אופרטורי השוואה 01-11-01 22:01
 מני
#6

שלום,
למה php_errormsg$ הוא NULL?

תודה

המשתנה php_errormsg$ 02-11-01 00:01
 אלי חן (אדמין)
#8

PHP שומרת את הטעות האחרונה במשתנה הגלובלי php_errormsg$ רק אם אפשרות זו פעילה בקונפיגורציה של PHP.

ראה את הכניסה track_errors בקונפיגורציה של PHP. אם כניסה זו היא On אז PHP משתמשת במשתנה הזה, אחרת המשתנה הזה לא יהיה מוגדר וערכו יהיה שקול ל-NULL.

(בדוגמא שבעמוד זה, ערכו של המשתנה הוא NULL. כנראה שבקונפיגורציה של PHP על שרת זה הכניסה track_errors כבויה.)

track_error 08-12-05 03:01
 עזריאל ברגר
#2608

שיניתי את הגדרת track_error מoff לon וזה לא עזר. מישהו יודע מה יכולה להיות הבעיה?

קלטתי את הבעיה 08-12-05 03:01
 עזריאל ברגר
#2609

צריך לעשות restart לשרת אחרי שינוי הקונפיגורציה בphp.ini.

לא הבנתי משהו אחד בקובץ הINI בשורה שאני אומר לשנות לYES 08-12-07 14:01
 ארז כהן
#2780

דבר ראשון, אני מפתח מתחיל בPHP עם נסיון בASP(מה שמשליך כמובן על VB) ועוד כל מיני שפות, אבל בהחלט האתר המושקע ביותר והעוזר ביותר שראיתי, עצה אחת אם אפשר. הדרך הטובה ביותר ללמוד היא באמצעות דוגמאות קוד, וכאלו אין פה מספיק, מסוגים שונים. אם אפשר זה יעזור...אבל לעניינו.
כתובה שם הודעת הזהרה: "note:Never use this feature for production box" האנגלית שלי לא רעה בכלל ואין לי בעית הבנה, אבל מה זה production box? האם הכוונה שזה נועד רק לשלב הפיתוח והבדיקה ואין להשתמש באופציה הזאת על השרת המסחרי? או שהכוונה אחרת?
תודה ושוב, אתר מעולה!!!!


לדף הקודםאופרטורי השוואה -הקודם
לתחילת הדףלתחילת הדף
הבא- קידום והפחתהלדף הבא