一直在维护一下10年前的老项目,是基于php5.3开发的。一直在使用windows虚拟机在开发php5.3。最近就想尝试在archlinux主系统中开发。
什么是php
PHP 是一种广泛使用的通用脚本语言,特别适合 Web 开发,可以嵌入到 HTML 中。
AUR安装php5.3
安装过程很久,有个文件下载非常慢。建议使用代理后在运行此命令。
yay -S php53
各种编译,时间太久了。我这电脑编译了近20分钟。
运行
虽然PHP可以独立运行,但它通常与Web服务器一起使用。这需要安装其他软件包并编辑配置文件。
因为我维护的项目是使用的是Apache
,所以可以参考:
https://wiki.archlinux.org/title/Apache_HTTP_Server#PHP
docker实现
用archlinux还是搞新软件方便,感觉安装php5.3这种老软件还是用别的系统吧。所以我打算使用docker来运行这个php5.3吧。
只要把程序目录映射到docker之中,也就可以正常开发了。
比如:
https://hub.docker.com/r/seti/php53
实例
启动容器
#这个目录可以根据自己的喜好修改
BASEDIR="/var/php53"
#创建一个目录用于存放php文件
mkdir -p $BASEDIR/data/webapp
#创建一个php.ini配置文件
touch $BASEDIR/php.ini
cd $BASEDIR
NAME="php53"
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
docker run -d \
-p 80:80 \
-v $DIR/data/webapp:/var/www/ \
-v $DIR/php.ini:/etc/php.ini \
--restart=always \
--name $NAME \
seti/php53
运行第1个php
此时我们来运行一下第一个php文件
nvim $BASEDIR/data/webapp/info.php
内容如下:
<?php
phpinfo();
?>
浏览器中访问 http://localhost/info.php就可以查看php的基本信息了。
这对于维护老项目的我来说非常的方便。
通过这些信息,我发现其实我们配置的
/etc/php.ini
并没有生效。而实际加载的路径是/etc/php53/apache2/php.ini
但是很神奇的是如果我不配置-v $DIR/php.ini:/etc/php.ini
映射,docker容器会无限重启。
进入容器微调
通过docker的配置还是有限的,如果需要更细微的调整还是直接进入容器。把它当作虚拟机来使用吧。
docker exec -it php53 bash
可能会用到的配置文件
项目 | Value |
---|---|
apache2 目录 | /etc/apache2/ |
apache2 配置文件 | /etc/apache2/apache2.conf |
Configuration File (php.ini) Path | /etc/php53/apache2 |
Loaded Configuration File | /etc/php53/apache2/php.ini |
Scan this dir for additional .ini files | /etc/php53/apache2/conf.d |
mssql odbc驱动的支持(暂未成功)
我花了不少时间研究,可惜没能成功。
官方的文档:
https://learn.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver16
如果是php7.4我清楚如何做,但是php5.3我就不会了。我相信肯定有解决办法,但是我暂时找不到。
我们使用的容器是基于Ubuntu 14.04.6 LTS的。我在网上找相关资料基本都是对应新版本的。
参考:
https://sqlchoice.azurewebsites.net/en-us/sql-server/developer-get-started/php/ubuntu/
安装扩展源
主机中先下载两个文件,一会儿备用。
cd /var/php53/data/webapp
wget https://packages.microsoft.com/keys/microsoft.asc
wget https://packages.microsoft.com/config/ubuntu/14.04/prod.list
为什么要在主机中下载,因为我在容器中无法正常安装curl
进入容器的命令行
docker exec -it php53 bash
cd /var/www
ls
此时是可以看到我们下载的两个文件的。
root@837b251408dc:/# cd /var/www
root@837b251408dc:/var/www# ls
info.php microsoft.asc prod.list
cat microsoft.asc | apt-key add -
#Ubuntu 14.04
cat prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
#其实我在windows中安装的是odbc10,但的我发现这个源里最低版本好像就是odbc17了
#没办法也安装odbc17试试吧
sudo ACCEPT_EULA=Y apt-get install msodbcsql17
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install unixodbc-dev
安装对应的php 模块
2.1先查询出对应的模块
sudo apt-cache search php5*
比如:我找到了php53-mod-mssql
apt install php53-mod-mssql
参考
https://blog.csdn.net/qq_42078965/article/details/106268337
以下是探索过程,不需要看。踩坑过程,仅记录一下。
使用这个镜像
这里我以/var/php53/
这个目录为例,可以根据自己的需要自行修改。
#创建一个目录用于存放php文件,这个目录可以根据自己的喜好修改
mkdir -p /var/php53/data/webapp
# 创建目录用于存放虚拟目录的配置文件
mkdir -p /var/php53/data/vhost
#创建一个php.ini配置文件
touch /var/php53/php.ini
cd /var/php53/
NAME="php53"
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
docker run -d \
-p 80:80 \
-v $DIR/data/webapp:/home/www/ \
-v $DIR/data/vhost:/etc/httpd/vhost.d \
-v $DIR/php.ini:/etc/php.ini \
--restart=always \
--name $NAME \
seti/php53
这里发现已经可以成功访问了。如下:
不到1分钟的时间就搞定了。而且docker这种方式几乎是全平台兼容。所以我最终选择不折服archlinux中原生运行php5.3了。
配置VirtualHost
新增文件
vim /var/php53/data/vhost/default.conf
内容如下:
Listen 80
<VirtualHost *:80>
DocumentRoot "/home/www/"
ServerName localhost
</VirtualHost>
具体写法请参考:
https://httpd.apache.org/docs/2.4/vhosts/examples.html
phpinfo()
看一下php的信息吧。
vim /var/php53/data/webapp/info.php
内容如下:
<?php
phpinfo();
?>
参考
https://wiki.archlinux.org/title/PHP
https://httpd.apache.org/docs/2.4/vhosts/examples.html