blog top bar
zhaket logo

تداخل افزونه WP Rocket با وردپرس ۷.۱

اخبار روز حوزه وب

4 دقیقه زمان مطالعه

پس از انتشار وردپرس ۷.۱ در ۲۸ مرداد ۱۴۰۵، سایت‌هایی که از افزونه WP Rocket استفاده می‌کردند با یک خطای بحرانی (Fatal Error) روبه‌رو شدند. این اختلال، پیشخوان وردپرس، REST API و حتی WP-CLI را از کار می‌اندازد و سایت را کاملاً از دسترس خارج می‌کند. هرچند تیم WP Rocket نسخه اصلاحی ۳.۲۳.۲.۲ را برای این منظور منتشر کرده است، اما مدیران سایت‌ها باید با ریشه فنی مشکل و راه‌های مواجهه با آن آشنا باشند.

علت تداخل افزونه WP Rocket با وردپرس ۷.۱

در وردپرس ۷.۱، روش تولید شناسه یکتا برای توابع متصل به هوک‌ها تغییر کرده است. این شناسه‌ها که در نسخه‌های قبلی به‌صورت رشته‌های طولانی بودند، حالا به اعداد صحیح تبدیل شده‌اند. افزونه WP Rocket در ماژول مربوط به سازگاری با Cloudflare فرض را بر این گذاشته بود که شناسه‌های یکتا مانند قبل یعنی رشته‌ای هستند و به همین دلیل از تابع substr() بر روی آن‌ها استفاده می‌کرد. در نتیجه به محض ورود عدد به‌جای رشته، حالت سخت‌گیرانهٔ وردپرس مانع اجرای برنامه می‌شود و خطای نوع (TypeError) رخ می‌دهد.

رفع مشکل تداخل افزونه WP Rocket

با توجه به اینکه پیشخوان وردپرس از دسترس خارج شده است، غیرفعال‌سازی افزونه از مسیر معمول امکان پذیر نیست. برای این منظور باید یکی از روش‌های زیر را مورد بررسی قرار دهید:

  • استفاده از WP-CLI: با اجرای دستور wp plugin deactivate wp-rocket –skip-plugins=wp-rocket از طریق SSH، افزونه غیرفعال می‌شود
  • تغییر نام پوشه افزونه: از طریق فایل منیجر هاست یا دسترسی FTP، نام پوشه wp-rocket در مسیر wp-content/plugins/ را به wp-rocket.off تغییر دهید
  • کنسول مدیریت: در سرویس‌های میزبانی که امکان مدیریت غیرمستقیم افزونه‌ها در آنها فراهم شده است، می‌توان افزونه WP Rocket را غیرفعال کرد

توجه داشته باشید که حذف فایل Cloudflare.php راه‌حل مناسبی نیست و ممکن است خطاهای دیگری را به دنبال داشته باشد. این فایل بخشی از ساختار افزونه WP Rocket به حساب می‌آید و حذف آن باعث می‌شود افزونه هنگام بارگذاری، به دنبال فایلی بگردد که دیگر وجود ندارد. تنها مسیر مطمئن برای بازگرداندن سایت، غیرفعال‌سازی موقت افزونه یا به‌روزرسانی آن است.

اگر فعلاً نمی‌توانید WP Rocket را به نسخهٔ ۳.۲۳.۲.۲ ارتقا دهید، از این روش به‌طور موقت استفاده کنید:

  1. به مسیر wp-content/plugins/wp-rocket/inc/ThirdParty/Plugins/CDN/ رفته و فایل Cloudflare.php را باز کنید
  2. به خط ۵۶۲ بروید و عبارت substr( $key, … ) را پیدا کنید
  3. آن را به substr( (string) $key, … ) تغییر دهید
  4. فایل را ذخیره کرده و افزونه را دوباره فعال نمایید

در صورتی که هنوز وب‌سایت خود را به وردپرس ۷.۱ ارتقا نداده‌اید، ابتدا باید WP Rocket را به نسخه ۳.۲۳.۲.۲ به‌روزرسانی کرده و سپس آپدیت هسته را انجام دهید. تجربه این حادثه نشان می‌دهد که مدیران سایت‌ها باید همواره برای هر سناریویی، آمادگی کافی داشته باشند.

راهنمای رسمی WP Rocket

WP Rocket در مستندات خود نیز روش‌هایی را بسته به سطح دسترسی کاربران ارائه کرده که در ادامه توضیح داده می‌شود:

روش اول: سایت‌هایی که به پیشخوان دسترسی دارند

  1. ابتدا WP Rocket را از بخش افزونه‌ها غیرفعال کنید
  2. سپس افزونهٔ رسمی «WP Rocket – Update Notification Recovery» را دانلود کرده و در وب‌سایت خود فعال کنید. این ابزار امکان شناسایی آخرین نسخهٔ WP Rocket را فراهم می‌سازد
  3. در صفحهٔ لیست افزونه‌ها، بر روی «Check Available Updates Now» کلیک کنید تا وردپرس آخرین نسخهٔ موجود برای WP Rocket را شناسایی کند
  4. در نهایت WP Rocket را به ۳.۲۳.۲.۲ به‌روزرسانی کنید. این نسخه مشکل تداخل را به‌طور کامل برطرف می‌کند
  5. پس از به‌روزرسانی WP Rocket، افزونهٔ کمکی را غیرفعال و حذف کنید

روش دوم: سایت‌هایی که از دسترس خارج شده‌اند

درصورتیکه به پیشخوان وردپرس دسترسی ندارید، از روش زیر استفاده کنید:

  1. از طریق FTP یا فایل منیجر هاست، نام پوشهٔ wp-rocket در wp-content/plugins/ را به wp-rocket-off تغییر دهید تا وردپرس آن را غیرفعال تشخیص دهد و سایت دوباره فعال شود
  2. پس از بازیابی سایت، نام پوشه را دوباره به wp-rocket بازگردانید. در این مرحله، افزونه فوق غیرفعال است
  3. در این مرحله، افزونهٔ کمکی «WP Rocket – Update Notification Recovery» را نصب و فعال کنید. سپس از طریق «Check Available Updates Now» نسخهٔ ۳.۲۳.۲.۲ را نصب نمایید

راهکارهای موقت WP Rocket برای کاربران حرفه‌ای

اگر جزو کاربران حرفه‌ای هستید و با کدنویسی آشنایی دارید، از این دو راهکار می‌توانید استفاده کنید:

  • ویرایش مستقیم فایل PHP: در فایل Cloudflare.php خط ۵۶۲، عبارت substr( $key, … ) را به substr( (string) $key, … ) تغییر دهید. این کار خطا را فوراً برطرف می‌کند
  • استفاده از فایل اصلاحی: فایل wp-rocket-cloudflare-intkey-fix.php را از مخزن WP Rocket دانلود و در مسیر /wp-content/mu-plugins/ آپلود کنید. اگر پوشهٔ mu-plugins وجود ندارد، آن را به‌صورت دستی بسازید. این فایل به‌صورت خودکار فعال شده و خطای تداخل را رفع می‌کند، اما پس از به‌روزرسانی باید حذف شود

اهمیت مشارکت توسعه‌دهندگان

تداخل افزونهٔ WP Rocket با وردپرس ۷.۱، هزاران سایت را از دسترس خارج کرد. هرچند برای کاربران و توسعه‌دهندگان باتجربه، پیشگیری از چنین مشکلی امکان‌پذیر بود، اما آنچه در پشت این ماجرا اتفاق افتاد، حاوی درس مهم‌تری است. وردپرس به عنوان اکوسیستم جمعی، با مشارکت هزاران توسعه‌دهنده و کاربر فعال شکل گرفته است. در ماجرای مربوط به WP Rocket، دقیقاً ۴۴ روز پیش از انتشار نسخه نهایی، وجود چنین اختلالی در نسخهٔ آلفا شناسایی و حتی راه‌حل مشخصی برای آن پیشنهاد شده بود. اما بی‌توجهی به گزارش کاربران باعث شد تا یک خطای ساده، به یک بحران گسترده تبدیل شود.

این موضوع یک بار دیگر اهمیت انتشار نسخه‌های آزمایشی را یادآوری می‌کند، زیرا فرصتی را فراهم می‌سازد تا بازخوردها را از دل جامعه‌ای بشنویم، که نسخهٔ نهایی را در مقیاس واقعی استفاده می‌کنند.

با استفاده از به‌روزرسان هوشمند ژاکت، جدیدترین نسخه افزونه‌ها و قالب‌ها همواره در دسترس‌تان قرار دارد.


تحریریه ژاکت

مشاهده تیم تحریریه

0

دیدگاه ها

ارسال دیدگاه

ارسال دیدگاه