嵌入式设备PHP版本升级
背景
- Platform: IMX6Q
- OS: Linux-QT5
- Kernel: 4.1.15
需求
我们的设备在漏洞扫描中报了很多PHP的漏洞,以前使用的是PHP5,因此需要将PHP升级到最新版本.
PHP交叉编译
我使用的是目前最新的版本php-7.3.12
, 其他版本可能大同小异
配置
./configure --host=arm-poky-linux-gnueabi --prefix=xxx/php-arm --disable-all --enable-session --without-sqlite3 --with-zlib --without-iconv --enable-json --enable-sockets --enable-fileinfo --enable-cli --enable-cgi --enable-fpm --disable-phpdbg --with-config-file-path=/etc
说明:
--enable-session --enable-json --enable-sockets --enable-fileinfo
: 因为我们的web网页需要用到Session, json文件操作(主要是配置文件),socket通信(和应用程序通信),和获取升级文件信息--with-config-file-path=/etc
: PHP的配置文件(php.ini)的路径- 这些配置需要根据实际需求来enable和disable.
编译安装
#编译
make
#安装到安装目录
make install
#精简文件大小
arm-poky-linux-gnueabi-strip xxx/php-arm/bin/*
最后将需要的文件拷贝到自己的文件系统,这里主要是php-cgi
问题
上传文件失败的问题
$_FILES为空,is_uploaded_file()返回false
- 检查配置文件
php.ini
路径
编译配置里面配置--with-config-file-path=/xxx/xxx
选项,并将php.ini
在此路径 - 检查配置文件
php.ini
里面的相关配置
主要是以下几个配置:file_uploads = On upload_max_filesize = 200M max_file_uploads = 20 default_socket_timeout = 60 post_max_size = 250M
file_uploads = On
:使能文件上传
upload_max_filesize = 200M
: 上传文件的大小限制
post_max_size = 250M
: POST的数据最大字节长度, 一般要大于等于max_file_uploads
,才能实现大文件上传
PHP配置文件未加载的问题
phpinfo()
提示:Loaded Configuration File => (none)
- 确认configure有配置
--with-config-file-path=/xxx/xxx
- 用
strace
跟踪:strace php-fpm -i 2>test.log
, 加载配置文件的路径不是我们配置的 - 最后
make clean
下重新编译解决。。。
解决html网页有显示,但执行老8531的PHP报错(500)的问题:
PHP相关插件未编译安装,比如json,zip等
参考
https://notes.z-dd.online/2019/08/05/Android内嵌web服务器/
https://notes.z-dd.online/2019/06/19/嵌入式Web服务器/
评论