آموزش نصب Composer برای PHP؛ نصب امن، دستورات مهم و رفع خطاهای رایج
آموزش نصب Composer برای PHP؛ نصب امن، دستورات مهم و رفع خطاهای رایج
Composer ابزار اصلی مدیریت پکیجها و کتابخانههای PHP است. اگر با Laravel، Symfony، WHMCS، Magento، پروژههای وردپرسی حرفهای یا اسکریپتهای PHP کار میکنید، احتمالاً بدون Composer نمیتوانید وابستگیها را درست نصب و بهروزرسانی کنید. در این مقاله روش نصب امن Composer، تفاوت دستورهای مهم، خطاهای رایج کاربران و چکلیست استفاده روی سرور را مرحلهبهمرحله بررسی میکنیم.
Composer چیست و چرا برای PHP لازم است؟
در گذشته بسیاری از پروژههای PHP با کپی دستی فایلهای کتابخانهها راهاندازی میشدند. این روش در پروژههای کوچک شاید ساده به نظر برسد، اما در پروژههای واقعی باعث مشکل نسخه، ناسازگاری کتابخانهها، سخت شدن آپدیت و خطاهای امنیتی میشود. Composer این مشکل را با فایلهای composer.json و composer.lock حل میکند.
فایل composer.json مشخص میکند پروژه به چه پکیجهایی نیاز دارد. فایل composer.lock نسخه دقیق پکیجهایی را نگه میدارد که قبلاً نصب و تست شدهاند. به همین دلیل وقتی پروژه را روی سرور دیگری منتقل میکنید، Composer میتواند همان نسخههای تستشده را نصب کند و احتمال ناسازگاری را کم کند.
Composer بیشتر کجا به درد میخورد؟
- نصب و راهاندازی پروژههای Laravel و Symfony.
- مدیریت وابستگیهای WHMCS، ماژولهای PHP و ابزارهای توسعه.
- نصب کتابخانههایی مثل Guzzle، Monolog، PHPMailer، Intervention Image و SDKهای پرداخت یا API.
- ساخت autoload استاندارد برای کلاسهای PHP بدون require دستی فایلها.
- اجرای امنتر پروژه در production با composer.lock و نصب بدون پکیجهای توسعه.
آیا Composer قدیمی شده؟ چه چیزهایی را نباید آموزش اصلی قرار دهیم؟
خود Composer قدیمی یا بیاستفاده نشده است؛ هنوز یکی از ابزارهای اصلی اکوسیستم PHP است. اما بعضی روشها و نسخهها دیگر انتخاب خوبی برای آموزش عمومی نیستند.
| مورد | وضعیت پیشنهادی | دلیل |
|---|---|---|
| Composer 2 | پیشنهاد اصلی | برای پروژههای جدید و اکثر سرورهای امروزی مسیر درست است. |
| Composer 2.2 LTS | فقط برای PHP خیلی قدیمی | وقتی پروژه مجبور است با PHP قدیمی کار کند، ممکن است لازم شود؛ اما انتخاب عمومی نیست. |
| Composer 1 | برای پروژه جدید نه | برای پروژههای قدیمی ممکن است هنوز دیده شود، اما نباید پایه آموزش امروز باشد. |
| دستور نصب با checksum ثابت | برای مقاله دائمی مناسب نیست | checksum نصبکننده تغییر میکند؛ بهتر است checksum بهصورت زنده از منبع رسمی خوانده شود. |
| کپی composer.phar از سایتهای ناشناس | خطرناک | فایل اجرایی PHP است و میتواند امنیت سرور را به خطر بیندازد. |
| –ignore-platform-reqs | فقط اضطراری | مشکل واقعی نسخه PHP یا افزونهها را حل نمیکند و ممکن است پروژه بعداً خطا بدهد. |
نکته مهم برای کاربران سرور
اگر هدف شما نصب Laravel، WHMCS یا یک پروژه PHP روی سرور است، اول نسخه PHP CLI و افزونههای PHP را درست کنید. نصب Composer بهتنهایی کافی نیست؛ Composer باید با همان نسخه PHP اجرا شود که پروژه شما نیاز دارد.
پیشنیازهای نصب Composer روی سرور لینوکس
قبل از نصب، باید مطمئن شوید PHP CLI، ابزارهای دانلود و افزونههای رایج PHP روی سرور فعال هستند. در سرورهای کنترلپنلدار ممکن است نسخه PHP وبسایت با نسخه PHP خط فرمان متفاوت باشد؛ این موضوع یکی از پرتکرارترین علتهای خطاهای Composer است.
بررسی نسخه PHP و مسیر اجرایی
php -v which php php -m | sort | egrep 'curl|openssl|zip|mbstring|json|phar|iconv|fileinfo' || true
نصب پیشنیازها در Ubuntu و Debian
apt update apt install -y php-cli php-curl php-zip php-mbstring php-xml php-json unzip curl git
نصب پیشنیازها در AlmaLinux، Rocky Linux و CentOS
dnf install -y php-cli php-curl php-zip php-mbstring php-xml unzip curl git # اگر dnf در دسترس نبود: yum install -y php-cli php-curl php-zip php-mbstring php-xml unzip curl git
اگر روی cPanel، DirectAdmin یا CyberPanel هستید
روی سرورهای کنترلپنلدار، نصب پکیجهای PHP با apt/dnf همیشه بهترین مسیر نیست؛ چون کنترلپنل ممکن است PHP را در مسیرهای جداگانه مدیریت کند. در این حالت اول مسیر PHP درست را پیدا کنید و Composer را با همان PHP اجرا کنید.
نصب Composer با SSH به روش امن
روش امن این است که نصبکننده Composer را از سایت رسمی دریافت کنید، checksum آن را از منبع رسمی بررسی کنید و بعد فایل composer.phar را بسازید. این روش برای مقالههای آموزشی ماندگار بهتر از کپی کردن checksum ثابت است.
cd /tmp
EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]; then
>&2 echo 'ERROR: Invalid installer checksum'
rm -f composer-setup.php
exit 1
fi
php composer-setup.php --quiet
rm -f composer-setup.php
php composer.phar --version
اگر خروجی نسخه Composer را دیدید، نصب محلی انجام شده است و فایل composer.phar در همان مسیر قرار دارد.
نصب Composer به صورت Global
برای اینکه بتوانید در هر مسیر فقط دستور composer را اجرا کنید، فایل composer.phar را به مسیر قابل اجرا منتقل کنید.
sudo mv /tmp/composer.phar /usr/local/bin/composer sudo chmod +x /usr/local/bin/composer composer --version
Composer را از مسیرهای ناشناس دانلود نکنید
Composer یک فایل اجرایی PHP است. اگر آن را از یک mirror ناشناس، فایل تلگرامی یا لینک غیررسمی دریافت کنید، در واقع یک فایل اجرایی را با سطح دسترسی سرور اجرا کردهاید. همیشه از مسیر رسمی و با بررسی checksum استفاده کنید.
دستورهای مهم Composer که هر کاربر باید بداند
| دستور | کاربرد درست |
|---|---|
| composer install | نصب وابستگیها بر اساس composer.lock؛ مناسب برای production و انتقال پروژه. |
| composer install –no-dev -o | نصب بدون پکیجهای توسعه و ساخت autoload بهینه برای سرور اصلی. |
| composer update | بهروزرسانی وابستگیها و تغییر composer.lock؛ بهتر است روی محیط تست انجام شود. |
| composer require vendor/package | افزودن یک پکیج جدید به composer.json و نصب آن. |
| composer remove vendor/package | حذف یک پکیج از پروژه. |
| composer dump-autoload -o | بازسازی autoload و بهینهسازی آن، مخصوصاً بعد از تغییر کلاسها یا انتقال پروژه. |
| composer diagnose | بررسی مشکلات رایج محیط، تنظیمات و اتصال. |
| composer clear-cache | پاک کردن کش Composer در زمان خطاهای دانلود یا بستههای خراب. |
| composer audit | بررسی آسیبپذیریهای شناختهشده پکیجها. |
برای سرور production معمولاً این دستور بهتر است
composer install --no-dev --optimize-autoloader
این دستور پکیجهای توسعه را نصب نمیکند و autoload را برای اجرا سریعتر آماده میکند.
مشکل چند نسخه PHP در سرور و کنترلپنلها
یکی از رایجترین مشکلات کاربران این است که سایت با PHP 8.2 اجرا میشود، اما Composer در SSH با PHP 7.4 یا PHP 8.0 اجرا میشود. نتیجه آن خطاهایی مثل ناسازگاری نسخه PHP، نبود ext-zip، ext-curl یا ext-intl است.
بررسی مسیرهای PHP
which php php -v ls -lah /usr/local/bin/php /usr/bin/php 2>/dev/null || true find /usr/local -type f -name php 2>/dev/null | head -n 30
اجرای Composer با نسخه خاص PHP
# نمونه عمومی، مسیر PHP شما ممکن است متفاوت باشد /usr/local/bin/php /usr/local/bin/composer install # در بعضی سرورهای cPanel مسیرها شبیه این هستند /opt/cpanel/ea-php82/root/usr/bin/php /usr/local/bin/composer install # در بعضی سرورهای OpenLiteSpeed/CyberPanel مسیر PHP CLI میتواند متفاوت باشد /usr/local/lsws/lsphp82/bin/php /usr/local/bin/composer install
اگر پروژه شما Laravel یا یک اسکریپت PHP حساس است، همیشه اول نسخه PHP CLI را با نیاز پروژه تطبیق دهید.
خطاهای رایج Composer و راهحلها
خطای ۱: Your requirements could not be resolved to an installable set of packages
این خطا یعنی نسخه PHP، نسخه پکیجها یا وابستگیهای پروژه با هم سازگار نیستند. ابتدا نسخه PHP و محتوای composer.json را بررسی کنید.
php -v composer why-not php 8.2 || true composer diagnose
خطای ۲: ext-zip، ext-curl، ext-intl یا ext-mbstring نصب نیست
این خطا معمولاً یعنی افزونه موردنیاز روی همان PHP CLI که Composer با آن اجرا شده فعال نیست.
php -m | egrep 'zip|curl|intl|mbstring|xml|fileinfo' || true php --ini
بعد از نصب افزونه، دوباره با همان PHP تست کنید. اگر چند نسخه PHP دارید، نصب افزونه روی نسخه اشتباه مشکل را حل نمیکند.
خطای ۳: Allowed memory size exhausted
در پروژههای بزرگ، حل وابستگیها ممکن است حافظه بیشتری بخواهد. ابتدا علت را بررسی کنید، اما برای اجرای موقت میتوانید محدودیت حافظه Composer را افزایش دهید.
COMPOSER_MEMORY_LIMIT=-1 composer install # یا: php -d memory_limit=-1 /usr/local/bin/composer install
خطای ۴: proc_open disabled یا توابع PHP غیرفعال هستند
روی برخی هاستها یا سرورهای سختگیرانه، توابعی مثل proc_open در php.ini غیرفعال شدهاند. Composer برای بعضی عملیاتها به این توابع نیاز دارد. باید php.ini نسخه CLI بررسی شود.
php --ini php -i | grep disable_functions
خطای ۵: The zip extension and unzip command are both missing
Composer برای دانلود و استخراج پکیجها به zip extension یا دستور unzip نیاز دارد.
apt install -y unzip php-zip # یا در AlmaLinux/Rocky: dnf install -y unzip php-zip
خطای ۶: SSL certificate problem یا خطای CA
این خطا معمولاً از قدیمی بودن بستههای CA یا اختلال در TLS میآید. راهحل درست، خاموش کردن secure-http نیست؛ باید CA certificates را بهروز کنید.
apt install -y ca-certificates update-ca-certificates # AlmaLinux/Rocky/CentOS dnf install -y ca-certificates update-ca-trust
خطای ۷: composer update سایت را خراب کرد
دستور update نسخه وابستگیها و composer.lock را تغییر میدهد. در سرور اصلی، بهخصوص برای Laravel، WHMCS یا فروشگاههای فعال، بدون بکاپ و تست اجرا نشود.
# در production معمولاً این امنتر است: composer install --no-dev --optimize-autoloader
خطای ۸: اجرای Composer با root
اگر Composer را با root اجرا میکنید، دقت کنید مالکیت فایلهای پروژه به هم نریزد. در پروژههای کاربرمحور بهتر است Composer با همان کاربر مالک فایلهای سایت اجرا شود.
pwd ls -ld . vendor composer.json composer.lock 2>/dev/null || true whoami
چکلیست امن قبل از اجرای Composer روی پروژه واقعی
- از فایلهای پروژه و دیتابیس بکاپ بگیرید.
- نسخه PHP CLI را با نیاز پروژه تطبیق دهید.
- اگر composer.lock وجود دارد، روی سرور اصلی از composer install استفاده کنید، نه update.
- برای production از –no-dev و –optimize-autoloader استفاده کنید.
- بعد از نصب، سطح دسترسی و مالکیت فایلهای vendor را بررسی کنید.
- اگر پروژه فعال است، تغییرات را اول روی محیط تست اجرا کنید.
- از –ignore-platform-reqs فقط وقتی استفاده کنید که دقیقاً میدانید چه ریسکی دارد.
سوالات متداول درباره نصب Composer برای PHP
آیا Composer برای وردپرس هم لازم است؟
برای نصب ساده وردپرس معمولاً لازم نیست، اما برای توسعه قالب و افزونه حرفهای، مدیریت کتابخانهها، پروژههای Bedrock یا ابزارهای PHP میتواند بسیار کاربردی باشد.
آیا Composer را باید روی هاست اشتراکی نصب کنیم؟
اگر هاست SSH و PHP CLI داشته باشد ممکن است بتوانید استفاده کنید. اما روی هاستهای محدود، بهتر است وابستگیها در محیط توسعه نصب و سپس vendor به شکل کنترلشده منتقل شود.
فرق composer install و composer update چیست؟
install معمولاً نسخههای دقیق composer.lock را نصب میکند و برای سرور اصلی امنتر است. update وابستگیها را دوباره حل میکند و composer.lock را تغییر میدهد؛ بهتر است روی محیط تست انجام شود.
چرا Composer نسخه PHP اشتباه را تشخیص میدهد؟
چون PHP وبسایت و PHP خط فرمان ممکن است دو مسیر متفاوت داشته باشند. باید which php، php -v و مسیر PHP کنترلپنل را بررسی کنید.
آیا میتوان Composer را بدون root نصب کرد؟
بله، میتوان composer.phar را داخل home کاربر نگه داشت و با php composer.phar اجرا کرد. نصب global فقط برای راحتی اجرای دستور composer از همه مسیرهاست.
آیا Composer 1 هنوز لازم میشود؟
در پروژههای بسیار قدیمی ممکن است مجبور شوید موقتاً از آن استفاده کنید، اما برای آموزش عمومی و پروژههای جدید Composer 2 انتخاب درستتری است.
چرا Composer میگوید ext-zip یا ext-curl وجود ندارد؟
افزونه موردنیاز روی PHP CLI فعال نیست یا Composer با نسخه PHP دیگری اجرا شده است. باید افزونه را برای همان نسخه PHP نصب و فعال کنید.
جمعبندی
Composer هنوز یکی از ابزارهای ضروری برای پروژههای PHP است؛ اما روش نصب و استفاده از آن باید بهروز، امن و متناسب با نسخه PHP سرور باشد. برای پروژههای جدید، Composer 2 را مبنا قرار دهید، نصبکننده را از منبع رسمی و با بررسی checksum اجرا کنید، روی production بهجای update بیاحتیاط از install بر اساس composer.lock استفاده کنید و قبل از هر تغییر مهم، نسخه PHP، افزونهها و بکاپ را بررسی کنید. با رعایت همین چند اصل، بیشتر خطاهای رایج مثل ext-zip، memory limit، SSL certificate، platform requirements و خراب شدن vendor قابل پیشگیری هستند.
شما میتوانید دیدگاه خود را در مورد این مطلب با ما به اشتراک بگذارید.