PHP 8.4.2 Released!

Unix sistemler ve Apache 2.x

Bu bölüm Unix sistemlerde PHP'nin Apache 2.x'e kurulumu hakkında bilgiler ve ipuçları içerir.

Uyarı

Apache 2'nin bir hizmet ortamında evreli MPM'lerle kullanımını önerilmemektedir. Bunun yerine Apache 2.0 ve 2.2'de öntanımlı MPM olan Prefork MPM'sini kullanmanızı önerilir. Bunun sebebini SSS altında Apache ve evreli MPM'ler başlığı altında bulunabilir.

Apache 2.x HTTP Sunucusu hakkında temel bir bilgi edinmek için mutlaka » Apache HTTP Sunucusu Sürüm 2.x Belgelerine bakmanızı öneririz.

En son sürümü » Apache 2.x indirme sitesinden ve buna uygun PHP sürümünü yukarıda bahsedilen yerlerden indirebilirsiniz. Bu kısa kılavuz Apache 2.x ve PHP hakkında sadece temel bilgi sağlar. Daha ayrıntılı bilgi edinmek için » Apache HTTP Sunucusu Belgelerine bakınız. Kurulum talimatlarının sürüm numaralarından ötürü geçerliliğini yitirmemesi için sürüm numaraları 'NN' şeklinde belirtilmiştir, NN yerine kurulan Apache sürümünün sürüm numarası yazılmalıdır.

Apache 2.x'in şu an iki sürümü mevcuttur: 2.4 ve 2.2. Bunlardan birini seçmek için çeşitli sebepler olabilirse de 2.4 şu an için en son ve önerilen sürümdür. Ancak, burada sözü edilen talimatlar hem 2.4 hem de 2.2 için çalışır. Apache httpd 2.2 resmen sonlandırılmış olup yeni geliştirmeler yapılmamakta ve yama çıkarılmamaktadır.

  1. Apache HTTP sunucusunu edindikten sonra şu komutları verin:

    tar -xzf httpd-2.x.NN.tar.gz
    
  2. Benzer işlemleri PHP için de yapın:

    tar -xzf php-NN.tar.gz
    
  3. Apache'yi derleyip kurun. Apache'nin nasıl derleneceğini Apache kurulumu belgesinden öğrenebilirsinz.

    cd httpd-2_x_NN
    ./configure --enable-so
    make
    make install
    
  4. Böylece standart prefork MPM'si ve yüklenebilir modül desteği ile Apache 2.x.NN /usr/local/apache2 altına kurulmuş oldu. Kurulumu denemek için Apache HTTP sunucusunu normal yollardan başlatabilirsiniz. Örnek:

    /usr/local/apache2/bin/apachectl start
    
    PHP yapılandırması ile çalıştırmak üzere sunucuyu durdurun:
    /usr/local/apache2/bin/apachectl stop
    

  5. Şimdi PHP'yi yapılandırıp kurun. Bunu hangi eklentileri etkin kılacaksanız onların seçeneklerini kullanarak yapabilirsiniz. Olası seçeneklerin listesini almak için komut satırına ./configure --help yazın. Örneğimizde Apache ve MySQL desteğini etkin kılacağız.

    Apache'yi yukarıda açklandığı gibi kaynak paketinden derlediyseniz aşağıdaki örnek sizin apxs yolunuzla eşleşecektir. Fakat Apache'yi başka bir şekilde kurduysanız apxs yolunu buna uygun olarak ayarlamalısınız. Bazı dağıtımlar apxs yerine apxs2 ismini kullanır, buna dikkat edin.

    cd ../php-NN
    ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
    make
    make install
    

    Eğer kurulumdan sonra yapılandırmanızı değiştirmek isterseniz sadece configure, make ve make install adımlarını yinelemeniz yeterli olacaktır. Yeni modülün etkin olabilmesi için Apache'yi yeniden başlatmanız gerekir. Apache'yi yeniden derlemeniz gerekmez. Aksi özellikle belirtilmedikçe 'make install' ile phpize gibi çeşitli PHP araçları, PEAR, PHP CLI ve bir takım başka şeylerin de kurulumu yapılır.

    Aksi belirtilmedikçe, 'make install' ile phpize gibi çeşitli PHP araçları, PEAR, PHP CLI ve benzerleri de kurulacaktır.

  6. php.ini dosyanızı yapılandırın.

    cp php.ini-development /usr/local/lib/php.ini
    

    PHP seçeneklerini ayarlamak için .ini dosyanızı düzenleyebilirsiniz. .ini dosyanızın başka bir yerde durmasını istiyorsanız, 5. şıkta --with-config-file-path=/başka/bir/yer seçeneği ile dosyanız için başka bir yer belirtebilirsiniz.

    php.ini-dist yerine php.ini-production (dağıtımın standart .ini dosyası yerine önerilen yapılandırmalar dosyasını) kullanmayı tercih ederseniz, değişiklik listesini okumayı ihmal etmeyin, çünkü bunlar PHP'nin davranışını etkileyecektir.

  7. PHP modülünün yüklenmesi için httpd.conf dosyasını düzenlemelisiniz. LoadModule yönergesinin değeri PHP modülünün sistemdeki yerini göstermelidir. Yukarıdaki 'make install' bunu sizin yerinize yapmıştır ama emin olmak için siz yine de bir bakın.

    PHP 8 için:

    LoadModule php7_module modules/libphp.so

    PHP 7 için:

    LoadModule php5_module modules/libphp7.so
  8. Apache'ye belli dosya uzantılarını PHP uzantıları olarak ele almasını söyleyin. Örneğin, .php uzantılı dosyaları Apache'nin PHP dosyaları olarak ele almasını isteyebiliriz. Apache AddType yönergesini kullanmamak suretiyle, PHP tarafından çalıştırılmak üzere istismar.php.jpg gibi dosyaların oluşturulması ve yüklenmesi gibi tehlikeli durumlardan kaçınmak isteyebilirsiniz. Biz örnek olsun diye .php uzantısını ekledik. Başka uzantıları da buraya ekleyebilirsiniz. Bunları aralarında boşluk bırakarak aynı satıra yazabilirsiniz.

    <FilesMatch \.php$>
     SetHandler application/x-httpd-php
    </FilesMatch>

    Veya .php, .php2, .php3, .php4, .php5, .php6 ve .phtml gibi dosyalar dışında hiçbir dosyanın PHP tarafından çalıştırılmamasını şöyle sağlayabilirsiniz:

    <FilesMatch "\.ph(p[2-6]?|tml)$">
     SetHandler application/x-httpd-php
    </FilesMatch>

    PHP kaynak kodlarını renklendirilmiş olarak göstermek için .phps uzantısını da yapılandırmanıza ekleyebilirsiniz. Bu, şöyle yapılır:

    <FilesMatch "\.phps$">
     SetHandler application/x-httpd-php-source
    </FilesMatch>

    .php dosyalarının uzantılarını .phps olarak değiştirmeden kaynak kodlarını renklendirilmiş olarak göstermek isterseniz bunu şöyle yapabilirsiniz:

    RewriteEngine On
    RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]

    PHP kaynak süzgeci, gizli kalması gereken bilgiler içeren genel kullanıma açık sunucularda kullanılmamalıdır. Aksi takdirde gizli kalması gereken bilgiler kaynak koda eklenebilir.

  9. Artık Apache'yi başlatabilirsiniz. Bunun için Apache'yi her zaman ki gibi başlatmanız yetecektir:

    /usr/local/apache2/bin/apachectl start
    

    VEYA

    service httpd restart
    

Yukarıdaki adımları izleyerek PHP'nin bir SAPI modülü olarak çalıştığı bir Apache 2 HTTP sunucusuna sahip olursunuz. Apache ve PHP için şüphesiz birçok farklı yapılandırma seçeneği vardır. Yapılandırma seçeneklerinin listesi için her kaynak ağacında ./configure --help çalıştırabilirsiniz.

Apache derlenirken prefork MPM modülü yerine , worker MPM modülü seçilerek çok evreli derlenebilir. Bunu yapmak için 3. şıkta derleme seçeneklerinize şu seçeneğini ekleyebilirsiniz:

--with-mpm=worker

Bunu yapmadan önce, bunun olası sonuçları hakkında bilgi sahibi olmaya, azından ne gibi etkilerinin olacağını anlamaya çalışın. Bu konuda daha ayrıntılı bilgi edinmek için Apache HTTP sunucusunun belgelerinden » Çok Süreçlilik Modülleri (MPM'ler) belgesini okuyunuz.

Bilginize:

İçerik dili uzlaşımı kullanmak isterseniz Apache MultiViews SSS'ine bakınız.

Bilginize:

Ayrıca, PHP'yi Zend Thread Safety (ZTS) motoru ile de derleyebilirsiniz. Böyle bir yapılandırmada bütün eklentiler kullanılamayacaktır. Bu bakımdan Apache'yi standart prefork MPM'si ile derlemenizi öneriyoruz.

add a note

User Contributed Notes 2 notes

up
16
nmmm at nmmm dot nu
15 years ago
When I upgrade to apache 2.2, this:

AddType application/x-httpd-php .php5
AddType application/x-httpd-php .php42
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtm
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .asp

...does not worked for me, so I did this:

<FilesMatch "\.(php*|phtm|phtml|asp|aspx)$">
SetHandler application/x-httpd-php
</FilesMatch>

Another interesting point with Apache 2.2 is following.
Let suppose we installed PHP as module. But for some directory, we need to use PHP as CGI (probably because of custom configuration). This can be done using:

<FilesMatch "\.(php*|phtm|phtml|asp|aspx)$">
SetHandler none
</FilesMatch>

AddType application/x-httpd-php-custom .php
Action application/x-httpd-php-custom /cgi-bin/php-huge

Note type must be different than "application/x-httpd-php" and also you need to deactivate the handler on sertain extention. You can do mixed configuration:

<FilesMatch "\.(php)$">
SetHandler none
</FilesMatch>

AddType application/x-httpd-php-custom .php
Action application/x-httpd-php-custom /cgi-bin/php-huge

in such case files like *.php5 and so on will be parsed via module, but *.php will go to php-huge executable.
up
8
Morning Star
2 years ago
I had just installed php8.1.12 on a machine used for writing C code.

Below are some libraries that I needed to download on a debian-based OS.

apt-get install libpcre3 libpcre3-dev
apt-get install apache2-dev
apt-get install libxml2-dev
apt-get install libsqlite3-dev

These were the missing packages that I required.
If you get an error regarding a missing package or library, for example when I needed sqlite3, run the command:

apt search sqlite3

And you'll be able to see if there's any dev or lib packages.

The apache2 instructions worked flawlessly at the time of php8.1.12; and in order to get certain requirements for an application, I had to run the php configure file like so:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql --with-mysqli --with-zip --enable-gd

The extra flags allowed me to use both types of mysql, allowed me to utilize PHP zip archiving, and allowed me to use Gnatt stuff.
To Top