PHP ile program yazanlar apache sunucusuna ve Apache'ye ait mpm_prefork modülüne kulak aşinalıkları vardır. Gerçi modül diyoruz ama an itibari ile Ubuntu'da prefork modülünü yüklediğimizde /usr/sbin içindeki ana çalıştırılabilir dosya olan apache2'nin değiştiğini gördüm. Windows'ta bu yapıyı test etmedim. Windows'ta çalışma kipleri arasında geçiş nasıl sağlanıyor bir malumatım yok.
Sunucu taraflı dil olarak PHP ve sunucu olarak Apache kullanıyorsanız. PHP dilinin getirmiş olduğu çeşitli sunucu taraflı kısıtlamaların bulunduğunu söylemeliyim. Tabi bu PHP geliştiricilerini üzmesin. PHP oldukça sade ve hızlı bir dil. Büyük destekçileri olduğunu biliyorum. :)
Konunun evveliyatına deyinirsek; Daha önceki teknoloji olan CGI (Common Gateway Interface)'da benzer bir metod ile işlem yapıyordu. CGI ile yazılan uygulamaları hep harika ve daha zevkli bulmuşumdur. :) Şahsi kanaatim bir web programcısı diğer dillere geçmeden öncelikle CGI ile program yazmalıdır. Bu web uygulamalarının çalışma mantığı hakkında olabildiğince fikir sahibi olmamımızı sağlar.
Uç birim/Konsol uygulamaları ya da diğer bir değişle siyah ekranlarımız için yazdığımız uygulamaların çalışma mekaniği aynıdır. Konsol uygulamaları Standart Çıktı (Standart Output) ve Standart Girdi (Standart Input) ile etkileşirler. Ekrana yazacağımız şeyleri standart çıktıya aktarırız. Ekrandan okunan şeyler ise standart girdiden okunur. Sistemde küresel bir değişken varsa bunlar da çevresel değişkenler sayesinde elde edilir.
<?php echo(readline("Yazı: ")); ?>
Yukarıdaki örnek standart girdiden okuyup, standart çıktıya yazan bir PHP programıdır. Uzun lafın kısası CGI bu tarz uygulamalar için bir arabirim sunar. Web sunucu ile girdi ve çıktı aygıtları arasında. Siz HTTP üst bilgi başlıkları (Header) dahil olmak üzere tüm sisteme hakim olursunuz.
Apache üzerinde PHP CGI kipinde çalışabildiği gibi, mod_php üzerinde de çalışabilmekte: PHP'i CGI olarak çalıştırmak istersek:
.htaccess dosyasına;
Allow from All
Options ExecCGI
AddHandler cgi-script .php
test.php dosyasına:
#!/usr/bin/php
<?php
echo("Content-type: text/plain\n\n");
echo("merhaba");
?>
Dosya CLI interpreter tarafından işleneceğinden çalıştırma yetkilerine sahip olması gereklidir. Çocuk süreç alt bir süreç daha oluşturup yorumlayıcıyı çağırır.
root 15016 0.0 0.3 33908 3124 ? Rs May01 0:00 /usr/sbin/apache2 -k start
www-data 15021 0.0 0.1 34528 1784 ? S May01 0:00 \_ /usr/sbin/apache2 -k start
www-data 27404 0.5 0.4 31164 4596 ? R May01 0:00 | \_ /usr/bin/php /var/www/test.php
PHP gerek mod_php ile çalışsın gerekse mod_cgi ile temeldeki Apache çalışma sistematiği mpm_prefork modülü üzerine olacaktır. Bu her talep için ayrı bir çocuk sürecin hizmet etmesi manasına gelir. Fakat mod_php ile çalışırken ek bir çocuk süreç daha olmayacağından ve çıktı/girdi aygıtlarını kullanmayacağından uygulamanın daha hızlı çalışacağını söyleyebiliriz.
|