CakeFest 2024: The Official CakePHP Conference

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 17 notes

up
20
nmmm at nmmm dot nu
14 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
9
Morning Star
1 year 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.
up
5
1097625354 at qq dot com
4 years ago
解析PHP,需要Apache 2.4.9 以后
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
up
6
happyboy at php dot org
18 years ago
FILE TRUNCATED!!

during the make process should u receive an error declaring ext/ctype/ctype.lo (or another file) is truncated then you need to 'make clean' prior to a healthy 'make' and 'make install.'

looking into your ext/ directory you may find the offensive file to be 1 byte long.
up
5
felixcca at yahoo dot ca
17 years ago
I've (painfully) discovered that installing PHP5 with "make install" under SuSe 9.2 is NOT a good idea.
http://www.aditus.nu/jpgraph/apache2suse.php
This page explains how to install it without breaking everything that's php-related in the Apache2 configuration. Its first purpose, though, is to show how to have php 4 and 5 to cohabit properly.
up
6
Tom420.Duhamel
15 years ago
I have successfully installed Apache 2.2.11 and PHP 5.2.8 under Red Hat 9.0 on a Pentium 166 with 32 MB of RAM.

While I used RH9, the worst possible case, these notes are probably good for RH-based distributions too (Red Hat Enterprise, Fedora, CentOS...)

If you want to install MySQL, it needs to be installed before PHP because PHP requires some libraries be available.

One think important when picking up a binary distribution of MySQL is to download all four packages: MySQL-server, MySQL-devel, MySQL-client and MySQL-shared. Note: The MySQL was bundled with PHP 4 but is not anymore in PHP 5.

Then you need to install Apache before PHP, because again PHP needs some libraries be available. I installed Apache 2 from source, using the very last version available, which is 2.2.11.

I installed PHP 5.2.8 from source. Here, I had a number of problems, but none which I could not resolve easily, some of them with a little help from different forums I found through Google.

Rembember: When it says you need a package named xyz and you notice there is also one named xyz-devel, grab it.

Most of the packages I got from:
http://legacy.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/
A similar page exists for other versions of Red Hat
and:
http://rpmfind.net/
This site has an updated version of some of the packages. Make sure to use only the one labeled for you version (in my case, Red Hat 9.0) or it will not likely work.

You already have glibc and glibc-common installed, but you need to get glibc-devel and glibc-kernheaders. Make sure to match glibc's version (rpm -q glibc). Note: When it says kernel-header is a required dependency, that's glibc-kernheader (not kernel-source). You will also need binutils (no need to match the version), and gcc and cpp (version must match).

You need zlib-devel (zlib is probably already installed, match the version you have).

If you install the GD extension, the actual library is already bundled with PHP 5 (use that one, they have done some changes in there, so don't upgrade), but you will need to install libpng and libpng-devel (match version, or disable in configure if you don't want) and libjpeg (no -devel with that one).

You will also need libxml2. Now there were a problem, because PHP requires libxml2 be 2.6 or greater, but Red Hat only supplied 2.5.4-1 for RH9 (if you have a more recent distro, you might be more lucky). After looking for a while, I decided to grab the source code for the most recent distribution at the official website (http://xmlsoft.org/) and compiled.

Hope my post is useful to someone. Please, share your experience when compiling/installing for your particular platform and setup. Remember how hard it's been for you the very first time. I confess, my very first server installation took me nearly a week and I was glad others helped me.
up
6
Anonymous
6 years ago
Building php 7.1.3 with mysql 5.7.17 and httpd 2.4.25 on Debian 8, step 5 failed for me. Instead of

--with-mysql

try

--with-pdo-mysql

or

--with-mysqli
up
4
praveen dot k at masconit dot com
19 years ago
Hi too had same problem with multiview like when i execute http://huey/admin/test.php it used to compile but when i use http://huey/admin/test it wouldnt recognise it as php file... i worked it out with the addhandler method and AddType in different line and setting multiview for directive

"multiviews Options Indexes FollowSymLinks MultiViews"

the directives u can set it to root directory so now when u type pn test it will search in precendence for test.php, test.html if any .....

its working for me with apache2.0.47 and php 4.3.9 on solaris

praveen
up
4
Anonymous
14 years ago
Solution for fedora is yum install mysql-devel. Then set --with-mysql=/usr/include/mysql/
monguesto
up
3
svepa at milestone42 dot com
12 years ago
On 64-bit Fedora systems (I'm using Fedora 14), configuring PHP to use the MySQL libraries installed as part of the distribution gives the following error if you follow the default instructions in this manual.

Cannot find libmysqlclient under /usr

Modifying he following invocation of configure as follows:

./configure --with-apxs2=/path/to/apxs --with-libdir=lib64 --with-mysql

should work.

Note the addition of --with-libdir=lib64
This points the configure script to look for 64-bit mysqlclient libraries.
up
2
frank@ethisoft
18 years ago
Using Apache2 & PHP5 work perfectly fine & safe together.
- all core modules are safe in Zend Engine 2
- third-party-libraries should be avoided
- semaphores and shared memory enables you to ensure yourself that your application/website is thread-safe also with non-thread-safe PHP modules!
up
2
Dan Scott (dan dot scott at acm dot org)
19 years ago
Building PHP 5.x with Apache2 on SuSE Professional 9.1/9.2

SuSE uses a rather fragmented set of Apache configuration files stored in /etc/apache2/. When you configure PHP 5.x with:

$ ./configure --with-apxs2=/usr/sbin/apxs2
$ make

everything builds just fine; but when you issue:
$ su -c "make install"

the unconventional Apache conf file layout confuses the install-sapi section of the Makefile and the process halts with the following error:

apxs:Error: Config file /etc/apache2/httpd2-prefork.conf not found.
make: *** [install-sapi] Error 1

At this point only the PHP SAPI library has been copied into place; the rest of the files (like PEAR scripts, PHP-CLI, etc) have not been installed. But never fear! You can overcome this problem with the following steps:

1. Edit Makefile and change the following line to remove "install-sapi":
install_targets = install-sapi install-cli install-pear install-build install-headers install-programs

2. Issue the make install command again:
$ su -c "make install"

3. Add the PHP module & type instructions to the Apache configuration. As root, create a new file, /etc/apache2/conf.d/php5.conf that contains the following lines:

LoadModule php5_module /usr/lib/apache2/libphp5.so
AddType application/x-httpd-php php

--- And that's it. Everything else is just as the documentation suggests it should be.
up
1
dfeprado at gmail dot com
6 months ago
When compiling for an Ubuntu 22.04 + Apache2 HTTPD (the one that comes from the default repo), you can face the following error when starting apache2.service:

"Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP."

So, I came back to PHP source and configured it like this:

$ make clean
$ ./configure [...all your build needs] --enable-zts
$ make
$ sudo make install

Then it worked.
up
1
neil
19 years ago
To install mysql and mysqli with PHP5 do the following:

after doing:

./configure --with-mysql=/path/to/mysql_config --with-mysqli=/path/to/mysql_config

do this:

"
if you want to use both the old mysql and the new mysqli interface, load the Makefile into your editor and search for the line beginning with EXTRA_LIBS; it includes -lmysqlclient twice; remove the second instance
"

then you can:

make
make install

.....
Pleasse note: you must have mysql-dev installed (RPM or source) or you will not have the mysql_config file at all. The standard, server, and client installations of MySQL do not include it. I read somewhere that the mysql and mysqli paths must be identical.

Quoted from Michael Kofler at the following link:
http://www.kofler.cc/forum/forumthread.php?rootID=3571
up
1
chris@gerlt -dot- net
17 years ago
Install issues on Redhat, specifically RHEL4 with php4 already installed:

I discovered that there was an issue caused by redhat loading php4 in another file seperate from the httpd.conf file! This took me hours to discover. Make sure you know if the apache config file (httpd.conf) is loading configurations from a directory (or another file(s)) as well. If so, look in there for any php module loading which could conflict with the new module you are compiling/installing.
up
-1
susie91
17 years ago
for slackware 10.2 users with apache2, mysql5, and trying to install php5:

when following the directions above, after this step:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql

i kept getting this error:
"Unable to find MySql header files...."

the only way i could get php5 with mysql support was to compile MySql5 from source, and not use the binary as the mysql site recommends.

then i was able to ./configure successfully, but for some reason php was configured to compile the CGI version.

so, had to use this ./configure line:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --disable-cgi

alternatively, you could install php4 which does bundle the MySql client files.
up
-6
jaya
17 years ago
PHP 5.1.4 INSTALLATION on Solaris 9 (Sparc)

Solaris9 Packages Installed:

Verify required package installation:
root# pkginfo SUNWbtool SUNWsprot SUNWtoo SUNWhea SUNWarc \
SUNWlibm SUNWlibms SUNWdfbh SUNWxglh SUNWcg6h

Uninstall Default Apache Packages:
root# /etc/init.d/apache stop
root# pkginfo |grep Apache
root# pkgrm SUNWaclg SUNWapchd SUNWapchr SUNWapchu

Create installation Directory:
root# mkdir /phpdata/

Download Required Packages from Sunfreeware:

Install libiconv-1.8 and gcc3.3.2 packages
root# pkgadd -d ./libiconv-1.8-sol9-sparc-local
root# pkgadd -d ./gcc-3.3.2-sol9-sparc-local

set LD_LIBRARY_PATH, CC and PATH variables
root# LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib/sparcv9/:\
/usr/lib:/usr/openwin/lib:/opt/local/lib:/usr/local/ssl/lib:\
/usr/local/apr/lib:/opt/mysql/mysql/lib
root# CC=gcc
root# PATH=$PATH:/usr/ucb:/usr/local/bin/
root# export LD_LIBRARY_PATH CC PATH

Install apr-1.2.2 and aprutil-1.2.2 packages

root# gzcat apr-1.2.2.tar.gz |tar xvf -
root# cd apr-1.2.2
root# ./configure
root# make
root# make install
root# cd ..

root# gzcat aprutil-1.2.2.tar.gz |tar xvf -
root# cd apr-util-1.2.2/
root# ./configure --with-apr=/usr/local/apr/
root# make
root# make install

Install gawk-3.1.4, expat-1.95.5, db-4.2.52.NC,
gdbm-1.8.3, libgcc-3.3 and libxml2-2.6.16 packages
root# cd ..
root# pkgadd -d ./gawk-3.1.4-sol9-sparc-local
root# pkgadd -d ./expat-1.95.5-sol9-sparc-local
root# pkgadd -d ./db-4.2.52.NC-sol9-sparc-local
root# pkgadd -d ./gdbm-1.8.3-sol9-sparc-local
root# pkgadd -d ./libgcc-3.3-sol9-sparc-local
root# pkgadd -d ./libxml2-2.6.16-sol9-sparc-local

Install GNU make package
root# gzcat make-3.81.tar.gz |tar xvf -
root# cd make-3.81
root# ./configure
root# make
root# make install
root# cd ..

Install mysql-standard-5.0.22 package
Search for user mysql
root# grep mysql /etc/passwd
root# grep mysql /etc/group

If not found create user and group mysql
root# groupadd mysql
root# useradd -G mysql mysql
root# pkgadd -d ./mysql-standard-5.0.22-solaris9-sparc.pkg.gz

Install openssl-0.9.7g package
root# gzcat openssl-0.9.7g.tar.gz |tar xvf -
root# cd openssl-0.9.7g
root# ./config shared
root# make
root# make install
root# cd ..

Install Apache2 package
root# gzcat httpd-2.2.0.tar.gz |tar xvf -
root# cd httpd-2.2.0
root# ./configure --enable-so
root# /usr/local/bin/make
root# /usr/local/bin/make install
root# cd ..

Install php-5.1.4 package
root# gzcat php-5.1.4.tar.gz |tar xvf -
root# cd php-5.1.4
root# ./configure --with-apxs2=/usr/local/apache2/bin/apxs\
--with-ldap --with-mysql=/opt/mysql/mysql/
root# /usr/local/bin/make
root# /usr/local/bin/make install
root# cp php.ini-dist /usr/local/lib/php.ini

Edit httpd.conf to load the PHP module
and to parse certain extensions as PHP
root# vi /usr/local/apache2/conf/httpd.conf
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php .phtml

Start Apache
root# /usr/local/apache2/bin/apachectl start

Add environmental variables below HTTPD
root# vi /usr/local/apache2/bin/apachectl
LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib/sparcv9/:
/usr/lib:/usr/openwin/lib:/opt/local/lib:/usr/local/ssl/lib:
/usr/local/apr/lib:/opt/mysql/mysql/lib
PATH=/bin:/sbin:/usr/ccs/bin:/usr/sbin:/usr/openwin/bin:\
/usr/ucb:/usr/local/bin/
export LD_LIBRARY_PATH PATH

Create Apache Startup Script
To Top