نصب ionCube Loader روی سرور اوبونتو و AlmaLinux

برای نصب ionCube Loader روی سرور لینوکس بدون کنترل‌پنل، نسخه و معماری PHP را مشخص می‌کنید، بسته لینوکسی مناسب را دانلود می‌کنید، فایل .so را در مسیر افزونه‌ها می‌گذارید، خط zend_extension را اضافه می‌کنید و PHP-FPM را ری‌استارت می‌کنید. کل کار روی اوبونتو، AlmaLinux و Rocky چند دقیقه بیشتر طول نمی‌کشد.

این مقاله در یک نگاه

  • مسیر extension_dir را با دستور php -i پیدا کنید، حدس نزنید.
  • فایل .so باید دقیقا با نسخه PHP هماهنگ باشد.
  • خط zend_extension را در فایل جدا با پیشوند 00- بگذارید تا قبل از OPcache لود شود.
  • برای CLI و FPM هر دو محیط باید تنظیم شود.
  • مسیرها در اوبونتو و AlmaLinux متفاوت است.

پیش از شروع: اطلاعاتی که لازم دارید

سه اطلاعات کلیدی قبل از هر کاری باید مشخص شود. حدس زدن هر کدام باعث می‌شود سرویس PHP بالا نیاید.

php -v php -i | grep extension_dir php -i | grep "Loaded Configuration File"

دستور اول نسخه دقیق PHP را می‌دهد، دستور دوم مسیر پوشه افزونه‌ها و دستور سوم فایل php.ini فعال را نشان می‌دهد. اگر سرور شما چند نسخه PHP دارد، این دستورات را با مسیر کامل همان نسخه اجرا کنید (مثلا /usr/bin/php8.2 -v).

نصب گام‌به‌گام

  1. دانلود و استخراج بسته بسته لینوکس ۶۴بیتی را از سایت رسمی بگیرید و در مسیر موقت باز کنید.
  2. انتخاب فایل درست از میان فایل‌های استخراج‌شده، فایل متناسب با نسخه PHP خود را بردارید (مثلا ioncube_loader_lin_8.2.so).
  3. کپی به مسیر افزونه‌ها فایل را در همان مسیری کپی کنید که در گام قبل با extension_dir پیدا کردید.
  4. ساخت فایل تنظیمات جدا به جای ویرایش php.ini اصلی، یک فایل ini جدا بسازید تا آپدیت‌های سیستم آن را پاک نکنند.
  5. ری‌استارت سرویس PHP-FPM را ری‌استارت کنید.
  6. بررسی نتیجه با php -v خط ionCube را ببینید.
cd /tmp wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz tar xzf ioncube_loaders_lin_x86-64.tar.gz sudo cp ioncube/ioncube_loader_lin_8.2.so /usr/lib/php/20220829/ echo 'zend_extension=/usr/lib/php/20220829/ioncube_loader_lin_8.2.so' | \ sudo tee /etc/php/8.2/fpm/conf.d/00-ioncube.ini sudo systemctl restart php8.2-fpm php -v

تفاوت اوبونتو و AlmaLinux

منطق کار یکسان است و فقط مسیرها و نام سرویس‌ها فرق می‌کند. جدول زیر تفاوت‌ها را نشان می‌دهد.

مورداوبونتو و دبیانAlmaLinux و Rocky
مسیر فایل ini اضافه/etc/php/8.x/fpm/conf.d//etc/php.d/
نام سرویسphp8.x-fpmphp-fpm
مدیر بستهaptdnf یا yum
مخزن رایج PHPppa:ondrej/phpRemi

ترتیب بارگذاری و OPcache

یکی از نکاتی که اغلب نادیده گرفته می‌شود، ترتیب بارگذاری افزونه‌هاست. ionCube Loader باید پیش از OPcache بارگذاری شود، وگرنه ممکن است فایل‌های انکدشده درست اجرا نشوند.

در سیستم‌هایی که فایل‌های ini را به ترتیب الفبایی می‌خوانند، نام‌گذاری فایل با پیشوند 00- این ترتیب را تضمین می‌کند. برای همین در دستور بالا نام فایل را 00-ioncube.ini گذاشتیم.

اگر خطای ترتیب گرفتید اگر با وجود نصب درست، فایل انکدشده اجرا نشد، خروجی phpinfo را بررسی کنید و مطمئن شوید ionCube پیش از Zend OPcache در فهرست Zend Extensions آمده است.

تنظیم برای CLI و کرون

روی بیشتر سرورها، PHP خط فرمان (CLI) و PHP-FPM فایل‌های ini جداگانه دارند. اگر فقط FPM را تنظیم کنید، اسکریپت‌های کرون که با CLI اجرا می‌شوند همچنان خطا می‌دهند.

echo 'zend_extension=/usr/lib/php/20220829/ioncube_loader_lin_8.2.so' | \ sudo tee /etc/php/8.2/cli/conf.d/00-ioncube.ini php -v

عیب‌یابی

نشانهعلتراه‌حل
PHP-FPM بالا نمی‌آیدفایل so نامتناسب با نسخهفایل متناسب با نسخه دقیق را جایگزین کنید
ionCube در phpinfo نیستفایل ini در مسیر اشتباهمسیر conf.d درست را بررسی کنید
وب کار می‌کند ولی کرون خطا می‌دهدCLI تنظیم نشدهفایل ini را برای cli هم بسازید
needs a newer Loaderنسخه لودر قدیمی استلودر را به‌روزرسانی کنید

برای درک نقش لودر مقاله ionCube Loader چیست و برای رفع خطای عمومی این راهنما را ببینید. بسته‌های رسمی در صفحه دانلود ionCube موجود است.

جمع بندی: نصب ionCube روی سرور لینوکس سه نکته کلیدی دارد: فایل .so باید دقیقا با نسخه PHP هماهنگ باشد، خط zend_extension باید در مسیر conf.d درست و با پیشوندی قرار بگیرد که پیش از OPcache خوانده شود، و برای CLI و FPM هر دو محیط جداگانه تنظیم شود. اگر این سه را رعایت کنید، نصب بدون مشکل انجام می‌شود.

سوالات متداول

چرا باید ionCube قبل از OPcache لود شود؟

چون لودر باید بایت‌کد را پیش از دخالت OPcache در اختیار بگیرد. نام‌گذاری فایل ini با پیشوند 00- ترتیب بارگذاری را تضمین می‌کند.

نسخه فایل so را اشتباه انتخاب کردم، چه می‌شود؟

PHP-FPM بالا نمی‌آید و در لاگ خطای بارگذاری zend_extension می‌بینید. کافی است فایل متناسب با نسخه دقیق PHP را جایگزین کنید.

روی سرور چند نسخه PHP دارم، کدام را تنظیم کنم؟

همان نسخه‌ای که سایت با آن اجرا می‌شود. با phpinfo یا php -v در همان محیط نسخه را بررسی کنید.

چرا سایت کار می‌کند ولی کرون خطا می‌دهد؟

چون PHP خط فرمان فایل ini جداگانه دارد. باید همان خط zend_extension را برای مسیر cli هم اضافه کنید.

بعد از آپدیت PHP باید دوباره نصب کنم؟

بله. با تغییر نسخه اصلی PHP باید فایل so متناسب با نسخه جدید را جایگزین و مسیر را در ini به‌روز کنید.

مطالب مرتبط: ionCube Loader چیست؟ · رفع خطای لودر · سازگاری با PHP ۸.۳ و ۸.۴