متن خطا چیزی شبیه این است:

Code
Fatal error: Allowed memory size of 134217728 bytes exhausted
(tried to allocate 20480 bytes) in /home/user/public_html/wp-content/plugins/xyz/file.php on line 120

عدد اول سقف است (۱۲۸ مگابایت در این مثال) و عدد دوم مقداری است که اسکریپت تازه می‌خواسته. مسیر فایل هم می‌گوید خطا به کدام افزونه یا قالب برمی‌گردد. گاهی به‌جای پیام، فقط صفحه‌ی سفید یا خطای ۵۰۰ می‌بینید؛ برای آن حالت خطاهای رایج وردپرس را هم ببینید.

چرا حافظه تمام می‌شود#

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

  • افزونه‌ی سنگین (صفحه‌ساز، بکاپ، سئو، گالری) روی صفحه‌ای با داده‌ی زیاد.
  • بارگذاری یا فشرده‌سازی تصویر بسیار بزرگ.
  • درون‌ریزی یا برون‌ریزی فایل حجیم.
  • حلقه یا پرس‌وجوی بی‌نهایت در کد قالب و افزونه.
  • سقف خیلی کم هاست.

یک نکته‌ی مهم: خطا همیشه به معنی «سایت ضعیف است» نیست. گاهی فقط یک عمل خاص، مثلاً ساخت بکاپ کامل، درون‌ریزی هزاران محصول یا بارگذاری یک تصویر چندده‌مگابایتی، کوتاه‌مدت حافظه‌ی زیادی می‌خواهد. اگر بقیه‌ی روزها سایت بی‌دردسر کار می‌کند، همان یک کار را کوچک‌تر یا دسته‌دسته انجام دهید و سقف را بی‌دلیل برای همیشه بالا نبرید. اما اگر خطا بی‌دلیل و در بازدید معمولی صفحه‌ها می‌آید، حتماً دنبال افزونه یا قالب معیوب بگردید.

عددها را بخوانید#

سقف در پیام بر حسب بایت آمده. تبدیل ساده برای عددهای رایج:

بایت در پیاممعادل
33554432۳۲ مگابایت
67108864۶۴ مگابایت
134217728۱۲۸ مگابایت
268435456۲۵۶ مگابایت

اگر سقف پیام کمتر از چیزی است که در wp-config نوشته‌اید، یعنی تنظیم شما اعمال نشده و سقف PHP هاست جلوی آن را گرفته است. برای دیدن سقف فعلی از پیشخوان به بخش سلامت سایت (Site Health) و اطلاعات سرور بروید؛ حد حافظه‌ی PHP و حد وردپرس آنجا نوشته شده است.

گام اول: بالا بردن سقف#

سه لایه وجود دارد و باید با هم هماهنگ باشند.

۱. تنظیم وردپرس#

در wp-config.php و بالاتر از خط «That's all, stop editing»:

PHP
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

WP_MEMORY_LIMIT برای بخش عمومی سایت و WP_MAX_MEMORY_LIMIT برای پیشخوان و کارهای سنگین مدیریتی است. عددها نمونه‌اند؛ اول با مقدار کمتر امتحان کنید.

۲. تنظیم PHP در پنل هاست#

در سی‌پنل از بخش انتخاب نسخه‌ی PHP یا ویرایشگر تنظیمات PHP (نام دقیق بسته به هاست فرق می‌کند) مقدار memory_limit را بالا ببرید. روی سرور مدیریت‌شده خودتان در php.ini:

Code
memory_limit = 256M

بعد از تغییر php.ini ممکن است لازم باشد PHP یا وب‌سرور بازراه‌اندازی شود.

۳. فایل htaccess#

بعضی هاست‌های مبتنی بر Apache با ماژول PHP اجازه می‌دهند:

Apache
php_value memory_limit 256M

اگر هاست با PHP-FPM یا FastCGI کار کند، این خط خطای ۵۰۰ می‌سازد. در این حالت فوری آن خط را بردارید و به راه دوم بروید. همیشه قبل از ویرایش از .htaccess نسخه‌ی پشتیبان بگیرید.

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

گام دوم: پیدا کردن مقصر#

بالا بردن سقف اغلب فقط علامت را پنهان می‌کند. اگر مصرف از ۲۵۶ مگ هم رد می‌شود، چیزی درست کار نمی‌کند.

  1. فایل ذکرشده در پیام را نگاه کنید. مسیر plugins/نام-افزونه سرنخ مستقیم است.
  2. لاگ خطا را فعال کنید: WP_DEBUG و WP_DEBUG_LOG را روشن و WP_DEBUG_DISPLAY را خاموش بگذارید تا خطا برای بازدیدکننده چاپ نشود. بعد فایل wp-content/debug.log را بخوانید.
  3. وقتی خطا فقط در یک صفحه‌ی خاص رخ می‌دهد، محتوای آن صفحه یا افزونه‌ی مربوط را بررسی کنید.
  4. افزونه‌ها را یکی‌یکی غیرفعال کنید؛ روش کامل در رفع تداخل افزونه‌های وردپرس آمده است.
  5. اگر فقط هنگام آپلود یا ساخت بکاپ خطا می‌آید، فایل را کوچک کنید یا بکاپ را روی بخش‌های کوچک‌تر بزنید.

تنظیم لاگ بدون نمایش خطا#

PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

بعد از پیدا کردن مشکل، WP_DEBUG را خاموش کنید و فایل لاگ را پاک کنید؛ نباید برای همیشه روی سایت زنده بماند.

اگر در پیشخوان گیر کرده‌اید#

گاهی خطا درست وقتی رخ می‌دهد که به پیشخوان هم دسترسی ندارید. در این حالت باید از مدیر فایل هاست یا FTP کار کنید: ابتدا wp-config.php را ویرایش کنید و بعد، اگر لازم شد، پوشه‌ی افزونه‌ی مشکوک را به نام دیگری تغییر دهید تا غیرفعال شود. پیش از هر تغییر یک نسخه‌ی پشتیبان از فایل بگیرید.

جلوگیری از تکرار#

  • افزونه‌های بدون استفاده را حذف کنید و تا حد ممکن یک افزونه برای یک کار داشته باشید.
  • تصویرها را پیش از بارگذاری کوچک کنید (بهینه‌سازی تصاویر وردپرس).
  • کار سنگین مثل بکاپ کامل را در ساعت کم‌ترافیک و با افزونه‌ای که فایل را تکه‌تکه می‌کند انجام دهید (بکاپ خودکار وردپرس).

وقتی هاست اجازه‌ی تغییر نمی‌دهد#

در هاست‌های اشتراکی ارزان، سقف حافظه معمولاً از طرف ارائه‌دهنده قفل است و تنظیم شما نادیده گرفته می‌شود. دو راه می‌ماند: از پشتیبانی بخواهید سقف را متناسب با سایت بالا ببرد، یا سایت را سبک‌تر کنید. اگر سایت فروشگاهی است یا ترافیک بالایی دارد، شاید زمان ارتقای سرویس رسیده باشد. فهرست نکته‌های هاست را در چک‌لیست هاست اشتراکی ببینید.

خلاصه#

  • پیام می‌گوید اجرای PHP از سقف حافظه‌اش رد شده؛ مسیر فایل در پیام سرنخ مقصر است.
  • سقف را در wp-config.php (WP_MEMORY_LIMIT)، تنظیمات PHP هاست و در صورت امکان .htaccess هماهنگ بالا ببرید.
  • سقف واقعی را هاست تعیین می‌کند؛ از پشتیبانی بپرسید.
  • لاگ خطا و غیرفعال‌سازی یکی‌یکی افزونه‌ها مقصر را پیدا می‌کند.
  • بالا بردن سقف راه‌حل دائمی نیست؛ افزونه‌ی سنگین را عوض یا کار را کوچک کنید.