PHP Conference Nagoya 2025

Kurulum

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.

  1. Apache 2'yi çok evreli bir MPM ile üretim ortamında neden kullanmamalıyım?
  2. Unix/Windows: php.ini dosyamın yerini bulamıyorum!
  3. 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?
  4. Unix: PHP'yi RPM'leri kullanarak kurdum, fakat Apache, PHP sayfalarını işlemiyor! Ne yapmalıyım?
  5. 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?
  6. Unix/Windows: PHP'yi kurdum, fakat PHP betiğine tarayıcımla erişmeye çalıştığımda boş bir sayfa alıyorum.
  7. Unix/Windows: PHP'yi kurdum, fakat PHP betiğine tarayıcımla erişmeye çalıştığımda sunucudan 500 hatası alıyorum.
  8. 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
  9. 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:
  10. Windows: Tüm talimatları izlememe rağmen PHP ile IIS'yi birlikte çalıştıramadım!
  11. 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..
  12. 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.
  13. PHP dizinimi Windows'ta PATH değişkenine nasıl eklerim?
  14. Windows üzerinde PHP'nin php.ini dosyasını kullanabilmesini nasıl sağlarım?
  15. PHP ile Apache içerik dili uzlaşımını kullanmak (MultiViews seçeneği) mümkün mü?
  16. PHP'nin GET ve POST istekleri dışında istekleri işleme sokmaması sağlanabilir mi?
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().

PHP dizinimi Windows'ta PATH değişkenine nasıl eklerim?

Windows:

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

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.

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>

add a note

User Contributed Notes 5 notes

up
19
per dot fikse at ipj dot no
19 years ago
Installing PHP 4 or 5 on Windows Server 2003 x64 results in http error 505. This is not a PHP bug. It is due to running a 32-bit ISAPI DLL under the 64-bit version of IIS 6, as documented here: http://support.microsoft.com/?id=895976

Solution: Flip the Metabase flag for Enable32bitAppOnWin64 as described in http://support.microsoft.com/?id=894435 ,
like this: CSCRIPT ADSUTIL.VBS SET W3SVC/AppPools/Enable32bitAppOnWin64 1

(Alternatively with full path: cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1)
up
8
charleslynch at xybersoftware dot com
16 years ago
One final note to the message below if you are getting the message about not having rights to execute...You need to use IIS right click on the website and choose 'Properties/Home Directory' then on the 'Execute Permissions' combo box you need to choose 'Scripts only'...Click ok...another dialog may appear asking which directories to apply the action too...choose any directories that you intend on using php in and click ok...It should work now...
up
9
emzeperx at emzeper dot hu
18 years ago
You do not have to restart the whole system make effect of changing the PATH env var. For me (sbs2003) worked automatically.
on older systems you can use

set $Path=%path%;c:\php

command to extend immediately the path var.
up
5
Curtis
17 years ago
I have some additional troubleshooting tips for 53.7, which deals with getting a blank screen on your browser when running a PHP script.

In addition to server misconfiguration, it may also be that PHP isn't configured to output errors to the browser, which is the case if you or your host uses a more secure php.ini. If this is the case, you need to find out where errors are being logged to find out if any errors are preventing normal output from being delivered to the client.

If you have access to php.ini, check the 'display_errors' directive, which is, by default, located under the 'error_reporting' directive. It's helpful to have 'display_errors' on during debugging phases, but best to have it off in production environments.

Related functions: http://php.net/ini_set | http://php.net/error_reporting | http://php.net/error_log
up
4
joerg at fenin dot de
17 years ago
To limit HTTP Request Methods on the Apache server running PHP you should use mod_rewrite or mod_security instead of LimitExcept, to give you more control over the handling of such http errors. Can go in .htaccess file or httpd.conf

# mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$
RewriteRule .* - [F,L]
</IfModule>

# mod_security
<IfModule mod_security.c>
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD|POST)$" "deny,log,status:403"
</IfModule>

You can use the php request method scanner at askapache to see exactly how your server deals with various request methods, and check that your server is configured properly..

http://www.askapache.com/online-tools/request-method-scanner/
To Top