前几天的一个实验中涉及到使用PHP将本地文件部署到云端,但是具体的实现却还是需要费一番手脚,在网上找到的资料很多都没办法解决我自己遇到的实际困难,因此记录下来仅供参考。
1、初始
我使用的云端服务器是CentOS7.6,PHP版本是PHP7.1.33(PHP7.3之后的版本(包含7.3)的.so文件的扩展方式和之前有区别,其中的./ext_skel文件被修改为一个php文件且后面的参数也有所修改,具体的请阅读其文档说明)
安装lnmp时我使用的是lnmp一键安装脚本(因为还蛮方便的,比起一个一个用代码安装方便很多),安装代码如下:
yum install screen
wget http://soft.vpser.net/lnmp/lnmp1.6.tar.gz -cO lnmp1.6.tar.gz && tar zxf lnmp1.6.tar.gz && cd lnmp1.6 && ./install.sh lnmp
选择时我选择的是MySQL5.5.62和PHP7.1.33;(不要选择PHP7.3及以上版本,原因如上)
2、安装完成之后在服务器上使用php -v查看自己对应的PHP版本,然后使用如下命令下载对应的PHP安装包(直接修改对应的PHP版本号即可下载):
php -v
wget http://cn2.php.net/distributions/php-7.1.33.tar.gz
当然,如果下载速度过慢的话也可以在本地用浏览器打开wget后的网站下载,下载完成后使用scp命令将文件上传到服务器中,scp命令使用方法如下:
scp 本地文件位置 user@ip:服务器存储文件位置
其中user指服务器的用户名,IP即服务器的公网IP,在本地的命令行中输入即可(macOS)
3、以我们实验的扩展so库为例(以下均是):
我们实验要求使用flex&bison生成的so库文件搭配PHP配置云端计算器。本地生成的so库名为libmycalc.so,我们首先使用如下命令查看libmycalc.so的信息:
nm -A libmycalc.so
我们所要使用的calcpar前的状态码为T即代表可以正常使用,然后我们就可以进行下一步配置;
4、我们将下载下来的PHP解压缩然后在其目录下进行扩展库的链接:
tar -zxvf php-7.1.33.tar.gz
解压缩以后我们将libmycalc.so动态库复制到PHP的库文件中:
cp libmycalc.so /usr/local/lib/
然后我们进入到PHP的扩展库文件中:(注意PHP版本号对应的解压缩出来的文件名不同)
cd php-7.1.33/ext/
ext即PHP链接动态库的文件夹。然后我们想要将libmycalc.so中的calcpar函数链接为calcprocess函数,我们在ext文件下使用vi fun.def创建一个文件,在其中输入:(注意没有分号)
int calcprocess()
然后我们完成了初期的配置,可以进行下一步。
5、生成所需的库文件夹并进行简单配置:
我们在ext文件之下使用如下命令创建calc文件夹并生成一些初始的配置:
./ext_skel --extname=calc --proto=fun.def --skel=./skeleton
其中./ext_skel即PHP中链接动态库的自带文件,后面的为其参数,具体用处请自行百度即可。
然后我们使用cd calc进入calc文件中,使用vi calc.c对calc.c进行相应的一些更改使其与libmycalc.so相链接:
修改一:在头文件中加入#include “libmycalc.h”(自己需要的头文件,这一步是因为我们的实验中需要这个头文件进行一些配置)
修改二:修改PHP_FUNCTION(calcprocess)函数内容如下:(即对应的函数名,可以自定义),这一步按需要修改,我的修改如下(仅供参考):
⚠️:上述仅以我们实验中的需求为例,在自己的配置过程中,这一步需要自己对相应的链接处的函数进行修改,至于.h头文件有无均可,视自己的需求而决定!!
6、生成对应的.so扩展库:
在上一步配置好的情况下,我们进行如下配置:
使用phpize生成配置文件
然后使用find / -name php-config查找出php-config的路径,
最后使用 ./configure --with-php-config=刚才查找出来的路径
调用make LDFLAGS=-lmycalc进行编译
使用make install进行安装动态库
phpize
find / -name php-config
./configure --with-php-config=刚才查找出来的路径
make LDFLAGS=-lmycalc
make install
然后我们可以看见生成calc.so库及其位置:
然后我们进入该路径,使用
ldd calc.so
查看该动态库的链接状态:我们可以发现其中libmycalc.so显示not found,但是我们已经将其放入了/usr/local/lib文件库中,可能是由于未刷新的原因,我们使用/sbin/ldconfig来刷新配置,在这之后我们再次使用ldd calc.so来查看链接情况即可发现此时链接问题得到解决;
7、 修改php.ini文件使其生效:
我们使用vi /usr/local/php/etc/php.ini来添加相应的配置使得calc生效:
我们在; extension_dir = "./"下面添加相应的路径和文件:
在对应的位置添加两行信息:
extionsion_dir = "生成的.so文件路径"
extionsion = “文件名”
然后我们使用lnmp restart重启(若不是使用lnmp一键安装则需要手动重启)
8、查验
我们若是使用lnmp一键安装的话,我们输入服务器的IP地址会出现如下画面:
然后我们点击phpinfo,在其中下滑,若是在Configuration下显示对应的动态库的名称,则配置动态库成功!!!: