如何使用PHP 4.4.9(FastCGI)与Apache和ISPConfig 3(Debian Wheezy)

自从ISPConfig 3.0.5,可以使用多个PHP版本  一个服务器并为网站选择最佳的PHP版本。如果你 有索马里

如何使用PHP 4.4.9(FastCGI)与Apache&ISPConfig 3(Debian Wheezy)

自ISPConfig 3.0.5以来,可以在一个服务器上使用多个PHP版本,并为网站选择最佳的PHP版本。 如果您的服务器上有一些非常旧的网站,则可能无法使用PHP5,但只能使用PHP4。 本教程将介绍如何在Debian Wheezy服务器上将Apache 4.4.9作为FastCGI版本与Apache2一起使用。 这个PHP版本可以与ISPConfig中的默认PHP(通过apt安装)一起使用。

我不会保证这将为您工作!

1初步说明

PHP-FPM不适用于PHP4,因此我只是描述如何构建FastCGI版本的PHP4。 FastCGI仅适用于Apache服务器,因此您无法使用nginx ..

2构建PHP 4.4.9(FastCGI)

从源代码安装构建的先决条件:

apt-get install build-essential

PHP 4.4.9将无法使用现代OpenSSL版本进行编译,因此我们需要先安装一个较旧的OpenSSL版本(0.9.8x):

cd /tmp
wget http://www.openssl.org/source/openssl-0.9.8x.tar.gz
tar xvfz openssl-0.9.8x.tar.gz
cd openssl-0.9.8x
./config --prefix=/usr/local/openssl-0.9.8
make
make install

下载并提取PHP 4.4.9:

mkdir /opt/phpfcgi-4.4.9
mkdir /usr/local/src/php4-build
cd /usr/local/src/php4-build
wget http://de.php.net/get/php-4.4.9.tar.bz2/from/this/mirror -O php-4.4.9.tar.bz2
tar jxf php-4.4.9.tar.bz2

cd php-4.4.9/

创建一些必要的符号链接:

ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libpng.so /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18 /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libexpat.so /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so /usr/lib/libmysqlclient.so
mkdir /usr/kerberos
ln -s /usr/lib/x86_64-linux-gnu /usr/kerberos/lib

接下来,我们必须禁用mysql_drop_dbmysql_create_db的函数 ,否则您将尝试构建PHP 4.4.9时会收到这些错误:

error: undefined reference to 'mysql_drop_db'
error: undefined reference to 'mysql_create_db'

打开/usr/local/src/php4-build/php-4.4.9/ext/mysql/php_mysql.c ...

vi /usr/local/src/php4-build/php-4.4.9/ext/mysql/php_mysql.c

...并转到第1131行。从那里,注释掉这两个功能:

[...]
/*PHP_FUNCTION(mysql_create_db)
{
        zval **db, **mysql_link;
        int id;
        php_mysql_conn *mysql;

        switch(ZEND_NUM_ARGS()) {
                case 1:
                        if (zend_get_parameters_ex(1, &db)==FAILURE) {
                                RETURN_FALSE;
                        }
                        id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
                        CHECK_LINK(id);
                        break;
                case 2:
                        if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) {
                                RETURN_FALSE;
                        }
                        id = -1;
                        break;
                default:
                        WRONG_PARAM_COUNT;
                        break;
        }

        php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated, please use mysql_query() to issue a SQL CREATE DATABASE statement instead.");

        ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);

        PHPMY_UNBUFFERED_QUERY_CHECK();

        convert_to_string_ex(db);

        if (mysql_create_db(&mysql->conn, Z_STRVAL_PP(db))==0) {
                RETURN_TRUE;
        } else {
                RETURN_FALSE;
        }
}*/
/* }}} */

/* {{{ proto bool mysql_drop_db(string database_name [, int link_identifier])
   Drops (delete) a MySQL database */
/*PHP_FUNCTION(mysql_drop_db)
{
        zval **db, **mysql_link;
        int id;
        php_mysql_conn *mysql;

        switch(ZEND_NUM_ARGS()) {
                case 1:
                        if (zend_get_parameters_ex(1, &db)==FAILURE) {
                                RETURN_FALSE;
                        }
                        id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
                        CHECK_LINK(id);
                        break;
                case 2:
                        if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) {
                                RETURN_FALSE;
                        }
                        id = -1;
                        break;
                default:
                        WRONG_PARAM_COUNT;
                        break;
        }

        php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated, please use mysql_query() to issue a SQL DROP DATABASE statement instead.");


        ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);

        convert_to_string_ex(db);

        if (mysql_drop_db(&mysql->conn, Z_STRVAL_PP(db))==0) {
                RETURN_TRUE;
        } else {
                RETURN_FALSE;
        }
}*/
/* }}} */
[...]

安装构建PHP5的先决条件(在我们的例子中,这也包括构建PHP4的先决条件):

apt-get build-dep php5

配置和构建PHP 4.4.9如下(您可以根据需要调整./configure命令,看看

./configure --help

查看所有可用选项; 如果使用不同的./configure命令,可能需要额外的库,否则构建过程将失败):

./configure \
--prefix=/opt/phpfcgi-4.4.9 \
--with-pdo-pgsql \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--with-pgsql \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql=/usr \
--with-mysql-sock=/var/run/mysqld/mysqld.sock \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl=/usr/local/openssl-0.9.8 \
--with-openssl-dir=/usr/local/openssl-0.9.8 \
--with-libdir=/lib/x86_64-linux-gnu \
--enable-ftp \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--with-expat-dir=/usr \
--enable-fastcgi

最后一个开关( --enable-fastcgi )确保这个PHP版本可以与FastCGI一起工作。

make
make install

php.ini复制到正确的位置:

cp /usr/local/src/php4-build/php-4.4.9/php.ini-recommended /opt/phpfcgi-4.4.9/lib/php.ini

就是这样 - 我们现在将APC模块添加到我们的PHP 4.4.9安装中:

cd /tmp
wget http://pecl.php.net/get/APC-3.0.19.tgz
tar xvfz APC-3.0.19.tgz
cd APC-3.0.19
/opt/phpfcgi-4.4.9/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-php-config=/opt/phpfcgi-4.4.9/bin/php-config
make
make install

之后,打开/opt/phpfcgi-4.4.9/lib/php.ini ...

vi /opt/phpfcgi-4.4.9/lib/php.ini

...并设置extension_dir =“/opt/ phpfcgi-4.4.9/lib/php/extensions/no-debug-non-zts- 20020429” ,并在文件的末尾添加行扩展名= apc.so (你还可以配置一些额外的APC设置):

[...]
extension_dir = "/opt/phpfcgi-4.4.9/lib/php/extensions/no-debug-non-zts-20020429"
[...]
extension=apc.so
apc.enabled=1
apc.shm_segments=1
apc.shm_size=512
apc.ttl=0
apc.user_ttl=600
apc.gc_ttl=600
apc.enable_cli=1
apc.mmap_file_mask=/tmp/apc.XXXXXX
;apc.mmap_file_mask=/dev/zero
;apc.shm_segments = 5

在ISPConfig 3.0.5中,您可以在“ 系统”>“其他PHP版本”下配置新的PHP版本 。 在“ 名称 ”选项卡上,您只需填写PHP版本的名称(例如PHP 4.4.9 ) - 这个PHP版本将在ISPConfig的网站设置中以此名称列出:

转到“ FastCGI设置”选项卡(“ PHP-FPM设置”选项卡可以保留为空),并填写如下所示的字段:

如果一切正常工作,您现在可以为ISPConfig中的网站选择PHP 4.4.9。 您可以通过使用phpinfo()创建一个PHP文件来检查网站的PHP版本; 功能并在浏览器中调用该文件:

关于作者

Falko Timme是所有者 nginx Webhosting Timme Hosting (超快nginx网页托管)。 他是Howtoing(自2005年以来)的主要维护者, 也是ISPConfig的核心开发人员之一 (自2000年起)。 他还为O'Reilly的“Linux系统管理”一书作出了贡献。