הסרת ההרחבה MySQL ב- PHP7 ומה "הפתרון" למערכות שלא תוחזקו כראוי?

השעה 04:30 בבוקר, אני מקבל שיחת טלפון; מביט בשעון, שואל עצמי "למה?" אך מתאפס בזריזות ועונה לשיחה.
מאחורי הקו השני, עומד בחור שנשמע דיי טרוד, עצבני אך עירני במיוחד – "שלום ניב, זה X, אני מאוד מצטער על השעה, זה מקרה דחוף".

בעודי מנסה לפענח מיהו X, מה קרה ואיך אוכל לעזור, "האתר שלי נפל" הוא מוסיף. נשמתי לרווחה (בכל זאת- אנו חיים במציאות מורכבת במיוחד, בייחוד בתקופה זו בה הטרור גובר) "יש לי פורטל גדול ואני נמצא על אחסון שיתופי ובעל השרת החליט לעדכן את גרסת ה-PHP ללא הודעה מוקדמת, האתר שלי נבנה לפני 5 שנים ויש בעיות תאימות. Y הפנה אותי אליך, אתה חייב לעזור לי!" בוקר טוב עולם. אני מבין שכבר לא אחזור לישון.

"תראה, אין פתרון קסם. אם הקוד לא עבר תחזוקה במשך השנים…." אני מנסה להסביר, אך נקטע: "האתר חייב לשוב לפעילות בבוקר. יצאתי בקמפיין פרסום לשבוע הקרוב. אתה מוכרח לעזור לי! בעל השרת לא מוכן לשנמך את הגרסה בחזרה ולעבור שרת לא רלוונטי בזמן שנותר. אשלם כמה שיידרש. תעזור לי".

מדליק את המחשב, מקליד את כתובת האתר ומקבל את השגיאה הבאה:

Deprecated: The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /path/to/filename.php on line 123

מחייך. נכנס לשרת, מדפדף בין הקבצים- החיוך נמחק; נתקל בפונקציות שזמנן עבר מן העולם, כדוגמת call_user_method שירדה מן הפרק כבר ב-PHP 4.1.0 ואפילו ב eregi שהתמיכה בה פסקה ב-PHP 5.3.0.

"תראה, מה שקרה כאן בעצם הוא שהתבצע עדכון לגרסת ה-PHP המותקנת בשרת. החל מגרסה 5.5 הופסקה התמיכה בהרחבה MySQL בדרך הפרוצדורלית. יש להשתמש מעתה ב- MySQLI או PDO_MySQL" אני מנסה להסביר, כשהשעון נושק ל-05:00 "אתה חייב לטפל בזה. תמצא דרך שהאתר ישוב לפעילות. אחר כך נטפל בשאר הבעיות."

אמלק; הפתרון המהיר ל-MySQL Deprecated

נכנס לגוגל, מתחיל לרחרח ונתקל בכלי MySQLConverterTool שבעצם לוקח קוד אשר משתמש בהרחבת MySQL ומחליף אותו את הפונקציות הנגזרות ממנו להרחבת MySQLi.

כל שעלינו לעשות, הוא לערוך את הקובץ Generic.php שנמצא בתיקייה Function בשורות 40-45

   /**
    * Name of a variable holding the connection identifier of all functions that rely on default connections
    *
    * @var  string
    */
    public $ston_name = '$GLOBALS["___mysqli_ston"]';

כפי שבוודאי שמתם לב, עלינו לערוך את הערך של המשתנה הגלובלי לשם של משתנה גלובלי המחזיק את ההתחברות למסד הנתונים באמצעות mysql_connect (טרם התבצע שינוי ל-mysqli_connect)

לסיכום…

זה אכן מהיר ובמקרה הזה עבד כראוי (לאחר שטיפלתי בפונקציות נוספות שהוסרו ב – PHP 7) אך לא הייתי ממליץ על שימוש בכלים אוטומטיים שיבצעו עבורכם שינויים בקוד, בייחוד שמדובר בהרחבה משמעותית כזו המטפלת בתקשורת מול מסד הנתונים. מומלץ תמיד לתחזק קוד קיים וכדי שיוקל עליכם לעשות זאת, הקפידו להשאיר הערות בקוד. זה בהחלט יקל עליכם כשדרשו לתחזק קוד שעמד תקופה.

על השינויים והחידושים ב- PHP 7, תוכלו לקרוא בבלוג "מעונן חלקית" וכמובן את רשימת השינויים המלאה תמצאו כאן

(91)

הגב לכתבה דרך הפייסבוק:

נהנים מהתכנים? מילה טובה תעודד אותי להמשיך לכתוב

האימייל לא יוצג באתר. שדות החובה מסומנים *