MeiK/CentOS 配置 PHP5.2 + Apache + MySQL

Created Fri, 23 Mar 2018 16:10:22 +0000 Modified Fri, 11 Oct 2019 16:50:08 +0800

原材料

  • Ubuntu16.04 服务器
  • Docker
  • CentOS:6 镜像

没什么卵用的介绍

有个同学的需求,需要在一个 ubuntu16.04 服务器上部署一个 PHP 的网站,当我轻车熟路一顿 apt 之后……

fatalerror.png

代码中充满了 PHP5.2 版本才有的操作,包括且不限于 session_register、preg_match、ereg、mysql_connect 系列函数,我大概看了一下代码就放弃了帮他升级的想法 —— 升级到新版 PHP 的工作量不亚于写一个新的……

好吧,看来代码是不能动了,那就装一个 PHP5.2 吧。

经过一番搜索和考虑,我决定把 PHP5.2 装在 Docker 中,以 Docker 的形式来运行网站服务。一来是服务器上之前有什么东西我不知道,服务器上已经有 PHP7 了,我不想因为环境的修改导致其他的问题;二来就是,通过搜索,我发现,ubuntu16.04 上安装 PHP5.2 还没有先例……据某个网友说,ubuntu16.04 的系统无法兼容 PHP5 的 libphp5.so ,会导致 Apache 无法解析 PHP 文件。

安装 Docker 镜像

直接 pull 一个 CentOS:6 的镜像即可,我使用了国内源的加速。

docker pull registry.docker-cn.com/library/centos:6
docker run -it -p 80:80 centos:6

安装 MySQL

项目对 MySQL 的版本没有什么要求,因此直接 yum 安装即可。

yum install mysql mysql-server

安装 Apache

Apache 的版本同样没有什么要求,直接 yum 安装。

yum install httpd

安装 PHP5.2

准备工作

因为 yum 源里的 PHP 版本高于 5.2 ,因此需要手动下载编译 PHP 。

首先需要下载安装 PHP 必需的一些依赖。

yum groupinstall "Development tools"
useradd opt -d /opt/sbin
yum install wget
yum install epel-release
yum install gcc make httpd-devel libxml2-devel bzip2-devel openssl-devel curl-devel gd-devel libc-client-devel libmcrypt-devel libmhash-devel mysql55-devel aspell-devel libxslt-devel mysql-devel    
ln -s /usr/lib64/libjpeg.so /usr/lib/libjpeg.so
ln -s /usr/lib64/libpng.so /usr/lib/libpng.so
ln -s /usr/lib64/libXpm.so /usr/lib/libXpm.so
ln -s /usr/lib64/libc-client.so /usr/lib/libc-client.so
ln -s /usr/lib64/krb5 /usr/lib/krb5
ln -s /usr/lib64/libgssapi_krb5.so /usr/lib/libgssapi_krb5.so
ln -s /usr/lib64/libgssrpc.so /usr/lib/libgssrpc.so
ln -s /usr/lib64/libk5crypto.so /usr/lib/libk5crypto.so
ln -s /usr/lib64/libkadm5clnt.so /usr/lib/libkadm5clnt.so
ln -s /usr/lib64/libkadm5clnt_mit.so /usr/lib/libkadm5clnt_mit.so
ln -s /usr/lib64/libkadm5srv.so /usr/lib/libkadm5srv.so
ln -s /usr/lib64/libkadm5srv_mit.so /usr/lib/libkadm5srv_mit.so
ln -s /usr/lib64/libkdb5.so /usr/lib/libkdb5.so
ln -s /usr/lib64/libkrb5.so /usr/lib/libkrb5.so
ln -s /usr/lib64/libkrb5support.so /usr/lib/libkrb5support.so
ln -s /usr/lib64/mysql /usr/lib/mysql
usermod -aG wheel opt
echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

安装

wget http://museum.php.net/php5/php-5.2.17.tar.gz
tar xzf php-5.2.17.tar.gz
cd php-5.2.17

./configure --prefix=/opt/sbin/php --with-apxs2=/usr/sbin/apxs --with-config-file-path=/opt/sbin/etc/  --disable-posix   --enable-bcmath   --enable-calendar   --enable-exif   --enable-fastcgi   --enable-ftp   --enable-gd-native-ttf   --enable-libxml   --enable-magic-quotes   --enable-mbstring   --enable-pdo   --enable-soap   --enable-sockets   --enable-wddx   --enable-zip  --with-bz2   --with-curl   --with-curlwrappers   --with-freetype-dir   --with-gd   --with-gettext   --with-imap   --with-imap-ssl  --with-jpeg-dir  --with-kerberos   --with-libxml-dir  --with-libxml-dir   --with-mcrypt   --with-mhash   --with-mime-magic   --with-mysql  --with-mysqli   --with-openssl --with-openssl-dir --with-pcre-regex  --with-pdo-mysql   --with-pdo-sqlite   --with-pic   --with-png-dir   --with-pspell   --with-sqlite   --with-ttf   --with-xmlrpc   --with-xpm-dir  --with-xsl --with-zlib   --with-zlib-dir

cd php-5.2.17
sudo make install
libtool --finish /opt/sbin/php-5.2.17/libs
/opt/sbin/php/bin/php --version

    PHP 5.2.17 (cli) (built: Dec 28 2015 13:24:10)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

配置 Apache 解析 PHP

将下面的代码添加到 /etc/httpd/conf/httpd.conf 中:

AddType application/x-httpd-php .php

LoadModule php5_module modules/libphp5.so
<IfModule mod_php5.c>

    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
</IfModule>

重启 Apache 和 MySQL

/etc/init.d/mysqld restart
/etc/init.d/httpd restart

此时访问服务器 IP ,已经在正常解析了。

总结

  • 万恶的上古代码
  • Docker 还是美滋滋啊