رفع خطای محدودیت حافظه (memory_limit) در کومپوزر

امروز اومدم یه پکیج به لارول اضافه کنم و با خطای زیر روبرو شدم:

تو نگاه اول به نظر میرسه این خطا مربوط به memory_limit در php هست ولی گویا به تنهایی php نیست و لازمه composer هم مقدار دهی بشه. اول از همه بریم سرغ php

برای اینکه ببینیم memory_limit در php چی ست شده از دستور زیر استفاده کنین (اگر مقدار برابر -۱ بود یعنی محدودیتی براش نذاشتین):

حالا برای اینکه memory_limit  رو در php.ini تغییر بدیم، بسته به اینکه با چه برنامه ای و در چه سیستم عاملی php رو نصب کردین محل نصب php.ini متفاوته. یه راه حل ساده میتونه این باشه در داخل ترمینال دستور زیر رو تایپ کنین:

خب این گزینه بهتون میگه php.ini که مربوط به php اجرا شده هست کجا قرار داره (ممکنه رو سیستمتون چند تا php داشته باشن) این دستور php که بصورت global نصب شده رو جارا میکنه.

پیدا کردن فایل php.iniهمونطور که میبنین مسیر فایل php.ini من اینه: /opt/lampp/etc/php.ini با دستور زیر این فایل رو ویرایش کنین و دنبال memory_limit بگردین:

برای اینکه داخل این فایل جستجو کنین از میانبر Ctrl + W استفاده کنین و بعد عبارت memory_limit رو تایپ کنین. حالا مقدارش رو به ۱.۵جی عوض کنین. مقدار رم پیشنهادی برای php و کومپوزر حداقل ۱.۵گیگ هست. البته نیازی نیست و شما با ۱۲۸ هم کارتون راه میافته ولی حداقل ۵۱۲ بذارین دیگه! در آخر برای خروچ Ctrl + X بزنین ذخیره کنین و خارج بشین.

حالا میمونه مقدار COMPOSER_MEMORY_LIMIT که یک متغیر محیطی هست و در فایل composer.phar هم میتونین پیداش کنین. در داخل لینوکس / اوبونتو دستور زیر رو تایپ کنین تا مقدار فعلی رو ببینین:

اگر مقداری نمایش داده نشد، به این خاطره که تا بحال این متغیر ست نشده. حالا ۱نکته: جستجویی که من انجام دادم متوجه شدم محدودیتی وجود داره که اگر این متغیر ست بشه مقدارش رو از memory_limit در php میگیره و در جای دیگه راه حل هایی که ارائه شده بود مقدارش رو وارد میکردن (اینجا و اینجا و اینجا رو ببینین).

با دستور which composer پیدا کنین کومپوزر کجا نصب شده یا فعاله. برای من بجای composer.phar آدرس /usr/bin/composer وجود داشت. حالا دستور زیر رو بزین تا آپدیت بشه

راه حل های دیگه ای هم مثل ست کردن متغیر COMPOSER_MEMORY_LIMIT ولی من از این روش نتیجه ثابتی نگرفتم.

در آخر هم یه نکته رو دوباره بگم که برای COMPOSER_MEMORY_LIMIT و memory_limit اگر مقدار رو برابر -۱ بذارین دیگه لازم نیست هرزگاهی سر بزنین و منابع رو افزایش بدین و بصورت unlimited در نظر میگیره.

بروز رسانی: روش بالا بعد رستارت کردن از بین میره ظاهرا! فعلا از این روش سریع و موقتی برای حل مسئله استفده میکنم. داخل ترمینالتون کد زیر رو ببزنین. (البته میشه این متغیر رو بصورت ثابت و محیطی هم تعریف کرد)

 

نصب lampp یا xampp در اوبونتو ۱۸

lampp معادل کلمات linux apache mysql php perl هست. و معمولا اینها همیشه در کنار هم هستند و کار میکنن. اما زمپ بسته ای هست که اینهارو یکجا داره و یکجا نصب میکنیم. یعنی نیازی نیست بصورت جداگانه هر کدوم از اونها رو نصب کنین و با یکدیگر کانفیگ کنیم. ابتدا از https://www.apachefriends.org/download.html زمپ با نخسه ای که میخواین رو دانلود کنین. فرضا در پوشه Download ذخیره کردین. (این نوشته در دوتاریخ بروزرسانی شده، کد زیر متناسب با تاریخ اوله و شما اونو با برنامه خودتون وقف بدین – کد تو عکس ها هم برای تاریخ و نسخه جدیدتره). اگر فایل دانلودیتون قابلیت  اجرایی نداشته باشه با دستور زیر قابلیت اجرایی رو به اون اضافه کنین:

حالا فایل رو اجرا کنین. برای این کار نیازه کاربر root باشین:

در بالا من دو نسخه زمپ دانلود کردم. برای همین دو گزینه هاست. شما هر نسخه ای رو که خواستین دانلود و نصب کنین.

مرحله اول نصب زمپ

مرحله دوم نصب زمپ

مرحله سوم نصب زمپ

مرحله چهارم نصب زمپ

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

مرحله پنجم

مرحله ششم نصب زمپ

 نصب زمپ

نصب با موفقیت به پایان رسید. برای اجرای زمپ Finish رو بزنین (اون تیکی هم که تصویر میبینین براتون زمپ رو اجرا میکنه)

استارت زدن زمپ آپاچی و mysql

حالا سرویس هایی که میخواین رو استارت بزنین و شروع به کار کنین.

اگر در این مرحله Apache استارت نخورد و همچنان قرمز موند دلیلش اینه قبلا پورت ۸۰ اشغال شده و اگر از اوبونتو ۱۸ استفاده میکنین احتمالا بخاطر اینه که قبلا apache نصب بوده. شما دستور زیر رو تایپ کنین تا آپاچی حذف بشه:

زمپ بصورت کامل در مسیر زیر نصب شده:

اگر نیاز به کنترل پنل زمپ داشتین با ترمینال به همین مسیر بیاین و با کاربر روت sudo ./manager-linux-x64.run رو اجرا کنین.

حتما بعد نصب کامل با ترمینال به مسیر /opt/lampp برین و دستور زیر رو بزنین که سطح دستری داخل htdocs در اختیار کاربر معمولی قرار بگیره.

اگر نیاز به php بصورت global دارین از اینجا کمک بگیرید

همین! و تمام.

نصب کومپوزر Composer و برطرف کردن خطای php not found یا همون نصب php globaly