PHP'nin Yerleşik Web Sunucusu ile Web Sitelerini Hızla Test Etme

Yayınlanan: 2022-08-11

PHP logosunu gösteren çizim

Bir 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.