Yerleşik HTTP sunucusu
Uyarı
Bu HTTP sunucusu uygulama geliştirmeye yardımcı olmak üzere tasarlanmıştır.
Ayrıca, denetimli bir ortam olarak uygulamaların denenmesi amacıyla da
kullanılabilir. Herşeyiyle eksiksiz bir HTTP sunucusu olarak
tasarlanmamıştır. Halka açık ağlarda kullanılmamalıdır.
CLI SAPI yerleşik bir HTTP sunucusu içerir.
Bu HTTP sunucusu tek evreli bir süreç çalıştırır. Dolayısıyla, PHP
uygulamaları istek engellendiği zaman yavaşlayıp duracaktır.
İstenen adres PHP'nin başlatıldığı çalışma dizinine göre sunulur. Bu kök
dizin PHP çalıştırılırken -t seçeneği kullanılarak değiştirlebilir. İstek
bir dosya belirtmiyorsa belirtilen dizindeki index.php veya index.html
dosyası sunulur. Bu iki dosya da mevcut değilse index.php veya index.html araması üst dizinde devam eder ve bu belge kök dizinine ulaşılıncaya dek devam eder. Bulunduğu takdirde, döndürülür ve URI'nin devamına $_SERVER['PATH_INFO'] atanır. Aksi takdirde 404 yanıt kodu döndürülür.
İstenen adres bir dosya belirtmezse, belirtilen dizindeki index.php
veya index.html gösterilir. Bu dosyalar da mevcut değilse, bir 404 yanıtı
döndürülür.
Aşağıdaki uzantılara sahip dosyalar için standart MIME türleri döndürülür:
.3gp
, .apk
, .avi
, .bmp
, .css
, .csv
, .doc
, .docx
, .flac
, .gif
, .gz
, .gzip
, .htm
, .html
, .ics
, .jpe
, .jpeg
, .jpg
, .js
, .kml
, .kmz
, .m4a
, .mov
, .mp3
, .mp4
, .mpeg
, .mpg
, .odp
, .ods
, .odt
, .oga
, .ogg
, .ogv
, .pdf
, .png
, .pps
, .pptx
, .qt
, .svg
, .swf
, .tar
, .text
, .tif
, .txt
, .wav
, .webm
, .wmv
, .xls
, .xlsx
, .xml
, .xsl
, .xsd
, .zip
PHP 7.4.0'dan itibaren, yerleşik HTTP sunucusu, birden fazla eşzamanlı
istek gerektiren kodu sınamak için birden fazla süreci çatallamak üzere
yapılandırılabilir. Sunucu başlatılmadan önce
PHP_CLI_SERVER_WORKERS ortam değişkeni istenen süreç
sayısına ayarlanmalıdır.
Bilginize:
Bu özellik Windows'ta desteklenmez.
Uyarı
Bu deneysel özellik üretim ortamında kullanmak için tasarlanmamıştır. Genelde yerleşik HTTP sunucuları üretim ortamında kullanmak için tasarlanmaz.
Örnek 1 - HTTP sunucusunun başlatılması
$ cd ~/public_html
$ php -S localhost:8000
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit
http://localhost:8000/ ve
http://localhost:8000/myscript.html isteklerinden sonra uçbirim çıktısı
şuna benzer:
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read
[Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read
[Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read
[Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read
[Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read
PHP 7.4.0'dan önce, sembolik bağlantılı statik kaynaklara, yönlendirici
betiği bunları işlemediği sürece Windows'ta erişilemezdi.
Örnek 2 - Belge kök dizini belirterek başlatma
$ cd ~/public_html
$ php -S localhost:8000 -t foo/
PHP 5.4.0 Development Server started at Thu Jul 21 10:50:26 2011
Listening on localhost:8000
Document root is /home/me/public_html/foo
Press Ctrl-C to quit
Örnek 3 - Yönlendirici betik belirtmek
Görüntü isteklerinde görüntüler gösterildiği halde bir HTML dosyası
istendiğinde "Welcome to PHP" göstermek:
<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
return false; // kaynak olduğu gibi gösterilir.
} else {
echo "<p>Welcome to PHP</p>";
}
?>
$ php -S localhost:8000 router.php
Örnek 4 - CLI Sunucusunda kullanmadan önce betiği sınamak
Bir yönlendirici betiği geliştirici CLI sunucusunda kullandıktan sonra asıl
HTTP sunucusunda yeniden kullanmak:
<?php
// router.php
if (php_sapi_name() == 'cli-server') {
/* statik varlıkları yönlendir ve false ile dön */
}
/* normal index.php işlemleri ile devam et */
?>
$ php -S localhost:8000 router.php
Örnek 5 - Desteklenmeyen Dosya Türlerinin İşlenmesi
MIME türleri CLI sunucusu tarafından işlenmeyen statik kaynakları
sunmanız gerekirse:
<?php
// router.php
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
if ($path["extension"] == "el") {
header("Content-Type: text/x-script.elisp");
readfile($_SERVER["SCRIPT_FILENAME"]);
}
else {
return FALSE;
}
?>
$ php -S localhost:8000 router.php
Örnek 6 - CLI sunucusuna uzak makinelerden erişim
HTTP sunucusuna port 8000'den şöyle erişebilirsiniz:
Uyarı
Yerleşik HTTP sunucusu internette kullanılmamalıdır.