آیا شما تاکنون در سایت وردپرسی خود با ارور Fatal error: Allowed memory size of xxxxxxxx bytes exhausted مواجه شدهاید؟
اصلا نگران نباشید، این یکی از رایج ترین خطاهای وردپرس است. اگر شما نیز یک سایت وردپرسی دارید که بر روی آن افزونههای زیادی نصب کردهاید و یا از افزونههای سنگین استفاده میکنید و یا تعداد فایلهای چندرسانهای بر روی سایت شما بسیار زیاد است، پیکربندی استاندارد وردپرس نیازهای شما را برآورده نمیکند و در برخی مواقع با خطای زیر مواجه خواهید شد:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2348617 bytes) in /home/xxx/public_html/wp-includes/plugin.php on line xxx
سیستم مدیریت محتوای وردپرس بر اساس زبان برنامه نویسی PHP ساخته و نوشته شده است. زبان برنامه نویسی PHP یک زبان سمت سرور است که برای اجرای دستورات و کارهایی که قرار است بر روی سایت انجام بگیرد نیاز به حافظهای برای ذخیرهسازی و اجرای صحیح دستورات دارد.
به همین دلیل میزبانیهای وب یک مقدار معینی را برای این حافظه در نظر میگیرند که معمولا 128 یا 256 مگابایت است. اکنون برای وردپرس حالتی که پیش میآید که اگر این میزان حافظه کمتر از 64 مگابایت باشد، وردپرس به صورت خودکار سعی میکند تا این محدودیت حافظه PHP را افزایش بدهد که در صورت پایین بودن این مقدار خطایی همانند بالا در سایت شما نمایش داده خواهد شد.
اگر اکنون شما با این خطا در سایت وردپرسی خود روبرو شدهاید باید میزان محدودیت حافظه PHP در وردپرس را افزایش دهید تا این خطا برطرف شود.
وردپرس به چه مقدار حافظه نیاز دارد؟
حافظه مورد نیاز برای وردپرس میتواند بسته به عوامل و فاکتورهای مختلفی مانند اندازه و پیچیدگی وب سایت شما، تعداد و سنگینی پلاگینها و تمهایی که بر روی سایت وردپرسی خود استفاده می کنید و میزان ترافیکی که سایت شما دریافت میکند، متفاوت باشد. بنابراین پاسخ به این سوال که وردپرس به چه میزان حافظه نیاز دارد، چندان ساده نیست.
خود وردپرس خام و تازه نصب شده بدون هیچ افزونه و پوستهای، حداقل نیاز به حافظه 32 مگابایت دارد، اما این مقدار معمولا برای اکثر وب سایتها کافی نیست. کمترین میزان توصیه شده حدود ۱۲۸ مگابایت است، اگرچه بسیاری از ارائه دهندگان فضای میزبانی و شرکتهای هاستینگ توصیه می کنند که ۲۵۶ مگابایت یا بیشتر را برای عملکرد بهینه وردپرس به آن اختصاص دهید.
محدودیت حافظه 128 مگابایتی برای اکثر سایتها کافی میباشد، مگر اینکه افزونهای داشته باشید که نیاز بیشتری به حافظه داشته باشد.
اگر یک وب سایت کوچک با قابلیت های پایه و سطح پایین ترافیک دارید، ۲۵۶ مگابایت حافظه باید کافی باشد. با این حال، با رشد وب سایت شما و اضافه کردن پلاگینها، تمها و ترافیک بیشتر، ممکن است نیاز به اختصاص حافظه بیشتری داشته باشید.
خطای Memory Exhausted در وردپرس چیست؟
PHP یک زبان برنامه نویسی سمت سرور است و وردپرس به این زبان نوشته شده است. برای اینکه PHP به درستی کار کند، هر وب سایتی به یک ارائه دهنده فضای میزبانی (سرور و هاست) برای وردپرس نیاز دارد.
وب سرورها برای اجرای همزمان چندین برنامه، دستور و درخواست به حافظه (Memory) نیاز دارند. هنگامی که وردپرس اجرا می شود، برای انجام وظایف مختلف مانند پردازش تمها و پلاگینها و اجرای اسکریپتهای PHP به مقدار مشخصی حافظه (RAM) نیاز دارد. به طور پیش فرض، وردپرس محدودیتی برای میزان حافظهای که می تواند استفاده کند تعیین میکند.
اگر وب سایت شما از این حد فراتر رود، شما با خطای Memory Exhausted Error مواجه خواهید شد.
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 2348617 bytes) in /home/xxx/public_html/wp-includes/plugin.php on line xxx
یا
Fatal error: Allowed memory size of 41943040 bytes exhausted fatal error allowed memory size WordPress
این پیام خطا زمانی ظاهر میشود که وردپرس شما به میزان حافظه بیشتر از محدودیت حافظه اختصاص داده شده پیش فرض نیاز دارد.
ارور Allowed memory size of bytes exhausted در وردپرس چیست؟
پیغام خطای “Allowed memory size of bytes exhausted” در وردپرس نشان میدهد که سایت وردپرس شما از محدودیت حافظه (Memory Limit) اختصاص داده شده به آن فراتر رفته است. هر وبسایت وردپرسی دارای یک محدودیت حافظه از پیش تعریف شده است که مقدار حافظهای را که PHP میتواند در حین اجرای اسکریپتها استفاده کند را محدود میکند.
هنگامی که یک اسکریپت، مانند یک افزونه یا یک پوسته، سعی میکند حافظه بیشتری از حد مجاز تعیین شده را استفاده نماید، این خطا رخ میدهد. این پیغام خطا معمولاً شامل اندازه حافظه خاصی است که تمام شده است، درواقع عددی که در این پیام وجود دارد نمایش دهنده میزان محدودیت حافظه سایت شماست.
به عنوان مثال، پیام خطا ممکن است به شکل زیر باشد:
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 123456 bytes) in /path/to/wordpress/wp-includes/some-file.php on line 123
محدودیت حافظه PHP وردپرس چیست؟
همانطور که گفتیم PHP یک زبان سمت سرور است که توسط وردپرس برای ایجاد و مدیریت صفحات HTML سایت شما استفاده می شود. به زبان ساده به این خاطر به آن “سمت سرور” می گویند که این زبان برنامه نویسی در سمت سرور سایت شما استفاده میشود و هیچ ارتباطی با سمت کاربر (کلاینت) و کامپیوتر و لپتاب و گوشی موبایل آن ندارد.
PHP یک زبان سبک، سریع و متن باز است که برای تولید عناصر وب سایت ایده آل است. برنامه نویسان باتجربه می توانند چارچوب های PHP را مطابق با نیازهای وب سایت خاص سفارشی یا تغییر دهند، و PHP به طور مرتب به روز می شود تا عملکرد و استفاده از آن را ساده کرده و امنیت را افزایش دهد. در نتیجه، PHP یک زبان برنامهنویسی همه منظورهی ایدهآل برای وردپرس است.
PHP یک زبان برنامه نویسی همه کاره و پویا است که می تواند ریکوئست و درخواستهای وردپرس را پردازش کند و محاسبات را انجام دهد، اما برای انجام این کارها به حافظه (Memory) نیاز دارد.
محدودیت حافظه پیشفرض وردپرس (Memory Limit) 32 مگابایت است، اما شما ممکن است نیاز داشته باشید که آن را افزایش دهید.
این برای سایت هایی با صفحات کم و مقدار محدودی از محتوای چندرسانهای (نظیر عکس و ویدئو و غیره) و افزونه خوب است، اما هرچه بیشتر به سایت خود افزونه و محتوای چندرسانهای اضافه کنید به حداکثر محدودیت حافظه نزدیکتر می شوید.
به عنوان مثال، WooCommerce میزان محدودیت حافظه وردپرس را 64 مگابایت توصیه میکند.
با رسیدن وردپرس به محدودیت حافظه پیشفرض، سعی میکند آن را به 40 مگابایت افزایش دهد. اگر این کافی نباشد، یک پیام fatal error ظاهر میشود.
محدودیت حافظه 128 مگابایتی برای اکثر صفحات و سایت وردپرسی شما کافی است، مگر اینکه افزونهای را نصب کرده باشید که به حافظه بیشتری نیاز داشته باشد.
چگونه محدودیت حافظه PHP را در وردپرس افزایش دهیم؟
اگر نسخه PHP خود را بهروزرسانی کردهاید و به جای استفاده از نسخههای قدیمی PHP اکنون آخرین نسخه PHP را بر روی هاست خود فعال کردهاید، همچنین افزونههای بیکیفیت که مقدار بسیار زیاد و نامتعارفی از مموری استفاده میکنند را حذف کردهاید، محتوای خود را پاکسازی کردهاید، و همچنان با خطاهای حافظه مواجه هستید، ممکن است لازم باشد محدودیت حافظه را افزایش دهید.
چندین راه برای افزایش محدودیت حافظه PHP در وردپرس وجود دارد:
- فایل wp-config.php خود را ویرایش کنید.
- فایل PHP.ini خود را ویرایش کنید.
- فایل htaccess خود را ویرایش کنید.
- ویرایش MultiPHP INI Editor کنترل پنل هاست
- از افزونه افزایش حافظه استفاده کنید.
- با شرکت ارائه دهنده هاستتان تماس بگیرید.
1. افزایش محدودیت حافظه PHP از طریق ویرایش فایل wp-config.php
- برای این کار به کنترل پنل هاست خود مراجعه کنید.
- پس از ورود، به قسمت فایل منیجر کنترل پنل هاست خود بروید و در مسیر public_html هاست به دنبال فایل wp-config.php وردپرس بگردید.
- بعد از راست کلیک روی فایل wp-config.php و انتخاب گزینه Edit کد زیر را در فایل اضافه کنید:
define( 'WP_MEMORY_LIMIT', '256M' );
توجه داشته باشید که قطعه کد بالا را باید قبل از خط /* That’s all, stop editing! Happy publishing. */ قرار دهید.
پس از قرار دادن این کد در wp-config.php حتما تغییرات را ذخیره کنید. این کد به وردپرس میگوید که محدودیت حافظه PHP را به 256 مگابایت افزایش دهد. اکنون می توانید به سایت وردپرس خود مراجعه کنید و خواهید دید که خطای memory exhausted ناپدید و رفع شده است.
2. افزایش محدودیت حافظه PHP از طریق ویرایش فایل PHP.ini
در صورتی که تغییر فایل wp-config.php مشکل را برطرف نکرد و نتوانستید محدودیت حافظه PHP را افزایش دهید، باید به جای وردپرس و تغییر دادن فایلهای وردپرسی، مشکل را در تنظیمات سرور خود حل کنید.
اگر از هاست اشتراکی استفاده می کنید، نمی توانید به فایل PHP.ini خود دسترسی پیدا کنید، بنابراین اگر هاست شما اشتراکی است بدون فوت وقت به سراغ روش بعدی بروید. اما اگر هاست شما اشتراکی نیست و اگر به PHP.ini دسترسی دارید، به احتمال زیاد آن را در پوشه ریشه پیدا خواهید کرد، اما مکان فایل بسته به میزبان متفاوت است.
برای افزایش محدودیت حافظه PHP، این خط را در PHP.ini تغییر دهید:
memory_limit = 256M
3. افزایش محدودیت حافظه PHP از طریق ویرایش فایل htaccess
اگر به PHP.ini دسترسی ندارید، راه حل دیگر شما این است که فایل htaccess. خود را ویرایش کنید. فایل htaccess شما با یک نقطه (.) شروع می شود زیرا یک فایل مخفی است. برای یافتن فایل htaccess. وارد هاست خود شوید و روی گزینه File Manager کلیک کنید تا به صفحه مدیریت فایلها در هاست هدایت شوید. سپس به مسیر public_html مراجعه کرده و به دنبال فایل htaccess. بگردید و بعد از راست کلیک کردن روی فایل گزینه Edit را انتخاب کنید. در صورتی که این فایل را در ریشه سایت خود نمییابید روی دکمه Settings در همین صفحه کلیک کرده و سپس در پنجره باز شده مثل تصویر زیر گزینه show hidden files را انتخاب کنید. در نهایت دکمه save را انتخاب کنید تا تنظیمات اعمال شود.
برای افزایش حافظه PHP، مورد زیر را به فایل .htaccess خود اضافه کنید:
php_value memory_limit 256M
مطابق تصویر بالا قطعه کد را به فایل htaccess. اضافه کنید و سپس روی دکمه save کلیک کنید تا تغییرات ذخیره شود.
4. افزایش محدودیت حافظه PHP از طریق MultiPHP INI Editor کنترل پنل هاست
شما میتوانید با مراجعه به کنترل پنل هاست خود (سیپنل – دایرکت ادمیم – پلسک)، در صورتی که شرکت هاستینگ دسترسی شما را به بخش MultiPHP INI Editor محدود نکرده باشد، با رفتن به قسمت MultiPHP INI Editor میتوانید در زبانه Basic Mode با انتخاب نام دامنه سایت خود از بخش Configure PHP INI basic settings، مقدار memory_limit را تا حد مجاز شرکت هاستینگ خود افزایش دهید. این مقدار میتواند 256 یا 512 یا 1024 و یا در برخی مواقع بیشتر نیز باشد.
5. افزایش محدودیت حافظه PHP با استفاده از افزونه وردپرسی
یکی دیگر از روشهای افزایش حافظه PHP، استفاده از افزونه است. شما با استفاده از افزونه Memory Usage, Memory Limit, PHP and Server Memory Health Check and Fix Plugin به راحتی میتوانید این کار را انجام دهید. این افزونه به شما امکان می دهد حافظه PHP موجود را بدون نیاز به دسترسی یا تغییر فایلهای وردپرس و یا سرور به راحتی تغییر دهید.
پس از نصب و فعالسازی افزونه، در داشبورد وردپرس با مراجعه به منو ابزارها، گزینه WP Memory را خواهید یافت که با کلیک بر روی آن به راحتی به تنظیمات افزونه هدایت خواهید شد. در اینجا میتوانید با مراجعه به سربرگ Update WordPress Memory Limit به راحتی این محدودیت را افزایش دهید.
6. با شرکت ارائه دهنده هاستتان تماس بگیرید
اگر هیچ کدام از روش های ارایه شده برای شما مثمر ثمر واقع نشد، در نهایت مجبور هستید که با شرکت هاستینگتان که از آن شرکت هاست سایتتان را تهیه کردید تماس بگیرید و یا به آنها تیکت بزنید و از آنها بخواهید که محدودیت حافظه PHP وردپرس شما را افزایش دهند.
سخن پایانی و یک نکته مهم
توجه داشته باشید که WP_MEMORY_LIMIT با PHP_MEMORY_LIMIT متفاوت است. و همچنین دانستن این نکته برای افراد حرفهای ضروری است که اگر میزان WP_MAX_MEMORY_LIMIT را در فایل wp-config.php محدود نکرده باشید، وردپرس از محدودیت حافظه پی اچ پی (PHP_MEMORY_LIMIT) برای آن استفاده میکند.
اگر به قسمت “سلامت سایت” در قسمت “ابزارها” منوی پیشخوان وردپرس مراجعه کنید، در زبانه “اطلاعات” به سراغ بخشهای “سرور” و “ثابتهای وردپرس” مراجعه کنید، مقادیر PHP_MEMORY_LIMIT (محدوده حافظه PHP)، WP_MEMORY_LIMIT (محدوده حافظه وردپرس) و WP_MAX_MEMORY_LIMIT (محدوده حافظه بیشینه وردپرس) را خواهید یافت.
به طور پیش فرض، وردپرس محدودیت حافظه 40 مگابایتی را اعمال می کند. این بدان معناست که یک اسکریپت PHP مجاز است تا حداکثر 40 مگابایت رم استفاده کند. در موارد خاص، ممکن است نیاز به افزایش محدودیت حافظه وردپرس (WP_MEMORY_LIMIT) برای اجرای پلاگین های سنگینتری مانند WooCommerce یا bbPress داشته باشید. همانطور که قبلا در بالا گفتیم برای افزایش محدودیت حافظه وردپرس، می توانید WP_MEMORY_LIMIT را در فایل wp-config.php با استفاده از خط زیر تغییر دهید:
define( 'WP_MEMORY_LIMIT', '256M' );
تنظیمات بالا به وردپرس اجازه می دهد تا حداکثر 256 مگابایت رم برای هر اسکریپت استفاده کند، تا زمانی که مقدار memory_limit در فایل php.ini شما 256 مگابایت یا بیشتر باشد.
همانطور که اغلب در مورد منابع محاسباتی اتفاق میافتد، تعیین محدودیت حافظه بالاتر لزوماً عملکرد سایت وردپرس شما را افزایش نمیدهد. از آنجایی که WP_MEMORY_LIMIT میزان تخصیص حافظه به ازای هر اسکریپت را کنترل میکند، در واقع به نفع شماست که آن را تا حد ممکن پایین و کم (بهینه) تعیین کنید و قرار دهید تا احتمال اشباع و مصرف رم در سرور توسط یک اسکریپت معیوب و غیر بهینه کاهش یابد.
در برخی مواقع، ایده خوبی است که میزان تخصیص حافظه وردپرس را به طور جداگانه برای قسمت جلوسایت (frontend) و پیشخوان و بکاند (backend) تنظیم کنید. اینجاست که ما از WP_MAX_MEMORY_LIMIT استفاده میکنیم. WP_MAX_MEMORY_LIMIT به شما امکان میدهد محدودیت حافظه متفاوتی را برای داشبورد مدیریت وردپرس تنظیم کنید. این مقدار و متغیر از این جهت مفید و سودمند است که به شما اجازه میدهد تا برخی از تسکهای مدیریتی به RAM بیشتری نیاز دارند.
در پایین مثالی از نحوه استفاده از WP_MEMORY_LIMIT و WP_MAX_MEMORY_LIMIT با هم آورده شده است:
define( 'WP_MEMORY_LIMIT', '64M' );
define( 'WP_MAX_MEMORY_LIMIT', '256M');
کد بالا حداکثر 64 مگابایت رم را به ازای هر اسکریپت PHP برای فرآیندهای ایجاد شده در جلوی سایت (frontend) وردپرس اختصاص میدهد، در حالی که اسکریپتهای مربوط به مدیریت داشبورد (backend) میتوانند تا 256 مگابایت رم استفاده کنند.