Cara Cepat Menguji Situs Web Dengan Server Web Bawaan PHP
Diterbitkan: 2022-08-11Perlu memulai server web dengan cepat untuk menguji aplikasi PHP? Interpreter PHP memiliki satu built-in! Anda dapat menggunakan ini untuk memeriksa pekerjaan Anda dengan cepat tanpa menjalankan Apache, NGINX, atau solusi containerization.
Server terintegrasi PHP mendapat perhatian yang relatif sedikit tetapi cukup kuat untuk tujuan pengembangan. Dalam panduan ini, kami akan menunjukkan bagaimana Anda dapat menggunakannya sebagai alternatif server mikro lain seperti SimpleHTTPServer Python atau paket http-server npm, yang keduanya tidak dapat mengeksekusi skrip PHP.
Menggunakan Server Bawaan
Server built-in adalah mekanisme kenyamanan untuk membantu Anda menguji situs PHP di lingkungan yang tidak memiliki server HTTP yang lengkap. Ini tersedia dalam PHP 5.4 dan semua versi yang lebih baru. Anda dapat menjalankannya langsung dari direktori kerja Anda tanpa harus menyiapkan host virtual terlebih dahulu.
Sebelum menggunakan server, berhati-hatilah bahwa itu dirancang untuk penggunaan pengembangan saja. Dokumentasi PHP secara eksplisit memperingatkan agar tidak menggunakan server ini di depan aplikasi produksi. Tidak cukup aman untuk diekspos di jaringan yang dapat diakses publik.
Memulai Server
Server dimulai dengan meneruskan flag -S
ke php
yang dapat dieksekusi:
$php -S localhost:8080 [Jumat 10 Jun 16:00:00 2022] Server Pengembangan PHP 8.1.5 (http://localhost:8080) dimulai
Argumen yang diberikan pada perintah menentukan alamat mendengarkan server. Kami telah menggunakan port 8080
pada localhost
pada contoh di atas. Sekarang Anda dapat mengunjungi http://localhost:8080
di browser web Anda untuk mengakses konten di direktori kerja Anda. Skrip PHP apa pun akan dieksekusi secara otomatis saat Anda memintanya.
Anda dapat melayani jalur yang berada di luar direktori kerja Anda dengan menyetel tanda -t
saat Anda memulai server:
$php -S localhost:8080 -t /home/$USER/public_docs
Akar dokumen sekarang akan menjadi /public_docs
di dalam folder rumah Anda.
Biarkan jendela terminal Anda terbuka saat Anda menggunakan server web. Tekan Ctrl+C untuk mematikan proses setelah Anda selesai menguji situs Anda. PHP akan mencatat setiap permintaan yang masuk ke jendela terminal Anda, termasuk metode URI dan HTTP. Setiap kesalahan PHP yang tidak tertangkap akan muncul di log juga.
Mengaktifkan Akses Jarak Jauh
Mendengarkan di localhost
tidak akan mengizinkan koneksi masuk dari perangkat lain di jaringan Anda. Anda dapat mengizinkan akses jarak jauh dengan mengikat ke 0.0.0.0
sebagai gantinya:
$php -S 0.0.0.0:8080
Ingat bahwa server tidak dikeraskan untuk penggunaan produksi dan tidak boleh diekspos ke publik. Hanya izinkan akses jarak jauh jika benar-benar diperlukan, seperti saat menguji fitur tertentu di perangkat seluler. Pastikan port yang Anda gunakan tidak terbuka untuk internet.
Minta Pencocokan Pengganti
PHP akan mencari file index.php
dan index.html
di root dokumen aktif ketika permintaan masuk tidak memiliki komponen URI. Jika tidak satu pun dari file ini ada, server akan terus bergerak ke atas pohon direktori, mencari indeks di salah satu induk root dokumen Anda. Ini berarti Anda dapat secara tidak sengaja menyajikan konten yang berada di luar direktori yang telah Anda tentukan. Status 404 Tidak Ditemukan akan dikeluarkan ketika puncak pohon tercapai tanpa file indeks ditemukan.
Permintaan yang menyertakan URI (seperti /file
) harus sama persis dengan file statis di root dokumen. Jika tidak, 404 akan dikembalikan. PHP secara otomatis menyetel header respons Content-Type
ke tipe MIME dari file yang disajikan untuk ekstensi file paling populer.
Menggunakan Skrip Router
Anda dapat secara opsional mengonfigurasi server web untuk memanggil skrip pada setiap permintaan. Ini memungkinkan Anda menggunakan pengontrol depan aplikasi Anda untuk melakukan perutean dinamis lanjutan.
Fungsionalitas router diaktifkan dengan memberikan nama file PHP pada baris perintah saat Anda memulai server:
$php -S localhost:8080 router.php
PHP sekarang akan menggunakan router.php
untuk menangani setiap permintaan yang masuk. Anda dapat mengarahkan pengguna ke titik yang sesuai di aplikasi Anda dengan memeriksa URI permintaan:
if ( $_SERVER [ "REQUEST_URI" ] === "/dashboard" ) { require_once ( "dashboard.php" ) ; } else if ( $_SERVER [ "REQUEST_URI" ] === "/profil" ) { require_once ( "profil.php" ) ; } lain { membutuhkan_once ( " 404.php " ) ; }
Output yang dihasilkan oleh skrip router Anda akan menjadi respons yang dikirim kembali ke klien. Pengecualian adalah jika skrip mengembalikan false
: dalam hal ini, PHP akan mundur untuk mengembalikan file statis yang cocok dengan URI permintaan asli.
if ( str_starts_with ( $_SERVER [ "REQUEST_URI" ] , "/api" ) ) { // Rute ke titik akhir API yang benar // ... } lain { // Melayani rute lain secara statis kembali salah ; }
Mendeteksi Server Bawaan Dari Kode PHP Anda
Kode PHP Anda dapat mendeteksi apakah sedang dipanggil oleh server web bawaan dengan memeriksa nama antarmuka yang aktif. Fungsi php_sapi_name()
menyediakan nilai ini. Ini akan diatur ke cli-server
ketika skrip dipanggil oleh komponen server terintegrasi.
if ( php_sapi_name ( ) === "cli-server" ) { aktifkan_pengembangan_mode ( ) ; }
Menangani Beberapa Permintaan Secara Bersamaan
Server default untuk berjalan dalam mode sinkron proses tunggal secara default. Permintaan ditangani satu per satu dan saling memblokir agar tidak dieksekusi sampai selesai. Ini adalah salah satu alasan mengapa server tidak cocok untuk penggunaan produksi.
PHP 7.4 menambahkan dukungan untuk menangani beberapa permintaan secara bersamaan. Itu bergantung pada ketersediaan fork()
dan tidak berfungsi di Windows. Server akan memotong pekerja baru untuk melayani setiap permintaan yang masuk saat mode ini diaktifkan. Anda dapat mengaktifkannya dengan mengatur variabel lingkungan PHP_CLI_SERVER_WORKERS
ke jumlah pekerja yang Anda inginkan:
$ PHP_CLI_SERVER_WORKERS=8 php -S localhost:8080
Fungsionalitas ini masih ditandai sebagai eksperimental di PHP 8.1.
Ringkasan
PHP memiliki server web built-in yang merupakan cara mudah untuk menguji aplikasi Anda dan dengan cepat mengekspos konten sistem file lokal di jaringan lokal Anda. Ini mendukung eksekusi skrip PHP, perutean catch-all, dan file statis dengan tipe MIME paling umum.
Meskipun server sekarang mendukung mode forking opsional, tidak disarankan untuk menggunakannya dalam produksi. Ini dimaksudkan sebagai bantuan pengembangan dan tidak memiliki fitur kustomisasi dan keamanan yang Anda perlukan untuk penerapan publik Anda. Keunggulannya adalah sebagai alternatif yang ringan dan terintegrasi untuk platform pengembangan konvensional seperti wadah WAMP, XAMPP, dan Docker.