آیا نیاز به راه اندازی سریع وب سرور برای آزمایش یک برنامه PHP دارید؟ مفسر PHP یک داخلی دارد! شما می توانید از این برای بازرسی سریع کار خود بدون اجرای Apache، NGINX یا یک راه حل کانتینری استفاده کنید.
سرور یکپارچه PHP توجه نسبتا کمی را به خود جلب می کند اما برای اهداف توسعه بسیار قدرتمند است. در این راهنما، ما نشان خواهیم داد که چگونه میتوانید از آن به عنوان جایگزینی برای سرورهای میکرو دیگر مانند SimpleHTTPS Python یا بسته npm http-server استفاده کنید، که هیچ کدام نمیتوانند اسکریپتهای PHP را اجرا کنند.
با استفاده از سرور داخلی
سرور داخلی مکانیزمی راحت است که به شما کمک می کند سایت های PHP را در محیط هایی که فاقد سرور HTTP کامل هستند آزمایش کنید. در PHP 5.4 و تمام نسخه های بعدی موجود است. می توانید آن را مستقیماً از دایرکتوری کاری خود بدون نیاز به راه اندازی یک میزبان مجازی اجرا کنید.
قبل از استفاده از سرور، هشدار داده شود که فقط برای استفاده در توسعه طراحی شده است. اسناد PHP به صراحت در مورد استقرار این سرور در مقابل برنامه های کاربردی هشدار می دهد. این به اندازه کافی امن نیست که در شبکه های در دسترس عموم قرار بگیرد.
راه اندازی سرور
سرور با ارسال پرچم -S به فایل اجرایی php راه اندازی می شود:
$ php -S localhost:8080 [Fri Jun 10 16:00:00 2022] PHP 8.1.5 Development Server (http://localhost:8080) started
آرگومان داده شده به فرمان آدرس گوش دادن سرور را مشخص می کند. ما در مثال بالا از پورت 8080 در لوکال هاست استفاده کرده ایم. اکنون می توانید از http://localhost:8080 در مرورگر وب خود برای دسترسی به محتوای فهرست کاری خود بازدید کنید. هر اسکریپت PHP در صورت درخواست شما به طور خودکار اجرا می شود.
هنگام راهاندازی سرور، میتوانید مسیری را که خارج از فهرست کاری شما است، با تنظیم پرچم -t ارائه دهید:
$ php -S localhost:8080 -t /home/$USER/public_docs
اکنون ریشه سند در پوشه اصلی شما /public_docs خواهد بود.
هنگام استفاده از وب سرور، پنجره ترمینال خود را باز نگه دارید. پس از اتمام تست سایت خود، Ctrl+C را فشار دهید تا فرآیند از بین برود. PHP هر درخواست ورودی را در پنجره ترمینال شما ثبت می کند، از جمله روش URI و HTTP. هر گونه خطای PHP کشف نشده در گزارش ها نیز نشان داده می شود.
فعال کردن دسترسی از راه دور
لیستینگ در لوکال هاست اجازه اتصالات ورودی از سایر دستگاه های شبکه شما را نمی دهد. به جای آن می توانید با اتصال به 0.0.0.0 اجازه دسترسی از راه دور را بدهید:
$ php -S 0.0.0.0:8080
به یاد داشته باشید که سرور برای استفاده در تولید سخت نشده است و نباید در معرض عموم قرار گیرد. دسترسی از راه دور را فقط در مواقع ضروری مجاز کنید، مانند آزمایش یک ویژگی خاص در دستگاه تلفن همراه. مطمئن شوید پورتی که استفاده میکنید به اینترنت باز نباشد.
درخواست تطبیق بازگشتی
زمانی که درخواست ورودی فاقد مؤلفه URI باشد، PHP به دنبال فایلهای index.php و index.html در ریشه سند فعال میگردد. اگر هیچ یک از این فایل ها وجود نداشته باشد، سرور همچنان به سمت بالا درخت دایرکتوری حرکت می کند و به دنبال یک فهرست در یکی از والدین ریشه سند شما می گردد. این بدان معناست که میتوانید ناخواسته محتوایی را ارائه دهید که خارج از فهرستی که شما مشخص کردهاید قرار دارد. وضعیت 404 Not Found زمانی صادر می شود که بالای درخت بدون یافتن فایل فهرستی به بالای درخت برسد.
درخواست هایی که شامل URI هستند (مانند فایل /) باید دقیقاً با یک فایل ثابت در ریشه سند مطابقت داشته باشند. در غیر این صورت یک 404 عودت داده می شود. PHP به طور خودکار هدر پاسخ Content-Type را بر روی نوع MIME فایل ارائه شده برای محبوب ترین پسوندهای فایل تنظیم می کند.
مرتبط:آموزش جامع طراحی سایت وردپرس با المنتور
استفاده از اسکریپت روتر
شما می توانید به صورت اختیاری وب سرور را برای فراخوانی یک اسکریپت در هر درخواست پیکربندی کنید. این به شما امکان می دهد از کنترلر جلوی برنامه خود برای انجام مسیریابی پویا پیشرفته استفاده کنید.
هنگامی که سرور را راه اندازی می کنید، عملکرد روتر با ارائه یک نام فایل PHP در خط فرمان فعال می شود:
$ php -S localhost:8080 router.php
if ($_SERVER["REQUEST_URI"] === "/dashboard") { require_once("dashboard.php"); } else if ($_SERVER["REQUEST_URI"] === "/profile") { require_once("profile.php"); } else { require_once("404.php"); }
if (str_starts_with($_SERVER["REQUEST_URI"], "/api")) { // Route to the correct API endpoint // ... } else { // Serve other routes statically return false; }
تشخیص سرور داخلی از روی کد پی اچ پی
کد PHP شما می تواند با بررسی نام رابط فعال تشخیص دهد که آیا توسط وب سرور داخلی فراخوانی شده است یا خیر. تابع php_sapi_name() این مقدار را ارائه می کند. هنگامی که اسکریپت توسط مؤلفه سرور یکپارچه فراخوانی می شود، روی cli-server تنظیم می شود.
if (php_sapi_name() === "cli-server") { enable_development_mode(); }
رسیدگی به چندین درخواست به صورت همزمان
سرور به طور پیشفرض در حالت همزمان تک فرآیندی اجرا میشود. درخواست ها به صورت جداگانه بررسی می شوند و اجرای یکدیگر را تا زمان تکمیل مسدود می کنند. این یکی از دلایل نامناسب بودن سرور برای استفاده در تولید است.
PHP 7.4 پشتیبانی از رسیدگی به چندین درخواست را به طور همزمان اضافه کرد. به در دسترس بودن fork() وابسته است و در ویندوز کار نمی کند. هنگامی که این حالت فعال است، سرور یک کارگر جدید را برای ارائه هر درخواست دریافتی فورک می کند. میتوانید آن را با تنظیم متغیر محیطی PHP_CLI_SERVER_WORKERS روی تعداد کارگرانی که میخواهید فعال کنید:
$ PHP_CLI_SERVER_WORKERS=8 php -S localhost:8080
این قابلیت هنوز در PHP 8.1 به عنوان آزمایشی علامت گذاری شده است.
مرتبط:راهنمای نهایی سئو وردپرس برای مبتدیان
خلاصه
PHP یک وب سرور داخلی دارد که راهی مناسب برای آزمایش برنامه های کاربردی شما و نمایش سریع محتوای فایل سیستم محلی در شبکه محلی شما است. این برنامه از اجرای اسکریپت PHP، مسیریابی همه جانبه و فایل های استاتیک با رایج ترین انواع MIME پشتیبانی می کند.
اگرچه سرور اکنون از حالت فورک اختیاری پشتیبانی می کند، استفاده از آن در تولید توصیه نمی شود. این به عنوان یک کمک توسعه در نظر گرفته شده است و فاقد ویژگی های شخصی سازی و امنیتی است که برای استقرار عمومی خود به آن نیاز دارید. جایی که برتری دارد به عنوان یک جایگزین سبک وزن و یکپارچه برای پلتفرم های توسعه معمولی مانند کانتینرهای WAMP، XAMPP و Docker است.