在LNMP1.4上部署WeiPHP5(ThinkPHP5)的若干问题处理

  • 时间:2019-06-11 01:42 作者:ChiefHYK 来源:ChiefHYK 阅读:611
  • 扫一扫,手机访问
摘要:1、多版本PHP问题起因:当初在服务器上安装LNMP1.4时PHP的版本默认为5.3,如今诸如opencart之类的大部分开源系统都建议PHP7以上了。问题难度:简单处理方案:LNMP模式支持多版本PHP,LNMPA、LAMP模式则不支持!要使用多PHP需要先安装多PHP版本,在lnmp1.4源码目

1、多版本PHP
问题起因:当初在服务器上安装LNMP1.4时PHP的版本默认为5.3,如今诸如opencart之类的大部分开源系统都建议PHP7以上了。
问题难度:简单
处理方案:LNMP模式支持多版本PHP,LNMPA、LAMP模式则不支持!要使用多PHP需要先安装多PHP版本,在lnmp1.4源码目录下运行命令:

./install.sh mphp

按提醒选择要另外安装的PHP版本,只能选一个,要安装多个需要安装完成后再运行前面的安装命令。
安装完成之后,PHP7.1安装路径默认为/usr/local/php7.1/,php.ini文件路径为/usr/local/php7.1/etc/php.ini ,php-config文件路径为/usr/local/php7.1/bin/php-config,服务控制脚本为/etc/rc.d/init.d/php-fpm7.1

2、404/500错误
问题起因:在windows的WAMP上调试成功的WeiPHP移植到LNMP上不断出现404和500错误
问题难度:高
处理方案:WeiPHP的网络资料相当少,由于版本和环境的复杂性,又导致ThinkPHP查找到的信息不够准确,大约花费了两个工作日进行排查后确认为以下两个起因,一是ThinkPHP的web目录为public目录,需要访问上级目录的资源,二是rewrite规则的路由错误。

首先,在LNMP官方文档(https://lnmp.org/faq/lnmp-1-2-tools.html)中提供了一个防跨目录移除工具,可以先试试看
该工具可以快速的移除防跨目录的限制,在LNMP的tools目录下运行 ./remove_open_basedir_restriction.sh 按提醒输入虚拟主机目录回车确认就可。

其次,LNMP1.4的conf目录(/usr/local/nginx/conf/)下已经提供了所有需要使用到的规则文件,具体包括针对ThinkPHP的路由规则thinkphp.conf,针对php7.1以及php-pathinfo的enable-php-pathinfo.conf和enable-php7.1.conf,还有针对fastcgi的fastcgi.conf。这些文件都可以在vhost目录下的网站配置文件中引用,不需要自己敲配置命令了。各配置文件默认信息如下,大致和网络上搜索到的配置脚本基本相似:

enable-php7.1.conf

        location ~ [^/]\.php(/|$)        {            try_files $uri =404;            fastcgi_pass  unix:/tmp/php-cgi7.1.sock;            fastcgi_index index.php;            include fastcgi.conf;        }

enable-php-pathinfo.conf

        location ~ [^/]\.php(/|$)        {            fastcgi_pass  unix:/tmp/php-cgi.sock;            fastcgi_index index.php;            include fastcgi.conf;            include pathinfo.conf;        }

pathinfo.conf

fastcgi_split_path_info ^(.+?\.php)(/.*)$;set $path_info $fastcgi_path_info;fastcgi_param PATH_INFO       $path_info;try_files $fastcgi_script_name =404;

fastcgi.conf

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;fastcgi_param  QUERY_STRING       $query_string;fastcgi_param  REQUEST_METHOD     $request_method;fastcgi_param  CONTENT_TYPE       $content_type;fastcgi_param  CONTENT_LENGTH     $content_length;fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;fastcgi_param  REQUEST_URI        $request_uri;fastcgi_param  DOCUMENT_URI       $document_uri;fastcgi_param  DOCUMENT_ROOT      $document_root;fastcgi_param  SERVER_PROTOCOL    $server_protocol;fastcgi_param  REQUEST_SCHEME     $scheme;fastcgi_param  HTTPS              $https if_not_empty;fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;fastcgi_param  REMOTE_ADDR        $remote_addr;fastcgi_param  REMOTE_PORT        $remote_port;fastcgi_param  SERVER_ADDR        $server_addr;fastcgi_param  SERVER_PORT        $server_port;fastcgi_param  SERVER_NAME        $server_name;# PHP only, required if PHP was built with --enable-force-cgi-redirectfastcgi_param  REDIRECT_STATUS    200;#fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";

关键的地方有三点:
1)从enable-php-pathinfo.conf文件可以看出来,LNMP使用pathinfo的方式是sock方式,而不是许多方案里的fastcgi_pass端口的方式(部分网上的文档里还把fastcgi_pass拼错了)。
2)LNMP只给默认安装的PHP版本提供了pathinfo的配置文件,通过比对enable-php.conf和enable-php-pathinfo.conf文件,会发现enable-php.conf多了一句try_files $uri =404;,少了一句include pathinfo.conf;
因而可以仿造enable-php-pathinfo.conf给新安装的PHP7.1也创立一个enable-php7.1-pathinfo.conf文件,内容如下:

        location ~ [^/]\.php(/|$)        {            #try_files $uri =404;            fastcgi_pass  unix:/tmp/php-cgi7.1.sock;            fastcgi_index index.php;            include fastcgi.conf;            include pathinfo.conf;        }

pathinfo.conf里对try_files做过定义,因而enable-php7.1-pathinfo.conf文件里需要注释try_files $uri =404;,否则重启php-fpm时会报错。
创立完后,在LNMP的vhost目录下对应的网站配置文件里引用就可。

        include enable-php7.1-pathinfo.conf;        include thinkphp.conf;

3)假如仍然出错,则可以尝试手动修改fastcgi的配置文件 /usr/local/nginx/conf/fastcgi.conf 或者php.ini文件,将网站base目录相对地址改为绝对地址。为了防止影响其余网站,也可以单独新建一个myfastcgi.conf文件来引用:

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/wwwroot/weiphpPath/:/tmp/:/proc/";

这里的weiphpPath是WeiPHP的根目录,也就是public的上级目录;假如PHP禁用了scandir函数,还需要修改 php.ini文件开启。

3、finfo_open函数(fileinfo扩展)安装
问题起因:0.9版本以后的LNMP逐渐禁止了少量危险的文件操作类型的扩展和函数,但WeiPHP需要使用fileinfo扩展的finfo_open函数。
问题难度:中等
处理方案:依次执行如下命令:(由于服务器安装了多个版本的PHP,路径和文件名需要按实际情况进行修改)

cd /home/heyk/lnmp1.4/src/tar xvf php-7.1.7.tar.bz2cd php-7.1.7/ext/fileinfophpize./configure --with-php-config=/usr/local/php7.1/bin/php-configmake && make install/usr/local/php7.1/etc/php.ini

在php.ini适当的位置(例如最后一行)上增加如下语句,重启php-fpm就可。

    extension=fileinfo.so
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2025含金量排名前十计算机专业证书(2025-10-15 20:51)
【系统环境|】你有白帽众测 我有黑帽雇佣(2025-10-15 20:50)
【系统环境|】印度理工学院成功开发出针对5G网络攻击的最新软件解决方案(2025-10-15 20:49)
【系统环境|】道德黑客与黑客教程(2025-10-15 20:49)
【系统环境|】苹果翻车!macOS 15 竟藏“后门”,黑客能直接偷你所有密码(2025-10-15 20:47)
【系统环境|】解密“被墙”玄学:为什么我的网络方案能做到长期稳定?(2025-10-15 20:46)
【系统环境|】NAS软路由/防火墙/网络安全需要注意哪些?如何保护你的网络设备(2025-10-15 20:45)
【系统环境|】你真的理解防火墙吗?(2025-10-15 20:44)
【系统环境|】苹果手机一键换机教程详解(2025-10-15 20:44)
【系统环境|】二手iPhone到手后怎么快速验机?(2025-10-15 20:43)
手机二维码手机访问领取大礼包
返回顶部