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.
PHP'yi kurmak için Yapılandırma ve Kurulum bölümündeki talimatları izleyin.
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.
Ö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
--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ı.
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 » http://bugs.php.net/ 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 özdevinimli olarak gerçekleşir.
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
AddType application/x-httpd-php .php
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.
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.
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.
[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.
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:
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.
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.
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 7, XP, Vista, 2008, 2012 ve üstünde:
Denetim Masasına gidip Sistem simgesini açın (Başlat → Denetim Masası → Sistem).
Gelişmiş sekmesine gidin.
'Ortam Değişkenleri' düğmesine tıklayın.
'Sistem Değişkenleri' panosuna bakın.
Path girdisini bulun (bulmak için listeyi kaydırmanız gerekebilir)
Path girdisine çift tıklayın.
Satırın sonuna bir ';' koyup PHP dizini ekleyin (örnek: ;C:\php).
Tamam düğmesine tıklayın.
Windows 98/Me sistemlerinde ise autoexec.bat dosyanızı düzenlemeniz gerekecektir:
Notepad'i açın (Başlat → Çalıştır ve notepad yazıp enter tuşuna basın)
C:\autoexec.bat dosyasını açın.
PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... satırını bulup satırın sonuna şunu ekleyin: ;C:\php.
Dosyayı kaydedin ve bilgisayarınızı yeniden başlatın.
Bilginize: PATH değişkeninde yaptığınız değişikliklerin uygulanmasını istiyorsanız yukarıdaki işlemleri yaptıktan sonra bilgisayarınızı yeniden başlatmayı unutmayınız.
PHP kılavuzunda, dosyaların Windows sistem dizinine kopyalanması salık verilebilir. Bunun sebebi bu dizinin (C:\Windows, C:\WINNT, vs.) öntanımlı olarak sistem PATH değişkeninde bulunmasıdır. Windows sistem dizinine dosya kopyalamak sorunlara yol açması sebebiyle uzun zamandır önerilmemektedir.
Bunu yapmanın çeşitli yolları vardır. Apache kullanıyorsanız kurulumla ilgili talimatları izleyin (Apache 1, Apache 2), aksi takdirde PHPRC ortam değişkenini atamanız gerekecek:
Windows üzerinde:
Denetim Masasına gidip Sistem simgesini açın (Başlat → Ayarlar → Denetim Masası → Sistem veya sadece Başlat → Denetim Masası → Sistem).
Gelişmiş sekmesine gidin.
'Ortam Değişkenleri' düğmesine tıklayın.
'Sistem Değişkenleri' panosuna bakın.
Click on 'Yeni' düğmesine tıklayın ve değişken ismi olarak 'PHPRC', değer olarak da php.ini dosyanızın bulunduğu yeri yazın (örnek: C:\php)
Tamam düğmesine tıklayın ve bilgisayarınızı yeniden başlatın.
Windows 98/Me sistemlerinde ise autoexec.bat dosyanızı düzenlemeniz gerekecektir:
Notepad'i açın (Başlat → Çalıştır ve notepad yazıp enter tuşuna basın)
C:\autoexec.bat dosyasını açın.
Dosyanın sonuna şu satırı ekleyin: set PHPRC=C:\php (burada C:\php yerine php.ini dosyanızın bulunduğu dizini yazın). Belirttiğiniz dizinin boşluk karakteri içermemesine dikkat ediniz. Örneğin, PHP'yi C:\Program Files\PHP altına kurduysanız bunu C:\PROGRA~1\PHP şeklinde belirtmelisiniz.
Dosyayı kaydedin ve bilgisayarınızı yeniden başlatın.
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
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>