Bu bölüm, kurulum sırasında sık rastlanan sorunlarla ilgili sorular ve
çözümlerden derlenmiştir. PHP hemen hemen tüm işletim sistemlerine
kurulabilmekte ve hemen her HTTP sunucusu ile çalışabilmektedir.
-
Apache 2'yi çok evreli bir MPM ile üretim ortamında neden
kullanmamalıyım?
-
PHP üçüncü parti kütüphaneler kullanılarak muhtelif HTTP uygulamaları
geliştirmeyi sağlayan bir yapıştırıcıdır. PHP'nin esnekliği ve gücü
üzerinde çalıştığı platformun gücü ve kararlılığı ile sınırlıdır.
Çalışmak için bir işletim sistemine, HTTP sunucusuna ve 3. parti
modüllere ihtiyaç duyar ve bunlar arasında bir yapıştırıcı gibi
davranır. Bunlardan biri çalışmasını durdurursa sorunu saptayıp çabucak
çözümlemeniz gerekir. PHP'nin üzerinde çalıştığı ortamı, birbirlerinden
bağımsız çalışma evreleri, tamamen ayrı bellek bölümleri ve her istek
için ayrı bir çalışma alanı ile daha da karmaşıklaştırırsanız, PHP'nin
hamuru bir bulamaca dönüşebilir.
Çok evreli bir MPM kullanmak isterseniz, PHP'nin kendi bellek uzayında
çalışmasını sağlayan FastCGI yapılandırması bir çözüm olabilir.
-
Unix/Windows: php.ini dosyamın yerini bulamıyorum!
-
Öntanımlı olarak Unix üzerindeki yeri
/usr/local/lib dizinidir. Çoğu kişi bu dosyanın
yerini derleme sırasında --with-config-file-path
seçeneğini kullanarak değiştirmektedir. Siz de isterseniz dosyanın
yerini şöyle değiştirebilirsiniz:
--with-config-file-path=/etc
Böylece kaynak paketindeki php.ini-development dosyası
/etc/php.ini olarak kurulur ve üzerinde
istediğiniz değişiklikleri yapabilirsiniz.
--with-config-file-scan-dir=YOL
Windows'ta php.ini dosyasının öntanımlı yeri Windows dizinidir.
Apache HTTP sunucusu kullanıyorsanız php.ini önce Apache'nin kurulum
dizininde aranır (örn, c:\program files\apache
group\apache). Bu yer aynı makinede çalışan farklı Apache
sürümleri için farklı yerlerde olabilir.
Ayrıca bakınız:
Yapılandırma Dosyası.
-
Unix: PHP'yi kurdum, fakat her belge yükleyişimde 'Document Contains No
Data'! (Belge hiç veri içermiyor!) şeklinde bir ileti alıyorum. Ne
yapmalıyım?
-
Muhtemelen PHP'nin bazı sorunları var ve core dosyası dökümlüyor
olmalı. Bu durumda, sunucunuzun günlük kayıt dosyalarına bakıp sorunu
küçük bir deney ortamında üretmeye çalışın. 'gdb' kullanmayı
biliyorsanız, hata raporunuzda sorun hakkında geliştiricilere çok
yardımcı olacak bir hata izleme çıktısı sağlayabilirsiniz. PHP'yi bir
Apache modülü olarak kullanıyorsanız şunları yapmayı deneyin:
-
httpd sürecini durdurun
-
gdb httpd
-
httpd süreçlerini durdurun
-
> run -X -f /bir/yol/httpd.conf
-
Ardından soruna sebep olan adresi tarayıcınızla açın.
-
> run -X -f /bir/yol/httpd.conf
-
Bir core dosyası dökümleniyorsa gdb size bunun sebebini
söyleyecektir.
-
Şunu yazın: bt
-
Hata raporunuza bu geriye doğru hata izleme bilgisini eklemeli ve
raporu » https://github.com/php/php-src/issues
adresinden göndermelisiniz.
Eğer betiğinizde düzenli ifade işlevlerini
(preg_match() ve benzerleri) kullanıyorsanız, PHP'yi
ve Apache'yi aynı düzenli ifade paketiyle derlediğinizden emin
olmalısınız. PHP ve Apache 1.3.x için bu otomatik olarak gerçekleşir.
-
Unix: PHP'yi RPM'leri kullanarak kurdum, fakat Apache, PHP sayfalarını
işlemiyor! Ne yapmalıyım?
-
Hem Apache hem de PHP'yi RPM paketlerinden kurduğunuz varsayımıyla
httpd.conf dosyanıza aşağıdaki satırların tamamını veya bir kısmını
ekleyin veya başlarındaki # imlerini silip o satırları etkin kılın:
# Ek Modüller
AddModule mod_php.c
AddModule mod_perl.c
# Ek Modüller
LoadModule php_module modules/mod_php.so
LoadModule php5_module modules/libphp5.so
LoadModule perl_module modules/libperl.so
Ve sunucu genelinde geçerli olacak şekilde veya PHP'nin etkin olacağı
sanal konak bölümünde şu satırı ekleyin:
AddType application/x-httpd-php .php
-
Unix: Apache'yi FrontPage eklenti yamasıyla yamadım ve hemen ardından
PHP çalışmaz hale geldi. PHP, Apache FrontPage eklentileriyle uyumlu
değil mi?
-
PHP, FrontPage eklentileriyle gayet güzel çalışır. Sorun, FrontPage
yamasının PHP'nin de çalıştığı veri yapılarını değiştirmesidir. FP
yamasını uyguladıktan sonra PHP'yi yeniden derleyerek (make clean;
make) sorunu çözebilirsiniz.
-
Unix/Windows: PHP'yi kurdum, fakat PHP betiğine tarayıcımla erişmeye
çalıştığımda boş bir sayfa alıyorum.
-
Tarayıcınıza 'Sayfa kaynağını göster' derseniz PHP betiğinizin kaynak
koduna bakarak sorunun kaynağını bulabilirsiniz. Yani, HTTP sunucusu
betiği yorumlasın diye PHP'ye göndermemiştir. Sunucu yapılandırmasında
birşeyler yanlış gitmiş olabilir. PHP kurulum talimatlarını tekrar
uygulayarak sunucu kurulumunuzu tekrar gözden geçirin.
-
Unix/Windows: PHP'yi kurdum, fakat PHP betiğine tarayıcımla erişmeye
çalıştığımda sunucudan 500 hatası alıyorum.
-
Sunucu PHP'yi çalıştırmaya uğraşırken birşeyler yanlış gitmiş. Hataları
görmek için komut satırından PHP çalıştırılabilirinin (Windows'ta
php.exe) bulunduğu dizine geçip php
-i komutunu verin. Eğer PHP çalışırken bir sorun ortaya
çıkıyorsa ne yapılması gerektiği ile ilgili ipuçları içeren bir hata
iletisi gösterilir. Eğer ekranı dolduran bir dolu HTML kodu alıyorsanız
(bu, phpinfo() işlevinin çıktısıdır) PHP düzgün
çalışıyor demektir. Bu durumda sunucu yapılandırmanızı tekrar gözden
geçirmeniz gerekir.
-
Bazı işletim sistemleri: PHP'yi hatasız kurdum fakat Apache'yi
başlatmak istediğimde tanımsız simge hataları aldım:
[mybox:user /src/php5] root# apachectl configtest
apachectl: /usr/local/apache/bin/httpd Undefined symbols:
_compress
_uncompress
-
Bu sorun PHP'nin kendisi ile değil, MySQL istemci kütüphanesi ile
ilgilidir. Derleme sırasında --with-zlib seçeneğini kullansaydınız bu sorun çıkmayacaktı.
Bu konudan MySQL SSS'sinde de bahsedilmiştir.
-
Windows: PHP'yi kurdum fakat tarayıcımla bir PHP betiğine erişmek
istediğimde şöyle bir hata alıyorum:
cgi error:
The specified CGI application misbehaved by not
returning a complete set of HTTP headers.
The headers it did return are:
-
Hata iletisi PHP'nin hiçbir şey çıktılamadan başarısız olduğu anlamına
gelmektedir. Hataları görmek için komut satırından PHP
çalıştırılabilirinin (Windows'ta php.exe)
bulunduğu dizine geçip php -i komutunu verin. Eğer
PHP çalışırken bir sorun ortaya çıkıyorsa ne yapılması gerektiği ile
ilgili ipuçları içeren bir hata iletisi gösterilir. Eğer ekranı
dolduran bir dolu HTML kodu alıyorsanız (bu,
phpinfo() işlevinin çıktısıdır) PHP düzgün çalışıyor
demektir.
PHP komut satırından düzgün çalışıyorsa betiğe tarayıcınızla tekrar
erişmeyi deneyin. Yine aynı hatayı alıyorsanız sorun şunlardan biri
olabilir:
-
Yüklemeye çalıştığınız PHP betiği, php.exe,
php5ts.dll, php.ini veya PHP eklentileri gibi
bazı dosyaların izinleri anonim internet kullanıcısının
ISUR_<makineadı>
bunlara erişebilmesine izin
vermiyordur.
-
Betik dosyası mevcut değildir (veya belge kök dizinine göre sizin
düşündüğünüz yerde değildir). IIS kullanıyorsanız, İnternet
Hizmetleri Yöneticisinde betik eşlemlerini ayarlarken 'dosya mevcut
mu diye bir bakıver' kutusunu işaretlemek suretiyle bu hatayı
yakalayabilirsiniz. Betik dosyasının mevcut olmaması durumunda sunucu
bu hata yerine bir 404 hatası döndürecektir. IIS kullanmanın size ek
bir yararı daha olacak: Betik dosyanız üzerinde NTLanMan izinlerine
dayalı olarak gerekli kimlik doğrulaması da yapılacaktır.
-
Windows: Tüm talimatları izlememe rağmen PHP ile IIS'yi birlikte
çalıştıramadım!
-
PHP betiğini çalıştıracak kullanıcıların
php.exe'yi çalıştırabilecek izinlere sahip olup
olmadığına bakın! IIS bunun için kurulumda eklenen bir anonim kullanıcı
kullanır. Bu kullanıcının php.exe'yi çalıştıracak
izne sahip olması gerekir. Ayrıca, kimlik doğrulaması gerektiren
kullanıcıların da php.exe'yi çalıştıracak izne
sahip olması gerekir. Ve IIS4'e PHP'nin bir betik yorumlayıcı olduğunu
da belirtmeniz gerekir. Ek olarak, bu SSS'yi de okumanızı
öneririz.
-
PHP'yi IIS, PWS, OmniHTTPD veya Xitami ile CGI olarak çalıştırırken şu
hatayı alıyorum:
Security Alert! PHP CGI
cannot be accessed directly.
.
-
cgi.force_redirect
yönergesine 0
atamalısınız. Öntanımlı değeri
1
olup, php.ini dosyasında bulunduğu satırın
başında bir ;
varsa o noktalı virgülü silmeniz
gerekir.
Öntanımlı değer 1
olduğundan değişikliği doğru
php.ini dosyasında yaptığınızdan %100 emin olmalısınız. Daha
ayrıntılı bilgi için bu
SSS'ye bakınız.
-
Hangi php.ini dosyasının okunduğunu nasıl anlayacağım? Yaptığım
değişikliklerin bir etkisi olmuyor gibi gözüküyor.
-
php.ini dosyanızın PHP tarafından okunduğundan emin olmak için
phpinfo() çağrısı yapmanız gerekir. Sayfanın başına
yakın bir yerlerde hangi dosyanın okunduğu bilgisini
Configuration File (php.ini)
altında görebilirsiniz.
Böylece dosyayı nereye koyacağınızı bilirsiniz. Eğer listede sadece bir
dizin varsa php.ini dosyanızı bu dizine koymalısınız. php.ini
dosyanız listede gösterilen dizinlerden birindeyse okunacak demektir.
Eğer php.ini okunuyor ve siz PHP'yi bir modül olarak
çalıştırıyorsanız php.ini dosyanızda değişiklik yaptıktan sonra HTTP
sunucunuzu yeniden başlatmayı unutmayınız.
Ayrıca bakınız: php_ini_loaded_file().
-
Windows üzerinde PHP'nin php.ini dosyasını kullanabilmesini nasıl
sağlarım?
-
Bunu yapmanın çeşitli yolları vardır. Apache kullanıyorsanız Apache
belgelerine bakın, aksi takdirde PHPRC ortam
değişkenini kullanmalısınız.
-
PHP ile Apache içerik dili uzlaşımını kullanmak (MultiViews seçeneği)
mümkün mü?
-
PHP'yi dosya uzantıları ile ilişkilendirirseniz herşey düzgün çalışır.
Bu SSS'de PHP dosyalarını uzantısız ilişkilendirdiğinizi ve içerik
uzlaşımında PHP dosyalarının uzantılarına bakılmaksızın seçilmesini
istediğinizi varsayacağız. Bu durumda, AddType
application/x-httpd-php .php
yerine şunları yazın:
AddHandler php5-script php
AddType text/html php
Bu çözüm PHP'nin bir modül olarak çalıştığı Apache 1'de
php-script
yakalanmayacağından çalışmayacaktır.
-
PHP'nin GET ve POST istekleri dışında istekleri işleme sokmaması
sağlanabilir mi?
-
Hayır. PHP, CONNECT gibi her istek yöntemiyle çalışabilir. Doğru yanıt
durumu header() ile gönderilebilir. Eğer sadece GET
ve POST yöntemlerinin işleme sokulmasını istiyorsanız bunu Apache
yapılandırmanızda şöyle sağlayabilirsiniz:
<LimitExcept GET POST>
Deny from all
</LimitExcept>