در حین کار با ورودپرس ممکن است، حالاتی رخ دهد که افزونه‌های شما کار نکنند، سایت شما بارگیری نشود، مدام خطای "Allowed memory size exhausted" را مشاهده کنید و یا اینکه دائماً از شما بخواهد محدودیت حافظه PHP خود را افزایش دهید. سوال اینجاست که این حالات به چه دلیلی رخ می‌دهد و چگونه می‌توان آن را حل کرد؟

 

محدودیت حافظه PHP به منظور جلوگیری از خراب کردن سایت شما توسط منابع RAM-hogging در نظر گرفته شده است. اما گاهی اوقات ممکن است مشکلاتی نیز ایجاد کند؛ به عنوان مثال زمانی که افزونه‌ سنگینی را نصب می‌کنید که در نهایت دسترسی به سایت شما را قطع می‌کند.

هنگامی‌که به دلیل کمبود حافظه با صفحه سفید مرگ (white screen of death) روبه‌رو می‌شوید، باید فوراً این مشکل را برطرف نمایید. در ادامه به این موضوع پرداخته می‌شود که محدودیت حافظه PHP چیست و اگر به سقف منابع رسیدید چگونه آن را حل کنید.

 

این مطلب نیز ممکن است برای شما مفید باشد: رفع خطای صفحه سفید خالی در وردپرس

 

محدودیت حافظه PHP چیست؟

محدودیت حافظه PHP حداکثر مقدار حافظه‌ای را تعیین می‌کند که هر اسکریپت در وب سایت شما می‌تواند استفاده نماید. اما دقیقا به چه معنی است؟

وب سایت شما توسط سرورهایی پشتیبانی می‌شود که تنها به عنوان رایانه‌های مخصوص فعال نگه داشتن backend وب‌سایت استفاده می‌شوند. آن‌ها مانند رایانه‌های معمولی، از اجزایی مانند پردازنده، حافظه و RAM (به عنوان memory نیز شناخته می‌شود) استفاده می‌کنند.

RAM، یکی از مهم‌ترین بخش‌های سرور است. هر برنامه مقدار کمی از حافظه را اشغال می‌کند. هر چه برنامه عملیات سنگین‌تری را اجرا نماید، به memory بیشتری نیاز دارد. زمانی که memory سیستم شما تمام شود، سایت شما کند کار می‌کند یا حتی ممکن است قابل بارگزاری نباشد.

برنامه‌های کاربردی وب، مانند افزونه‌های وردپرس، یکی از مواردی هستند که ممکن است memory سرور شما را اشغال نمایند. در حالت طبیعی این برنامه‌ها فضای بسیار کمی را اشغال می‌کنند و هرگز با مشکلی مواجه نمی‌شوید؛ مگر اینکه‌ میزبان شما memory کمی برای کار در اختیار شما قرار داده باشد.

با این حال، محدودیت زیادی نیز وجود دارد که اسکریپت هر برنامه PHP چه مقدار حافظه می‌تواند روی سرور شما اشغال کند. زمانی‌که یکی از این اسکریپت‌ها از حد مجاز فراتر رود، آن موقع است که با مشکلاتی مواجه می‌شوید و یک صفحه سفید با یک خطا مشاهده خواهید کرد و یا اینکه حتی ممکن است دسترسی به کل سایت شما مسدود شود.

 

چرا محدودیت حافظه وجود دارد؟

تصور کنید مشکلی در سرور شما رخ داده است؛ شاید یک برنامه در یک حلقه بی‌نهایت گیر کرده است و دائماً حافظه بیشتر و بیشتری را اشغال می‌کند، یا یک مهاجم شما را فریب داده است که با نصب برنامه‌ای، یک اسکریپت مخرب را اجرا کند تا تمام منابع شما را برای خود اشغال کند.

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

اکثر اسکریپت‌های PHP قانونی بسیار کوچک هستند. بنابراین، هر اسکریپت جداگانه باید مقدار کمی از RAM را اشغال کند، مگر اینکه برنامه غیرعادی داشته باشید که به منابع بیشتری در یک اسکریپت نسبت به دیگر برنامه‌ها نیاز دارد. این نوع افزونه‌ها اگرچه وجود دارند؛ امّا نادر هستند.

با توجه به آنچه بیان شد، اگر حافظه شما تمام شده است، احتمال اینکه یک برنامه PHP خراب یا مخرب وجود داشته باشد، زیاد است و بنابراین خطای محدودیت حافظه نمایش داده می‌شود.

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

 

خطای حافظه Exhausted

با توضیحات بیان شده، اکنون فرض می‌کنیم که شما با خطای memory exhausted error مواجه شده‌اید. احتمالاً در کل سایت خود یا هنگام انجام عملکردهای خاصی مانند ارسال یک فرم، با یک صفحه سفید به همراه یک پیام خطا مواجه می‌شوید.

 

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

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

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

چنانچه نشانه‌ای نیافتید که آن یک پلاگین فوق‌العاده قدرتمند است (با توجه به اینکه ممکن است یک باگ باشد)، بهتر است یک پیام به توسعه‌دهنده افزونه ارسال نمایید. به یاد داشته باشید، محدودیت حافظه PHP تنها بر روی اسکریپت‌های منفرد تأثیر می‌گذارد، نه کل پلاگین. بنابراین احتمال زیادی وجود دارد که یک اسکریپت در یک حلقه بی نهایت یا موارد دیگری گیر کند.

ممکن است مشکل از طرف شما هم باشد؛ بدین معنی که شاید محدودیت حافظه شما بسیار کم تنظیم شده باشد و بنابراین تنها افزونه‌های بسیار سبک می‌توانند به درستی اجرا شوند؛ یا شاید در حال تلاش برای نصب افزونه‌ای هستید که از شما می‌خواهد محدودیت را بالاتر از حد معمول بردارید.

در هر صورت، باید سعی کنید محدودیت حافظه PHP را افزایش دهید. در ادامه، به شما نشان می‌دهیم که چگونه این کار را انجام دهید.

 

نحوه افزایش محدودیت حافظه PHP در وردپرس

قبل از انجام هر کاری، یک راه آسان برای بررسی محدودیت فعلی حافظه PHP شما بدون نیاز به جستجو در هیچ فایلی وجود دارد. اگر وردپرس 5.2 یا بالاتر را اجرا می‌کنید، به بخش Tools > Site Health در backend خود بروید.

اگر افزونه Health Check & Troubleshooting را نمی‌بینید نصب نمایید.

 

در زبانه Info، محدودیت حافظه PHP خود را مشاهده خواهید کرد. اگر برروی مقدار نسبتاً بالایی تنظیم شده است و با مشکل بالا روبه‌رو هستید، احتمالاً یکی از افزونه‌های شما خراب شده باشد.

با این حال، اگر متوجه شدید که مقدار آستانه بسیار کم است، باید با ویرایش فایل wp-config.php، آن را افزایش دهید.

البته این کار، همیشه مشکل را حل نمی‌کند. در نهایت، محدودیت حافظه PHP توسط میزبان وب شما تعیین می‌شود. گاهی اوقات سایت شما قرار است از منابع کمتری نسبت به ارائه دهنده میزبان شما استفاده کند؛ در این صورت، بهینه سازی فایل‌های شما می‌تواند این مشکل را برطرف کند. اما اگر نسبت به memory مورد نیاز برنامه خیلی کم‌تر باشد، شما نمی‌توانید آن را به میزان مورد نیاز برنامه افزایش دهید. با این حال ارزش امتحان را دارد، پس بیایید اکنون آن فایل را ویرایش کنیم.

 

این مطلب نیز ممکن است برای شما مفید باشد: FTP چیست؟

 

نحوه تغییر محدودیت حافظه PHP از طریق FTP

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

برای این کار تنها کافیست یک خط از فایل را تغییر دهید؛ بنابراین باید کار آسانی باشد. با نصب FileZilla یا هر کلاینت FTP دیگر شروع نمایید. دقت کنید که قبل از شروع، باید از وب سایت خود نیز نسخه پشتیبان تهیه کنید؛ چرا که خراب شدن تنظیمات هنگام ویرایش فایل‌های اصلی امکان‌پذیر است.

FileZilla را باز کرده و اطلاعات کاربری خود را وارد نمایید. پس از چند لحظه باید به سایت خود متصل شوید.

روی پوشه public کلیک نموده و wp-config.php را پیدا کنید. اگر نمی‌توانید public یا publice-html را پیدا کنید، ممکن است با نام root ،www یا نام وب‌سایت شما ذخیره شده باشد.

 

wp-config را باز نمایید. مراقب باشید چیزی به جز محدودیت حافظه PHP را ویرایش نکنید؛ زیرا این یک فایل حساس است و می‌تواند وب سایت شما را خراب کند. خطی که باید ویرایش نمایید، مشابه خط define('WP_MEMORY_LIMIT', '256M' ); در شکل زیر است.

 

پس از تغییر مقدار آستانه، فایل را ذخیره کرده و FileZilla را ببندید.

 

نحوه تغییر محدودیت حافظه PHP در سی پنل

برخی از میزبان‌ها به شما اجازه نمی‌دهند، فایل‌ها را از طریق FTP ویرایش نمایید. در عوض، آن‌ها ممکن است به شما دسترسی به cPanel را بدهند. اگر این مورد برای شما هست، جای نگرانی نیست؛ شما می‌توانید محدودیت حافظه PHP خود را به روش زیر تغییر دهید.

ابتدا با استفاده از گواهی ارائه شده توسط میزبان خود وارد cPanel شوید. در صفحه اصلی، بخش software دارای دکمه Select PHP Version است.

 

روی آن کلیک کنید تا در بالای صفحه، گزینه‌های Switch to PHP را مشاهده نمایید. به پایین بروید تا memory_limit را به همراه یک منوی کشویی مشاهده کنید. روی آن کلیک کرده و آن را به تنظیماتی که می‌خواهید تغییر دهید. در پایان روی Apply کلیک نمایید.

دقت کنید که همه، گزینه Select PHP Version را ندارند. در عوض، ممکن است ویرایشگر MultiPHP Ini را ببینید. اگر بدین صورت بود، مراحل شما کمی متفاوت خواهد بود.

 

شما باید روی آن کلیک کنید و در پنجره بعدی، در بخش Configure PHP INI basic setting، منوی کشویی را باز کرده و دامنه خود را انتخاب نمایید. اکنون قسمت memory_limit را پیدا کرده و عدد مورد نظر خود را وارد نمایید. در پایان، برای ذخیره تغییرات خود، روی Apply کلیک کنید.

شما همچنین می‌توانید از مدیریت فایل cPanel استفاده نمایید که بسیار شبیه به دسترسی به سایت از طریق FTP است. در بخش Files صفحه اصلی خود، روی File Manager کلیک کنید. پوشه public/public-html خود (یا هر نام دیگری که ممکن است نامیده شود) را پیدا کرده و wp-config.php را باز نمایید.

خط WP_MEMORY_LIMIT را همانطور که در قسمت بالا ذکر شده است پیدا کنید و عدد را به آنچه می‌خواهید تغییر دهید. تغییرات خود را ذخیره نمایید و مطمئن شوید که آن‌ها را اعمال کرده‌اید.

 

محدودیت حافظه PHP چگونه باید باشد؟

وقتی می‌خواهید محدودیت حافظه خود را تغییر دهید، اولین مقدار مورد نظر شما ممکن است تنظیم آن روی 900 مگابایت یا بطورکلی حداکثر میزان باشد؛ اما بهتر است بدانید که در واقع می‌تواند یک ایده بسیار بد باشد.

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

اکثر اسکریپت‌های PHP بسیار کوچک هستند و معمولاً خطای محدودیت حافظه به عنوان یک علامت هشدار دهنده درست می‌گوید که مشکلی در backend وجود دارد. بنابراین اگر آن را روی آستانه بالا تنظیم کنید؛ ممکن است اسکریپت‌های مخربی سایت شما را درگیر کنند و بدون اینکه متوجه شوید، سایت شما را از کار بیندازند.

شما باید محدودیت حافظه PHP خود را تا جایی که می‌توانید برروی کمترین میزان تنظیم نمایید و در عین حال به سایت خود اجازه دهید تا به طور عادی عمل کند.

با توجه به توضیحات، آستانه 128 مگابایت پایه خوبی است. این مقدار حافظه مناسبی است که از اکثر افزونه‌ها پشتیبانی می‌کند. اگر می‌دانید که به مقدار بیشتری نیاز دارید، 256 مگابایت حتی سنگین‌ترین افزونه‌ها را پوشش می‌دهد. اگر مطمئن هستید که یک میزبان قدرت‌مندی دارید، 512 مگابایت حداکثر مطلقی است که باید آن را تنظیم نمایید. در 90 درصد موارد، هرگز نیازی به افزایش محدودیت حافظه از 256 مگابایت را نخواهید داشت.

 

اگر تغییر محدودیت حافظه کارساز نباشد چه؟

چنانچه پس از ویرایش فایل PHP خود همچنان با خطای حافظه مواجه می‌شوید، یکی از دو مشکل زیر را دارید:

  • میزبان شما منابع بسیار کمی را تخصیص داده است
  • یک اسکریپت PHP روی سرور شما به طور غیرطبیعی حافظه زیادی را اشغال می‌کند.

باز هم باید مرور کنید و پلاگین‌های خود را غیرفعال نمایید تا زمانی که افزونه مقصر را شناسایی کنید. با 128-256 مگابایت حافظه، هیچ افزونه‌ای نباید فضای زیادی را بدون ذکر آن در اسناد خود اشغال کند. بنابراین، در صورت یافتن چنین افزونه‌ای باید آن را غیرفعال کرده و طراحان افزونه را از اتفاقی که افتاده مطلع نمایید.

 

حتی پس از غیرفعال شدن همه افزونه‌ها، همچنان با این خطا مواجه می‌شوید؟ باید برنامه PHP دیگری وجود داشته باشد که باعث ایجاد مشکل شده است. این مشکل سخت‌تر از آن چیزی است که شما به تنهایی قادر به رفع آن باشید؛ بنابراین بهتر است از میزبان وب خود کمک بخواهید.

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

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

 

 

 

منبع:

kinsta