دسته بندی:

آموزش فعال کردن soap در دایرکت ادمین

پاسخ کوتاه: SOAP یک افزونه (extension) استاندارد PHP است و برای فعال کردن آن روی سرور دایرکت ادمین باید گزینه --enable-soap را به فایل configure سفارشی CustomBuild اضافه کنید، PHP را دوباره بسازید و در پایان نتیجه را با phpinfo یا دستور php -m بررسی کنید. اگر سرور شما روی CloudLinux و با PHP Selector کار می‌کند، همین کار بدون کامپایل مجدد و فقط با فعال کردن یک گزینه در پنل انجام می‌شود. برای تغییر مقدارهای معمولی PHP در سطح یک کاربر هم نیازی به بازسازی نیست؛ روش درست آن در تنظیم php.ini اختصاصی برای PHP-FPM در دایرکت‌ادمین آمده است.

SOAP چیست و چرا یک برنامه به آن نیاز پیدا می‌کند

SOAP یک پروتکل تبادل پیام مبتنی بر XML برای فراخوانی سرویس‌های وب است. سرویس‌دهنده معمولاً فایلی به نام WSDL منتشر می‌کند که متدها، پارامترها و نوع داده‌ها را توصیف می‌کند و برنامه‌ی کلاینت بر اساس همان توصیف، درخواست XML می‌سازد و پاسخ را می‌خواند.

در PHP این پروتکل با افزونه‌ای به نام soap پیاده‌سازی شده که دو کلاس اصلی SoapClient و SoapServer را در اختیار می‌گذارد. تا وقتی این افزونه بارگذاری نشده باشد، این کلاس‌ها اصلاً وجود ندارند و اجرای کد با خطایی شبیه Class "SoapClient" not found متوقف می‌شود.

معمولاً زمانی به soap نیاز پیدا می‌کنید که بخواهید به سرویسی وصل شوید که رابط آن فقط SOAP است: بخشی از سامانه‌های سازمانی، برخی وب‌سرویس‌های قدیمی‌تر، و ماژول‌هایی که برای ارتباط با آن‌ها نوشته شده‌اند. مستندات همان سرویس مشخص می‌کند که واقعاً به SOAP نیاز دارید یا نسخه‌ی REST هم در دسترس است.

پیش از شروع چه چیزهایی لازم است

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

قبل از هر تغییری بررسی کنید که شاید افزونه از قبل فعال باشد. در بسیاری از نصب‌های به‌روز، soap پیش‌فرض ساخته می‌شود:

php -m | grep -i soap

روش سریع: اگر سرور PHP Selector دارد

روی سرورهایی که CloudLinux و PHP Selector دارند، هر کاربر می‌تواند از پنل کاربری دایرکت ادمین نسخه‌ی PHP خود و فهرست افزونه‌ها را ببیند. در این حالت کافی است گزینه‌ی soap را علامت بزنید و ذخیره کنید؛ نیازی به SSH و کامپایل نیست. اگر چنین بخشی در پنل نمی‌بینید، سرور از روش استاندارد CustomBuild استفاده می‌کند و باید سراغ بخش بعد بروید.

روش استاندارد: فعال‌سازی از طریق CustomBuild

در دایرکت ادمین، PHP توسط ابزار CustomBuild از سورس ساخته می‌شود. بنابراین برای اضافه کردن یک افزونه‌ی کامپایل‌شدنی مثل soap باید گزینه‌ی مربوطه را به فایل configure اضافه کرد و PHP را دوباره ساخت. مسیر کار به این شکل است:

۱) به مسیر CustomBuild بروید و ابزار را به‌روز کنید:

cd /usr/local/directadmin/custombuild

./build update

۲) با دستور زیر ببینید کدام نسخه‌های PHP نصب‌اند و در چه حالتی (mod_php، PHP-FPM و غیره) اجرا می‌شوند:

./build options

۳) فایل configure پیش‌فرض همان نسخه را در پوشه‌ی custom کپی کنید. CustomBuild اگر نسخه‌ی سفارشی را در مسیر custom پیدا کند، به‌جای فایل پیش‌فرض از آن استفاده می‌کند و در به‌روزرسانی‌های بعدی هم بازنویسی نمی‌شود. به‌جای XY شماره‌ی نسخه‌ی خود را بگذارید (مثلاً 81 برای PHP 8.1):

mkdir -p /usr/local/directadmin/custombuild/custom/php

cp /usr/local/directadmin/custombuild/configure/php/configure.phpXY /usr/local/directadmin/custombuild/custom/php/configure.phpXY

۴) فایل کپی‌شده را ویرایش کنید و خط --enable-soap را به فهرست گزینه‌ها اضافه کنید. دقت کنید که این فایل یک اسکریپت است: تمام خط‌ها به‌جز خط آخر باید با کاراکتر تمام شوند، وگرنه ساخت PHP با خطا متوقف می‌شود. مطمئن شوید فایل قابل اجرا باقی می‌ماند:

chmod 755 /usr/local/directadmin/custombuild/custom/php/configure.phpXY

۵) PHP را دوباره بسازید:

./build php n

اگر چند نسخه‌ی PHP روی سرور دارید و همه‌ی آن‌ها باید soap داشته باشند، این کار را برای فایل configure هر نسخه جداگانه تکرار کنید. جزئیات نام فایل‌ها و گزینه‌های build بین نسخه‌های مختلف CustomBuild کمی فرق می‌کند؛ پس بعد از ./build update بهتر است مستندات رسمی همان نسخه را هم یک بار مرور کنید.

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

بررسی نتیجه با phpinfo

بعد از پایان ساخت، ابتدا از خط فرمان بررسی کنید:

php -m | grep -i soap

اما این خروجی فقط وضعیت PHP در حالت CLI را نشان می‌دهد. چیزی که برای سایت اهمیت دارد، نسخه‌ای است که وب‌سرور اجرا می‌کند. برای همین یک فایل موقت مثل info.php در پوشه‌ی public_html همان دامنه بسازید با محتوای <?php phpinfo();، آن را در مرورگر باز کنید و در صفحه دنبال بخش soap بگردید. اگر افزونه فعال باشد، بخشی با عنوان soap و مقدار Soap Client => enabled نمایش داده می‌شود.

این فایل اطلاعات کاملی از پیکربندی سرور را لو می‌دهد؛ بلافاصله بعد از بررسی آن را پاک کنید.

اگر باز هم فعال نشد

  • سرویس‌های مربوطه ری‌استارت نشده‌اند. بعد از build، وب‌سرور و در صورت استفاده PHP-FPM نسخه‌ی مورد نظر باید مجدداً راه‌اندازی شوند.
  • افزونه برای نسخه‌ی دیگری فعال شده است. اگر دامنه از طریق پنل روی نسخه‌ی دومِ PHP تنظیم شده باشد، باید configure همان نسخه اصلاح شود.
  • خطای نگارشی در فایل configure؛ معمولاً همان بک‌اسلش جاافتاده در انتهای خط. خروجی build را از بالا بخوانید تا اولین خطای واقعی را پیدا کنید.
  • اتصال به WSDL برقرار نمی‌شود. اگر آدرس WSDL روی HTTPS است، افزونه‌ی openssl هم باید فعال باشد و فایروال سرور نباید خروجی به آن مقصد را ببندد.
  • پاسخ‌های قدیمی کش شده‌اند. مقادیر soap.wsdl_cache_enabled و soap.wsdl_cache_ttl در php.ini تعیین می‌کنند WSDL چقدر کش شود؛ هنگام تست تغییرات سمت سرویس‌دهنده این را در نظر داشته باشید.

روی یک سرور فیزیکی اختصاصی که ده‌ها سایت میزبانی می‌کند، تغییر گزینه‌های configure روی همه‌ی آن سایت‌ها اثر می‌گذارد؛ بهتر است ابتدا روی یک سرور آزمایشی امتحان شود.

جمع‌بندی

فعال کردن soap در دایرکت ادمین یعنی اضافه کردن یک گزینه به فایل configure سفارشی CustomBuild و ساخت مجدد PHP، مگر اینکه سرور PHP Selector داشته باشد که در آن حالت کار به یک انتخاب ساده در پنل خلاصه می‌شود. مهم‌ترین نکته‌ها بکاپ گرفتن پیش از build، انجام کار روی نسخه‌ی درست PHP، و تأیید نهایی با phpinfo است.

اگر ترجیح می‌دهید کامپایل مجدد PHP را روی سرور در حال سرویس‌دهی خودتان انجام ندهید، می‌توانید این کار را به‌صورت موردی یا در قالب مدیریت مستمر به تیم پشتیبانی و مدیریت سرور بسپارید.