كيفية اختبار مواقع الويب بسرعة باستخدام خادم الويب المدمج في PHP

نشرت: 2022-08-11

رسم توضيحي يظهر شعار PHP

هل تحتاج إلى بدء تشغيل خادم الويب بسرعة لاختبار تطبيق PHP؟ مترجم PHP لديه واحد مدمج! يمكنك استخدام هذا لفحص عملك بسرعة دون تشغيل Apache أو NGINX أو حل حاوية.

يحظى خادم PHP المتكامل باهتمام ضئيل نسبيًا ولكنه قوي جدًا لأغراض التطوير. في هذا الدليل ، سنعرض كيف يمكنك استخدامه كبديل للخوادم الصغيرة الأخرى مثل Python SimpleHTTPServer أو حزمة http-server npm ، ولا يمكن لأي منهما تنفيذ نصوص PHP.

استخدام الخادم المدمج

الخادم المدمج هو آلية ملائمة لمساعدتك في اختبار مواقع PHP في البيئات التي تفتقر إلى خادم HTTP مكتمل. إنه متوفر في PHP 5.4 وجميع الإصدارات الأحدث. يمكنك تشغيله مباشرة من دليل العمل الخاص بك دون الحاجة إلى إعداد مضيف افتراضي أولاً.

قبل استخدام الخادم ، كن حذرًا من أنه مصمم للاستخدام في التطوير فقط. تحذر وثائق PHP صراحة من نشر هذا الخادم أمام تطبيقات الإنتاج. ليس من الآمن بما يكفي أن يتم الكشف عنها على شبكات متاحة للجمهور.

بدء تشغيل الخادم

يبدأ الخادم بتمرير العلامة -S إلى ملف php القابل للتنفيذ:

 المضيف المحلي $ php -S: 8080
[الجمعة 10 يونيو 16:00:00 2022] تم بدء تشغيل خادم تطوير PHP 8.1.5 (http: // localhost: 8080)

تحدد الحجة المعطاة للأمر عنوان الاستماع الخاص بالخادم. لقد استخدمنا المنفذ 8080 على localhost في المثال أعلاه. يمكنك الآن زيارة http://localhost:8080 في متصفح الويب الخاص بك للوصول إلى المحتوى في دليل العمل الخاص بك. سيتم تنفيذ أي نصوص PHP تلقائيًا عندما تطلبها.

يمكنك خدمة مسار خارج دليل العمل الخاص بك عن طريق تعيين العلامة -t عند بدء تشغيل الخادم:

 $ php -S localhost: 8080 -t / home / $ USER / public_docs

سيكون جذر المستند الآن /public_docs داخل المجلد الرئيسي.

احتفظ بنافذة المحطة الطرفية مفتوحة أثناء استخدام خادم الويب. اضغط على Ctrl + C لإيقاف العملية بمجرد الانتهاء من اختبار موقعك. ستقوم PHP بتسجيل كل طلب وارد في النافذة الطرفية الخاصة بك ، بما في ذلك طريقة URI و HTTP. ستظهر أي أخطاء PHP غير معلومة في السجلات أيضًا.

تمكين الوصول عن بعد

لن يسمح الاستماع على localhost المحلي بالاتصالات الواردة من الأجهزة الأخرى الموجودة على شبكتك. يمكنك السماح بالوصول عن بُعد بالربط بـ 0.0.0.0 بدلاً من ذلك:

 $ php -S 0.0.0.0:8080

تذكر أن الخادم لم يتم تقويته لاستخدامه في الإنتاج ولا يجب الكشف عنه علنًا. لا تسمح بالوصول عن بُعد إلا عندما يكون ذلك ضروريًا للغاية ، على سبيل المثال عند اختبار ميزة معينة على جهاز محمول. تأكد من أن المنفذ الذي تستخدمه ليس مفتوحًا على الإنترنت.

طلب مطابقة احتياطية

سيبحث PHP عن ملفات index.php و index.html في جذر المستند النشط عندما يفتقر الطلب الوارد إلى مكون URI. في حالة عدم وجود أي من هذين الملفين ، سيستمر الخادم في التحرك لأعلى شجرة الدليل ، ويبحث عن فهرس في أحد أصول جذر المستند. هذا يعني أنه يمكن أن ينتهي بك الأمر عن غير قصد إلى تقديم محتوى يقع خارج الدليل الذي حددته. سيتم إصدار حالة 404 Not Found عند الوصول إلى قمة الشجرة دون العثور على ملف فهرس.

الطلبات التي تتضمن URI (مثل /file ) يجب أن تتطابق تمامًا مع ملف ثابت في جذر المستند. وإلا سيتم إرجاع 404. تقوم PHP تلقائيًا بتعيين رأس استجابة Content-Type MIME للملف المقدم لمعظم امتدادات الملفات الشائعة.

استخدام البرنامج النصي لجهاز التوجيه

يمكنك تكوين خادم الويب اختياريًا لاستدعاء برنامج نصي عند كل طلب. يتيح لك ذلك استخدام وحدة التحكم الأمامية لتطبيقك لأداء التوجيه الديناميكي المتقدم.

يتم تمكين وظيفة جهاز التوجيه من خلال توفير اسم ملف PHP في سطر الأوامر عند بدء تشغيل الخادم:

 مضيف محلي $ php -S: 8080 router.php

ستستخدم PHP الآن router.php للتعامل مع كل الطلبات الواردة. يمكنك توجيه المستخدمين إلى النقطة المناسبة في التطبيق الخاص بك عن طريق فحص URI للطلب:

 إذا ( $ _SERVER [ "REQUEST_URI" ] === "/ لوحة التحكم" ) {
    need_once ( "dashboard.php" ) ؛
}
وإلا إذا ( $ _SERVER [ "REQUEST_URI" ] === "/ profile" ) {
    need_once ( "profile.php" ) ؛
}
آخر {
    need_once ( "404.php" ) ؛
}

سيصبح الإخراج الناتج بواسطة البرنامج النصي لجهاز التوجيه الخاص بك هو الاستجابة التي يتم إرسالها مرة أخرى إلى العميل. الاستثناء هو إذا أعاد البرنامج النصي false : في هذه الحالة ، ستعود PHP إلى إرجاع الملف الثابت الذي يتطابق مع URI للطلب الأصلي.

 إذا ( str_starts_with ( $ _SERVER [ "REQUEST_URI" ] ، "/ api" ) ) {
    // التوجيه إلى نقطة نهاية API الصحيحة
    // ...
}
آخر {
    // خدمة طرق أخرى بشكل ثابت
    عودة كاذبة _
}

الكشف عن الخادم المدمج من كود PHP الخاص بك

يمكن أن يكتشف رمز PHP الخاص بك ما إذا كان يتم استدعاؤه بواسطة خادم الويب المدمج عن طريق فحص اسم الواجهة النشطة. توفر الدالة php_sapi_name() هذه القيمة. سيتم تعيينه على cli-server عندما يتم استدعاء البرنامج النصي بواسطة مكون الخادم المتكامل.

 إذا ( php_sapi_name ( ) === "cli-server" ) {
    enable_development_mode ( ) ،
}

التعامل مع طلبات متعددة في نفس الوقت

يتم تعيين الخادم افتراضيًا على التشغيل في الوضع المتزامن لعملية واحدة بشكل افتراضي. يتم التعامل مع الطلبات بشكل فردي وتمنع بعضها البعض من التنفيذ حتى تكتمل. هذا هو أحد أسباب عدم ملاءمة الخادم للاستخدام الإنتاجي.

أضاف PHP 7.4 دعمًا للتعامل مع الطلبات المتعددة في نفس الوقت. يعتمد على توفر fork() ولا يعمل على Windows. سيقوم الخادم بتشكيل عامل جديد لخدمة كل طلب وارد عند تمكين هذا الوضع. يمكنك تنشيطه عن طريق تعيين متغير البيئة PHP_CLI_SERVER_WORKERS على عدد العمال الذين تريدهم:

 $ PHP_CLI_SERVER_WORKERS = 8 php -S المضيف المحلي: 8080

لا تزال هذه الوظيفة تجريبية في PHP 8.1.

ملخص

يحتوي PHP على خادم ويب مدمج يعد طريقة ملائمة لاختبار تطبيقاتك وكشف محتوى نظام الملفات المحلي بسرعة على شبكتك المحلية. وهو يدعم تنفيذ نصوص PHP ، والتوجيه الشامل ، والملفات الثابتة مع أنواع MIME الأكثر شيوعًا.

على الرغم من أن الخادم يدعم الآن وضع تفرع اختياري ، إلا أنه لا يُنصح باستخدامه في الإنتاج. الغرض منه هو أن يكون أداة مساعدة في التنمية ويفتقر إلى ميزات التخصيص والأمان التي ستحتاجها لعمليات النشر العامة الخاصة بك. حيث تتفوق كبديل خفيف الوزن ومتكامل لمنصات التطوير التقليدية مثل WAMP و XAMPP وحاويات Docker.