
תיקון PHP זמני מ-2014 עם כמעט 20 מיליון התקנות — וכעת הוא מיושן
ג'ייק א. סמית' כתב 174 שורות PHP ב-2014 כפתרון זמני ל-CMS של AOL. אחרי כמעט 20 מיליון התקנות מ-Packagist הוא סימן את החבילה כמיושנת ומפנה מפתחים ל-URI API המובנה ב-PHP 8.5.
ב-2014 כתב ג'ייק א. סמית' 174 שורות PHP כפתרון זמני למערכת ניהול התוכן של AOL. הוא פרסם את הקוד ב-Packagist למקרה שמישהו אחר יזדקק לאותו תיקון. שתים עשרה שנים אחר כך הוא הותקן כמעט 20 מיליון פעמים, וב-15 בספטמבר סימן אותו המחבר כמיושן.
פתרון זמני
המדובר היה בשדרוג ה-CMS של AOL מ-PHP 5.2 ל-5.3, וחלק ממנו היה נטישת גרסה 1 של הרחבת pecl_http, שסיפקה פונקציה בשם http_build_url(). מערכת ניהול תוכן מתמודדת עם המון כתובות URL, והמערכת הזאת קראה לפונקציה בעשרות מקומות שסמית' לא רצה לגעת בהם. במקום זה הוא שחזר אותה: הפונקציה שלו הוגדרה רק אם הפונקציה האמיתית עדיין לא הייתה קיימת, כך שהקוד הישן לא הבחין בשום שינוי. באותה תקופה Composer החל לתפוס תאוצה, מה שהקל על שיתוף התיקון, והוא ציפה שהפתרון יחזיק שנה-שנתיים.
אלה הרבה התקנות
זמני הוא לא היה. נתוני Packagist שצורפו לפוסט מראים 19,864,271 התקנות בסך הכול ו-401,308 בשלושים הימים האחרונים, כשההתקנות היומיות טיפסו מכמעט אפס ב-2014 לכ-13,000 ביום ב-2026. Composer הוא רק חלק מהתמונה: WPML, התוסף הרב-לשוני המוביל לוורדפרס, כולל את הקוד ישירות בקוד הבסיס שלו ומותקן ביותר מ-1.5 מיליון אתרים, וספריית שמות התחום idna-convert תלויה בו — כך הגיע הקוד לקוד המקור של מערכת SPIP הצרפתית ובסופו של דבר לאריזות של דביאן ואובונטו.
כשחזר לחבילה אחרי שנים, סמית' מצא גם באג: חיבור נתיב לכתובת URL שמסתיימת בלוכסן מסיר מהנתיב כל אות a. מתחת להערה על מעקף ללוכסנים בסוף, הקוד מוסיף לנתיב אות a מיותרת כדי שתמיד יהיה מקטע אחרון לחתוך, ואז חותך אותו בחיפוש והחלפה. כשהנתיב מסתיים בלוכסן, ההחלפה הזאת מוחקת גם כל אות a אחרת. ב-2021 ביקש ממתחזק חדש, שלושה אנשים הציעו את עצמם, אבל אובדן פתאומי במשפחה קטע את ההמשך, הוא לא חזר לנושא, והחבילה נותרה בלי טיפול במשך שנים.
להתיישן במקום למסור
סמית' בחר לא להחיות את החבילה בעצמו וגם לא להעביר אותה לאחר. ספריית ה-URI של PHP League היא התשובה של הקהילה כבר שנים, ו-PHP 8.5 כולל מעתה URI API תואם תקנים בתוך השפה עצמה; שתיהן עדיפות על פתרון זמני בן 174 שורות מ-2014, והמשך תחזוקת החבילה רק יעכב את המעבר. מסירת חבילה נפוצה למתחזק שאיש במורד הזרם לא בדק, הוא טוען, היא בדיוק מה שתוקפים מחפשים. החבילה תמשיך להיות מותקנת אך לא תקבל תיקונים חדשים, כולל לבאג של האות a, משום שגם שינוי של שורה אחת עלול לגרום לתוצאות לא מכוונות כשאין מי שיתמוך בו; ה-README מסביר כיצד לעבור. ובתוספת: AOL מעולם לא העבירה את ה-CMS שלה מהפתרון הזמני — הוא רץ שם עד שהפלטפורמה נסגרה בסביבות 2020.
SiTech — פיתוח אתרים בכוח ה-AI
אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.