How to install PHP 5.2 FastCGI on Debian 6.0 Squeeze
Debian Squeeze comes with PHP 5.3. This is good, because PHP 5.2 is no longer maintained, but causes problems for old applications that can’t support it (e.g. ViArt 3, because it uses Zend Encoder).
Rather than permanently downgrade PHP for the whole server, I opted to install PHP 5.2 alongside it using FastCGI. It took some trial-and-error to get it to compile with all the features I need, but here is how I did it:
Directory structure
This is the directory structure (at the end), so you can visualise it:
/etc/
apache2/
sites-enabled/
test.conf <-- Apache site configuration
/opt/
php52/
bin/
php-cgi <-- PHP CGI binary
...
...
/home/
sites/
test/
cgi-bin
php52.fcgi <-- FastCGI wrapper script
conf/
php.ini <-- PHP configuration
htdocs/
phpinfo.php <-- Test script
How to install
Install & enable FastCGI
|
1
2
3
|
sudo apt-get install libapache2-mod-fastcgisudo a2enmod actions fastcgisudo /etc/init.d/apache2 restart |
Download PHP
|
1
2
3
4
5
|
mkdir ~/php5-buildcd ~/php5-buildwget http://uk3.php.net/get/php-5.2.17.tar.bz2/from/this/mirror -O php-5.2.17.tar.bz2tar jxf php-5.2.17.tar.bz2cd php-5.2.17/ |
Download dependancies
|
1
2
|
sudo apt-get build-dep php5sudo apt-get install libfcgi-dev libmhash-dev |
Compile PHP
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
./configure \ --prefix=/opt/php52 \ --enable-force-cgi-redirect \ --enable-fastcgi \ --with-regex=php \ --enable-calendar \ --enable-sysvsem \ --enable-sysvshm \ --enable-sysvmsg \ --enable-bcmath \ --with-bz2 \ --enable-ctype \ --with-iconv \ --enable-exif \ --enable-ftp \ --with-gettext \ --enable-mbstring \ --with-pcre-regex \ --enable-shmop \ --enable-sockets \ --enable-wddx \ --with-libxml-dir=/usr \ --with-zlib \ --with-openssl=/usr \ --enable-soap \ --enable-zip \ --with-mhash=yes \ --with-gd \ --with-mysql \ --with-mysqli \ --with-pdo-mysql \ --with-pear \ --with-jpeg-dir=/usr/libmakesudo make installsudo chmod o+rX -R /opt/php52/ |
Create a FastCGI wrapper script
|
1
2
3
|
mkdir /home/www/test/cgi-bin/chmod o+rX /home/www/test/cgi-bin/vim /home/www/test/cgi-bin/php52.fcgi |
|
1
2
3
4
5
|
#!/bin/shexport PHP_FCGI_CHILDREN=4export PHP_FCGI_MAX_REQUESTS=200export PHPRC="/home/www/test/conf/php.ini"exec /opt/php52/bin/php-cgi |
|
1
|
chmod a+rx /home/www/test/cgi-bin/php52.fcgi |
Set the site to use FastCGI
|
1
|
vim /etc/apache2/sites-enabled/test.conf |
|
1
2
3
4
5
6
7
8
9
10
|
<VirtualHost *> ... # Use FastCGI version of PHP php_admin_flag engine off ScriptAlias /cgi-bin /home/www/test/cgi-bin/ Action application/x-httpd-php /cgi-bin/php52.fcgi</VirtualHost> |
Restart Apache
|
1
|
sudo /etc/init.d/apache2 restart |
Notes
It took me many hours to get this right. Here are some of the things I learned:
1. If you don’t have libfcgi-dev installed when you compile PHP, it will compile fine, but FastCGI will time out when you try to use it.
2. Make sure the php52.fcgi script is saved in Unix line-ending format not Windows – otherwise, again, FastCGI will hang for 30 seconds then time out. Test the script by running it at the command line.
3. If you miss out the --with-jpeg-dir=/usr/lib switch the first time, you must run make clean before PHP will compile a second time with JPEG support.
4. If you make any changes to the wrapper script (php52.fcgi), you must kill the existing instances before you will see the changes. (I did this by restarting Apache, but I suspect there is a more graceful way!)
5. You do not have to make the PHP scripts executable, or add the shebang to the top – it is the wrapper script that is executed, not the PHP scripts.
Просмотров: 2099