PHP'nin Yerleşik Web Sunucusu ile Web Sitelerini Hızla Test Etme
Yayınlanan: 2022-08-11Bir PHP uygulamasını test etmek için hızlı bir şekilde bir web sunucusu başlatmanız mı gerekiyor? PHP yorumlayıcısında yerleşik bir tane var! Bunu, Apache, NGINX veya bir konteynerleştirme çözümü çalıştırmadan işinizi hızla denetlemek için kullanabilirsiniz.
PHP'nin entegre sunucusu nispeten daha az ilgi görür ancak geliştirme amaçları için oldukça güçlüdür. Bu kılavuzda, Python'un SimpleHTTPServer veya http-server npm paketi gibi, ikisi de PHP komut dosyalarını çalıştıramayan diğer mikro sunuculara alternatif olarak nasıl kullanabileceğinizi göstereceğiz.
Yerleşik Sunucuyu Kullanma
Yerleşik sunucu, tam teşekküllü bir HTTP sunucusu olmayan ortamlarda PHP sitelerini test etmenize yardımcı olacak bir kolaylık mekanizmasıdır. PHP 5.4 ve sonraki tüm sürümlerde mevcuttur. Önce sanal bir ana bilgisayar kurmak zorunda kalmadan doğrudan çalışma dizininizden çalıştırabilirsiniz.
Sunucuyu kullanmadan önce, yalnızca geliştirme kullanımı için tasarlandığına dikkat edin. PHP belgeleri, bu sunucunun üretim uygulamalarının önüne yerleştirilmesine karşı açıkça uyarır. Herkese açık ağlarda açığa çıkmak için yeterince güvenli değil.
Sunucuyu Başlatmak
Sunucu, yürütülebilir php
dosyasına -S
bayrağı geçirilerek başlatılır:
$ php -S yerel ana bilgisayar:8080 [Fri Jun 10 16:00:00 2022] PHP 8.1.5 Geliştirme Sunucusu (http://localhost:8080) başladı
Komuta verilen argüman, sunucunun dinleme adresini belirtir. Yukarıdaki örnekte 8080
numaralı bağlantı noktasını localhost
üzerinde kullandık. Artık çalışma dizininizdeki içeriğe erişmek için web tarayıcınızda http://localhost:8080
adresini ziyaret edebilirsiniz. Herhangi bir PHP betiği, talep ettiğinizde otomatik olarak yürütülür.
Sunucuyu başlattığınızda -t
bayrağını ayarlayarak çalışma dizininizin dışında bir yol sunabilirsiniz:
$ php -S localhost:8080 -t /home/$USER/public_docs
Belge kökü artık ana klasörünüzde /public_docs
olacaktır.
Web sunucusunu kullanırken terminal pencerenizi açık tutun. Sitenizi test etmeyi bitirdikten sonra işlemi sonlandırmak için Ctrl+C tuşlarına basın. PHP, URI ve HTTP yöntemi de dahil olmak üzere, gelen her isteği terminal pencerenize kaydeder. Yakalanmayan PHP hataları da günlüklerde görünecektir.
Uzaktan Erişimi Etkinleştirme
localhost
dinlemek, ağınızdaki diğer cihazlardan gelen bağlantılara izin vermez. Bunun yerine 0.0.0.0
bağlayarak uzaktan erişime izin verebilirsiniz:
$ php -S 0.0.0.0:8080
Sunucunun üretim kullanımı için sağlamlaştırılmadığını ve herkese açık olarak ifşa edilmemesi gerektiğini unutmayın. Uzaktan erişime yalnızca, örneğin bir mobil cihazda belirli bir özelliği test ederken olduğu gibi kesinlikle gerekli olduğunda izin verin. Kullandığınız bağlantı noktasının internete açık olmadığından emin olun.
Yedek Eşleştirme İsteği
PHP, gelen istekte bir URI bileşeni bulunmadığında aktif belge kökünde index.php
ve index.html
dosyalarını arayacaktır. Bu dosyalardan hiçbiri mevcut değilse, sunucu, belge kökünüzün üst öğelerinden birinde bir dizin arayarak dizin ağacında yükselmeye devam edecektir. Bu, belirttiğiniz dizinin dışında kalan içeriği istemeden sunabileceğiniz anlamına gelir. Bir dizin dosyası bulunmadan ağacın tepesine ulaşıldığında bir 404 Bulunamadı durumu verilecektir.
URI ( /file
gibi) içeren istekler, belge kökündeki statik bir dosya ile tam olarak eşleştirilmelidir. Aksi takdirde bir 404 iade edilecektir. PHP, en popüler dosya uzantıları için Content-Type
yanıt başlığını otomatik olarak sunulan dosyanın MIME türüne ayarlar.
Yönlendirici Komut Dosyası Kullanma
İsteğe bağlı olarak web sunucusunu her istekte bir komut dosyası çağıracak şekilde yapılandırabilirsiniz. Bu, gelişmiş dinamik yönlendirme gerçekleştirmek için uygulamanızın ön denetleyicisini kullanmanızı sağlar.
Yönlendirici işlevi, sunucuyu başlattığınızda komut satırında bir PHP dosya adı sağlayarak etkinleştirilir:
$ php -S localhost:8080 router.php
PHP artık gelen her isteği işlemek için router.php
kullanacak. İstek URI'sini inceleyerek kullanıcıları uygulamanızdaki uygun noktaya yönlendirebilirsiniz:
if ( $_SERVER [ "REQUEST_URI" ] === "/dashboard" ) { require_once ( "dashboard.php" ) ; } else if ( $_SERVER [ "REQUEST_URI" ] === "/profile" ) { require_once ( "profil.php" ) ; } başka { require_once ( "404.php" ) ; }
Yönlendirici komut dosyanız tarafından üretilen çıktı, istemciye geri gönderilen yanıt olacaktır. Komut dosyasının false
döndürmesi bir istisnadır: bu durumda PHP, orijinal istek URI'si ile eşleşen statik dosyayı döndürmeye geri döner.
if ( str_starts_with ( $_SERVER [ "REQUEST_URI" ] , "/api" ) ) { // Doğru API uç noktasına yönlendir // ... } başka { // Diğer rotaları statik olarak sunun yanlış döndür ; }
PHP Kodunuzdan Yerleşik Sunucuyu Algılama
PHP kodunuz, etkin arabirim adını inceleyerek yerleşik web sunucusu tarafından çağrıldığını algılayabilir. php_sapi_name()
işlevi bu değeri sağlar. Komut dosyası tümleşik sunucu bileşeni tarafından çağrıldığında cli-server
olarak ayarlanır.
if ( php_sapi_name ( ) === "cli-server" ) { enable_development_mode ( ) ; }
Aynı Anda Birden Fazla İsteği İşleme
Sunucu varsayılan olarak tek işlemli eşzamanlı modda çalışır. İstekler ayrı ayrı ele alınır ve tamamlanana kadar birbirlerinin yürütülmesini engeller. Bu, sunucunun üretim kullanımına uygun olmamasının nedenlerinden biridir.
PHP 7.4, aynı anda birden çok isteği işlemek için destek ekledi. fork()
kullanılabilirliğine dayanır ve Windows'ta çalışmaz. Sunucu, bu mod etkinleştirildiğinde, gelen her isteği yerine getirmesi için yeni bir çalışanı çatallayacaktır. PHP_CLI_SERVER_WORKERS
ortam değişkenini istediğiniz işçi sayısına ayarlayarak etkinleştirebilirsiniz:
$ PHP_CLI_SERVER_WORKERS=8 php -S localhost:8080
Bu işlevsellik, PHP 8.1'de hala deneysel olarak işaretlenmiştir.
Özet
PHP, uygulamalarınızı test etmenin ve yerel ağınızda yerel dosya sistemi içeriğini hızlı bir şekilde açığa çıkarmanın uygun bir yolu olan yerleşik bir web sunucusuna sahiptir. PHP komut dosyası yürütmesini, tümünü yakalama yönlendirmesini ve en yaygın MIME türleriyle statik dosyaları destekler.
Sunucu artık isteğe bağlı çatallama modunu desteklese de, üretimde kullanılması önerilmez. Bir geliştirme yardımı olarak tasarlanmıştır ve genel dağıtımlarınız için ihtiyaç duyacağınız özelleştirme ve güvenlik özelliklerinden yoksundur. WAMP, XAMPP ve Docker kapsayıcıları gibi geleneksel geliştirme platformlarına hafif ve entegre bir alternatif olarak öne çıkıyor.