我正在将一个非常旧的服务器(Debian etch)迁移到Debian Stretch,并且开发的每个应用程序都有PHP问题,这是预期的.有些可以修复,有些则不能(如6个drupal 6个网站).
在未来,任何单个应用程序都将在PHP7.0下提供,但直到那一天到来我需要PHP5.3为它们服务.
我知道Debian stretch对可共同安装的PHP版本有一些“本机”支持,但我发现的所有示例都是PHP5.6(Jessie的版本):
https://pehapkari.cz/blog/2017/03/27/multiple-php-versions-the-easy-way/
另外,我发现了一些PHP5.3和PHP5.4或PHP5.6在Debian Jessie,Wheezy等上一起工作的例子,但不是Debian Stretch(PHP7.0):
https://superuser.com/questions/913792/php-5-3-10-on-debian-jessie
所以,首先,我需要知道是否可以让PHP7.0和PHP5.3在Debian Stretch上的apache2上一起工作.
其次,我需要弄清楚如何做到这一点.
我不是系统管理员所以我的debian知识从头开始日益增长.
谢谢.
解决方法:
我偶然发现了类似的问题,并设法让它发挥作用.
我不得不安装一个带有debian 9 / nginx / php5.4的服务器,所以虽然它不完全符合你的先决条件,但我认为解决方案是类似的.我将列出我为我解决的步骤.
基本上,您需要从源代码安装php,如果您需要openssl支持(–with-openssl),这会产生问题,因为旧版本的PHP(< 7.0)不支持openssl> = 1.1.0,是debian 9中的默认值.所以你必须构建一个较旧的openssl版本(我使用1.0.1u).
但是我们先安装一些依赖项.
apt install build-essential checkinstall zip autoconf
apt install libfcgi-dev libfcgi0ldbl libmcrypt-dev libssl-dev libc-client2007e-dev libkrb5-dev libcurl4-openssl-dev
apt install libxml2-dev libcurl4-openssl-dev libpcre3-dev libbz2-dev libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libmhash-dev freetds-dev libmariadbclient-dev-compat unixodbc-dev libxslt1-dev
然后我们将构建openssl.
cd /opt/
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz
tar xzf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
./config shared --openssldir=/usr/local/openssl/ enable-ec_nistp_64_gcc_128
make depend
make
make install
ln -s /usr/local/openssl/lib /usr/local/openssl/lib/x86_64-linux-gnu
作为连锁反应,您必须使用刚构建的openssl构建libcurl和libc-client(用于imap支持).我们将从libcurl开始.
cd /opt/
wget https://curl.haxx.se/download/curl-7.26.0.tar.gz
tar xzf curl-7.26.0.tar.gz
cd curl-7.26.0
env PKG_CONFIG_PATH=/usr/local/openssl/lib/pkgconfig LDFLAGS=-Wl,-rpath=/usr/local/openssl/lib ./configure --with-ssl=/usr/local/openssl --with-zlib --prefix=/usr/local/curl
make
make install
然后,libc-client.我实际上使用了debian 8的源代码,因为它包含了一些补丁.构建本身失败但仍然生成了c-client.a,这就是我所需要的.
cd /tmp/
wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg-2.dsc
wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg.orig.tar.gz
wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg-2.debian.tar.gz
dpkg-source -x uw-imap_2007f\~dfsg-2.dsc imap-2007f
mv imap-2007f /usr/local/
cd /usr/local/imap-2007f/
touch {ipv6,lnxok}
make slx SSLINCLUDE=/usr/local/openssl/include/ SSLLIB=/usr/local/openssl/lib EXTRAAUTHENTICATORS=gss
mkdir lib include
cp c-client/*.c lib/
cp c-client/*.h include/
cp c-client/c-client.a lib/libc-client.a
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
有了这个,我就需要构建PHP5.4.请注意我在编译时警告了postgresql绑定(因为本地vs系统openssl版本不匹配),所以我认为如果你想使用它们,你将不得不构建自己的libpq.
cd /opt/
PHP_VER=5.4.45
wget http://museum.php.net/php5/php-${PHP_VER}.tar.gz
tar xzf php-${PHP_VER}.tar.gz
cd php-${PHP_VER}
LDFLAGS="-Wl,-rpath=/usr/local/openssl/lib,-rpath=/usr/local/curl/lib" './configure' --prefix=/usr/local/php-${PHP_VER} '--with-zlib-dir' '--with-freetype-dir' '--enable-fpm' '--enable-mbstring' '--with-libxml-dir=/usr' '--enable-soap' '--enable-calendar' '--with-curl=/usr/local/curl' '--with-mcrypt' '--with-zlib' '--with-gd' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-zlib' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-mbregex' '--with-mhash' '--enable-zip' '--with-pcre-regex' '--with-mysql' '--with-pdo-mysql' '--with-mysqli' '--with-jpeg-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--enable-cgi' '--with-pear' '--enable-memcache' '--with-openssl=/usr/local/openssl' '--with-imap=/usr/local/imap-2007f' '--with-kerberos' '--with-imap-ssl' '--with-libdir=lib/x86_64-linux-gnu'
LDFLAGS="-Wl,-rpath=/usr/local/openssl/lib,-rpath=/usr/local/curl/lib" make
make install
剩下的唯一的东西是php.ini和php-fpm.conf文件的创建,这些都是微不足道的,php-fpm socket的配置和initscript的创建(网上有很多例子,我无法发布完整的文件这里),以及您的网络服务器的配置(socket上的fastcgi).