متن خطا چیزی شبیه این است:
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»:
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:
memory_limit = 256Mبعد از تغییر php.ini ممکن است لازم باشد PHP یا وبسرور بازراهاندازی شود.
۳. فایل htaccess#
بعضی هاستهای مبتنی بر Apache با ماژول PHP اجازه میدهند:
php_value memory_limit 256Mاگر هاست با PHP-FPM یا FastCGI کار کند، این خط خطای ۵۰۰ میسازد. در این حالت فوری آن خط را بردارید و به راه دوم بروید. همیشه قبل از ویرایش از .htaccess نسخهی پشتیبان بگیرید.
سقف نهایی را هاست تعیین میکند. اگر پنل اجازهی مقدار بیشتری نمیدهد، باید با پشتیبانی هاست صحبت کنید یا سرویس را ارتقا دهید.
گام دوم: پیدا کردن مقصر#
بالا بردن سقف اغلب فقط علامت را پنهان میکند. اگر مصرف از ۲۵۶ مگ هم رد میشود، چیزی درست کار نمیکند.
- فایل ذکرشده در پیام را نگاه کنید. مسیر
plugins/نام-افزونهسرنخ مستقیم است. - لاگ خطا را فعال کنید:
WP_DEBUGوWP_DEBUG_LOGرا روشن وWP_DEBUG_DISPLAYرا خاموش بگذارید تا خطا برای بازدیدکننده چاپ نشود. بعد فایلwp-content/debug.logرا بخوانید. - وقتی خطا فقط در یک صفحهی خاص رخ میدهد، محتوای آن صفحه یا افزونهی مربوط را بررسی کنید.
- افزونهها را یکییکی غیرفعال کنید؛ روش کامل در رفع تداخل افزونههای وردپرس آمده است.
- اگر فقط هنگام آپلود یا ساخت بکاپ خطا میآید، فایل را کوچک کنید یا بکاپ را روی بخشهای کوچکتر بزنید.
تنظیم لاگ بدون نمایش خطا#
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هماهنگ بالا ببرید. - سقف واقعی را هاست تعیین میکند؛ از پشتیبانی بپرسید.
- لاگ خطا و غیرفعالسازی یکییکی افزونهها مقصر را پیدا میکند.
- بالا بردن سقف راهحل دائمی نیست؛ افزونهی سنگین را عوض یا کار را کوچک کنید.