ویرگول
ورودثبت نام
علی قاسم پور
علی قاسم پور
علی قاسم پور
علی قاسم پور
خواندن ۴ دقیقه·۷ ماه پیش

اجرای php توسط web server

اجرای PHP به‌صورت ماژول در Apache

یکی از روش‌های اجرای PHP در وب‌سرور Apache، استفاده از ماژولی به‌نام mod_php است. این ماژول، PHP را مستقیماً درون پروسه‌ی Apache بارگذاری می‌کند و اجازه می‌دهد فایل‌های PHP بدون نیاز به راه‌اندازی پردازش خارجی، به‌صورت داخلی تفسیر و اجرا شوند. در این روش، زمانی که Apache یک فایل با پسوند .php را دریافت می‌کند، پردازش آن را مستقیماً به Zend Engine (از طریق mod_php) می‌سپارد.

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

در این روش، mod_php به‌تنهایی نمی‌تواند PHP را اجرا کند؛ بلکه تنها یک واسط است که PHP را به Apache متصل می‌کند. بنابراین، برای کارکرد صحیح این ماژول، باید پکیج کامل PHP روی سیستم نصب شده باشد.

ماژول mod_php از فایل‌های باینری PHP، کتابخانه‌ها و تنظیمات پیکربندی مانند php.ini استفاده می‌کند. به عبارت دیگر، این ماژول نقش یک پل را بین Apache و محیط اجرایی PHP ایفا می‌کند.


اجرای PHP با استفاده از PHP-CGI

استاندارد CGI یک استاندارد قدیمی و عمومی برای اجرای برنامه‌های خارجی توسط وب‌سرورهاست. براساس این استاندارد، وب‌سرور می‌تواند برنامه‌هایی مانند php-cgi را اجرا کند و اطلاعات مربوط به درخواست HTTP را از طریق ورودی استاندارد (stdin) به آن‌ها منتقل کند. سپس برنامه‌ی CGI موظف است پاسخ را از طریق خروجی استاندارد (stdout) به وب‌سرور برگرداند. این مکانیزم امکان ارتباط بین وب‌سرور و زبان‌های برنامه‌نویسی را بدون نیاز به ماژول داخلی فراهم می‌سازد.

در زمان اجرای یک درخواست، وب‌سرور متغیرهایی مانند REQUEST_METHOD, SCRIPT_FILENAME, QUERY_STRING, CONTENT_TYPE, و CONTENT_LENGTH را به php-cgi ارسال می‌کند. این مقادیر اطلاعات ضروری برای تحلیل و پردازش درخواست هستند. در پاسخ، php-cgi باید ابتدا هدرهای HTTP (مانند Content-Type) را از طریق stdout ارسال کند و سپس محتوای اصلی (body) پاسخ را بنویسد.

نکته‌ی مهم در استفاده از PHP-CGI این است که حتی اگر فقط قصد اجرای php-cgi را داشته باشید، باید پکیج php-cli نیز روی سیستم نصب باشد. دلیل این وابستگی آن است که فایل‌های runtime و برخی ابزارهای جانبی مورد نیاز برای اجرای صحیح اسکریپت‌ها، در پکیج CLI قرار دارند. این مسئله نشان می‌دهد که CGI با این که یک php binary مستقل است، همچنان برای عملکرد صحیح نیازمند زیرساخت کامل PHP می باشد.


اجرای PHP با PHP-FPM

روش PHP-FPM یک روش مدرن و بهینه‌شده برای اجرای PHP است که به‌جای اجرای یک process جدید برای هر درخواست، از یک مجموعه‌ی پایدار از processها استفاده می‌کند. این رویکرد نه‌تنها کارایی بالاتری دارد، بلکه مصرف منابع را به‌شکل مؤثری کنترل می‌کند. PHP-FPM به‌طور خاص برای هماهنگی با وب‌سرورهایی مانند Nginx طراحی شده که خودشان توانایی اجرای مستقیم PHP را ندارند.

روند اجرای درخواست به این شکل است: ابتدا Nginx بررسی می‌کند که درخواست به فایلی با پسوند .php مربوط است، سپس متوجه می‌شود که این فایل باید توسط PHP پردازش شود. در این مرحله، Nginx از طریق پروتکل FastCGI، درخواست را به PHP-FPM ارسال می‌کند و اطلاعاتی مانند مسیر کامل فایل (SCRIPT_FILENAME) و سایر متغیرهای مرتبط را همراه آن می‌فرستد.

روش PHP-FPM خود شامل یک یا چند process pool است که هر pool مجموعه‌ای از processهای PHP را مدیریت می‌کند. یکی از این processها فایل PHP مورد نظر را از روی دیسک می‌خواند، آن را پردازش می‌کند و نتیجه را (شامل header و body) به Nginx بازمی‌گرداند. سپس Nginx این خروجی را به‌صورت یک پاسخ HTTP استاندارد به کلاینت ارسال می‌کند.

در مدل PHP-FPM، فرایندها به‌صورت Long-lived ایجاد می شوند؛ به این معنا که پس از ایجاد، برای مدت زیادی فعال باقی می‌مانند و به درخواست‌های متعدد پاسخ می‌دهند. این برخلاف روش‌هایی مثل PHP-CGI است که در آن هر درخواست باعث ایجاد یک process جدید می‌شود و بلافاصله پس از پایان اجرا، آن process از بین می‌رود. Long-lived بودن processها در PHP-FPM باعث بهینه‌سازی قابل توجهی در performance سیستم می‌شود، چون سربار راه‌اندازی و بستن مداوم processها حذف می‌شود و منابع سیستم به شکل بهینه تری مورد استفاده قرار می‌گیرند.


مشاهده بخش بعدی مقاله

php
۱
۰
علی قاسم پور
علی قاسم پور
شاید از این پست‌ها خوشتان بیاید