تعمیر موقت PHP من از سال 2014 نزدیک به 20 میلیون نصب دارد. امروز من آن را بی اعتبار می کنم
آدرس مقاله: https://jakeasmith.com/blog/http-build-url/ آدرس نظرات: https://news.ycombinator.com/item?id=49718773 امتیاز: 241 # نظرات: 60
دوازده سال پیش، من 174 خط PHP را به عنوان یک توقف برای سیستم مدیریت محتوای AOL نوشتم. من آن را در Packagist قرار دادم تا در صورتی که شخص دیگری به همان پچ نیاز داشته باشد، و به نوعی از آن زمان تقریبا 20 میلیون بار نصب شده است. امروز من آن را منسوخ علامت گذاری کردم.
در سال 2014، ما در میانه ارتقا CMS AOL از PHP 5.2 به 5.3 بودیم. بخشی از آن ارتقاء حذف نسخه 1 افزونه pecl_http بود که تابعی به نام http_build_url() را به ما داد. یک CMS با URL های زیادی سروکار دارد و ما آن تابع را در ده ها مکان نامیده ایم. من به آنها دست نمی زدم این تابع به اندازه کافی ساده به نظر می رسید که بازتولید شود، بنابراین من http_build_url() خودم را نوشتم که فقط در صورتی تعریف می شود که تابع واقعی از قبل وجود نداشته باشد. کد قدیمی هرگز نمی دانست که چیزی تغییر کرده است.
آهنگساز در آن زمان به تازگی شروع به کار کرده بود که اشتراکگذاری آن را آسان کرد. من فکر کردم که آن را برای یک یا دو سال حفظ خواهد کرد، تا زمانی که جامعه PHP به سمت چیز بهتری حرکت کند.
خب موقتی نبود تقریبا 20 میلیون بار از Packagist نصب شده است و هنوز هم بیش از 400000 نصب در ماه انجام می دهد.
و معلوم شد که Composer تنها بخشی از تصویر است. WPML، افزونه چندزبانه پیشرو در بازار برای وردپرس، پلیفیل را مستقیما در پایگاه کد خود قرار میدهد و WPML میگوید این افزونه در بیش از 1.5 میلیون سایت نصب شده است. idna-convert کتابخانه نام دامنه نیز به آن بستگی دارد، که نحوه ارسال آن در منبع SPIP، یک سیستم مدیریت محتوای فرانسوی، و نحوه بسته بندی آن در دبیان و اوبونتو است. در بین همه آنها، شانس بسیار خوبی وجود دارد که از وب سایتی بازدید کرده باشید که هنوز کد من را اجرا می کند.
تا چند ماه پیش، زمانی که برای اولین بار پس از سال ها به بسته بندی نگاه کردم، متوجه نشدم که چقدر گسترش یافته است. میدونستم کاربر داره تا سال 2021 برای مدتی از PHP خارج شده بودم، و دانلودها به اندازه کافی غافلگیر کننده بودند که از من برای یک نگهدارنده جدید درخواست کردم. سه نفر پیشنهاد دادند. مدت کوتاهی پس از پرسیدن، ما یکی از اعضای خانواده را به طور غیرمنتظره ای از دست دادیم و این برای مدتی دنیای ما را زیر و رو کرد. من هرگز پیگیری نکردم و این به عهده من است. تا زمانی که همه چیز حل شد، اهداف دیگری فراتر رفته بود و من سال ها این بسته را فراموش کردم.
همراه با اعداد، تعداد انگشت شماری از مشکلات GitHub وجود داشت، از جمله یکی که در آن پیوستن یک مسیر به یک URL با یک اسلش انتهایی، هر حرف "a" را از مسیر خارج می کند. خیلی برای ساده بودن. در زیر نظری که میخواند // راهحل برای اسلشهای دنبالهدار، کد من یک "a" را روی مسیر قرار میدهد تا همیشه آخرین بخش برای قطع کردن وجود داشته باشد، سپس آن را با یک Find-and-Replace قطع میکند. وقتی مسیر به اسلش ختم میشود، آخرین بخش فقط «a» است و «یافتن و جایگزینی» هر «a» دیگری در مسیر را با خود میبرد. من نمی توانم باور کنم که این باگ تا زمانی که انجام شد بی توجه بود.
بنابراین تصمیمی داشتم. من میتوانم بعد از تقریبا یک دهه دوری دوباره به PHP شیرجه بزنم، بسته را به یکی از افرادی که پیشنهاد دادهاند تحویل بدهم، یا بگذارم همانجا بماند.
همیشه قرار بود موقتی باشد، بنابراین من آن را بازنشسته میکنم. کتابخانه URI لیگ پیاچپی سالها پاسخ جامعه بوده است، و PHP 8.5 اکنون یک URI API مطابق با استانداردها را در خود زبان ارائه میکند (با تشکر از jawira که به من اشاره کرد). هر دو بهتر از یک شیم 174 خطی از سال 2014 هستند. حفظ بسته تنها حرکتی را که همه باید انجام دهند به تأخیر می اندازد، و تحویل آن علاوه بر آن خطری را به همراه خواهد داشت. من به کسی که پیشنهاد داده است شک ندارم، و ozh برای شما تلاش کرده است.
اما یک بسته به طور گسترده نصب شده با یک نگهدارنده جدید که هیچ کس در پایین دست بررسی نکرده است دقیقا همان چیزی است که مهاجمان به دنبال آن هستند. ویدیوی Veritasium در درب پشتی xz Utils بهترین چیزی است که من در مورد نحوه انجام آن دیدهام.
بسته به نصب ادامه میدهد، اما رفعهای جدیدی دریافت نمیکند، از جمله برای اشکال «a» گمشده. پس از این مدت طولانی بدون تغییر، حتی یک اصلاح یک خطی می تواند عواقب ناخواسته ای برای کسی داشته باشد، بدون اینکه کسی در اطراف آن را پشتیبانی کند. README نشان می دهد که چگونه تغییر دهید.
من این کد را نوشتم تا مهاجرت دردناکی را برای خودم و هر کس دیگری که از آن عبور می کند راحت کنم. از همه کسانی که درخواست جذب ارسال کردند یا پیشنهاد کردند آن را تحویل بگیرند، و از افرادی که مدتها پس از اینکه من خواندن آنها را متوقف کردم، به ثبت آنها ادامه دادند، تشکر میکنم. اجرای خوبی برای یک تعمیر موقت بود.
P.S. ما هرگز CMS AOL را از polyfill "موقت" منتقل نکردیم. تا زمانی که کل پلتفرم در حدود سال 2020 خاموش شد، آنجا اجرا شد.
متن اصلی (انگلیسی)
My temporary PHP fix from 2014 has nearly 20M installs. Today I'm deprecating it
Article URL: https://jakeasmith.com/blog/http-build-url/ Comments URL: https://news.ycombinator.com/item?id=49718773 Points: 241 # Comments: 60