
زمانی که دستور نصب PHP را در توزیعهای مبتنی بر دبیان اجرا میکنیم (apt install php)، پشتصحنه مجموعهای از پکیجهای مختلف و وابسته بهصورت سلسلهمراتبی نصب میشوند. این ساختار به ما امکان میدهد که بخشهای مختلف PHP را بهصورت جداگانه نصب یا حذف کنیم و تنها ماژولها و قابلیتهایی را که واقعاً نیاز داریم، روی سیستم نگه داریم. این رویکرد باعث بهینهشدن فضای دیسک و کاهش پیچیدگی سیستم میشود.
پکیج اصلی که با نام سادهی php شناخته میشود، درواقع یک Meta Package است. این نوع پکیجها فایل باینری یا اسکریپت خاصی ندارند، بلکه صرفاً برای مدیریت مجموعهای از پکیجهای مرتبط طراحی شدهاند. پکیج php معمولاً به آخرین نسخهی پایدار PHP ارجاع میدهد (مثلاً php8.4) و وابستگیهایی مانند php-cli، php-fpm، و php-common را نصب میکند. نقش meta packageها این است که کار نصب را ساده کنند و یک نقطهی مرکزی برای مدیریت نسخهها و اجزای وابسته فراهم آورند.
در کنار پکیج اصلی، تعداد زیادی Sub-package وجود دارند که هر کدام وظیفهی خاصی را بر عهده دارند؛ مانند php-mysql برای اتصال به دیتابیس، php-curl برای درخواستهای HTTP. این پکیجها معمولاً بهشکل ماژولهای قابل بارگذاری توسط PHP طراحی شدهاند و هنگام بارگذاری در فایل پیکربندی (php.ini) فعال میشوند. با بررسی ساختار یک فایل .deb از این پکیجها، میتوان binary file ها ، extension ها، فایلهای پیکربندی، و لیست وابستگیها را مشاهده کرد که همگی با فرمت استاندارد بستهبندی دبیان طراحی شدهاند.
زبان PHP دارای یک محیط اجرای خط فرمان است که به توسعهدهندگان اجازه میدهد اسکریپتهای PHP را مستقیماً از ترمینال اجرا کنند. در این حالت، برنامهی php بهعنوان یک برنامهی مستقل فراخوانی میشود و اسکریپت موردنظر بهصورت آرگومان به آن داده میشود، مانند: php script.php. این نوع اجرا بیشتر در اسکریپتهای بکاند، ابزارهای مدیریتی، برنامههای زمانبندیشده (cron jobs)، و تست کدها کاربرد دارد.
در اجرای CLI، برخلاف حالت وب، خبری از درخواست HTTP، سرور وب یا متغیرهای مربوط به مرورگر نیست. محیط اجرا کاملاً مستقل از HTTP است و متغیرهایی مانند $_SERVER['REQUEST_METHOD'] یا $_GET مقداردهی نمیشوند. با این حال، توسعهدهنده میتواند ورودیهایی از طریق آرگومانهای خط فرمان ($argv) دریافت کند و خروجی را نیز مستقیماً به ترمینال ارسال نماید.
یکی از مزایای بزرگ اجرای CLI، سرعت و سادگی آن است؛ زیرا نیازی به بارگذاری وبسرور یا ساختار پیچیدهی درخواستی ندارد. همچنین بسیاری از ابزارها مانند Composer، PHPUnit یا Laravel Artisan نیز بر پایهی همین CLI ساخته شدهاند. در زمان اجرا، CLI همان چرخهی پردازش استاندارد PHP را طی میکند (از parsing تا اجرای opcode در Zend Engine) اما در بستری سبکتر و بدون سربار ارتباط با وب سرور.
برخلاف برخی زبانها مانند Go یا JavaScript (Node.js) که قابلیت سرو کردن درخواستهای HTTP بهصورت Built-in دارند، PHP برای این منظور به یک وبسرور خارجی مانند Apache یا Nginx نیاز دارد. این وبسرورها وظیفهی دریافت درخواست HTTP از سمت کاربر و ارسال آن به PHP را بر عهده دارند.
نحوهی اجرای PHP در حالت CLI با حالت Web Server تفاوتهای اساسی دارد. در CLI، اسکریپت مستقیماً از طریق خط فرمان اجرا میشود و معمولاً هیچ محدودیتی برای زمان اجرای آن وجود ندارد. خروجیها با echo یا print مستقیماً به ترمینال ارسال میشوند، و خبری از متغیرهای مرتبط با درخواست HTTP مانند $_GET، $_POST، یا $_SERVER['REQUEST_METHOD'] نیست.
در مقابل، زمانی که PHP از طریق وبسرور اجرا میشود، با محدودیتهای خاصی مواجه است. بهطور معمول، برای جلوگیری از فشار زیاد روی سرور، زمان اجرای اسکریپت در فایل php.ini محدود میشود. و همچنین، echo برای نوشتن در body پاسخ HTTP استفاده میشود.
متغیرهای $_GET، $_POST، و سایر متغیرهای سوپرگلوبال در دسترس هستند و اطلاعات مربوط به درخواست را شامل میشوند.
در وب سرور header های پیشفرض برای HTTP message وجود دارند که به پاسخ HTTP اضافه میشوند، مگر اینکه بهصورت صریح php آن ها را غیرفعال کند و یا تغییر دهد.
