Linux下yaf+PHP7的环境搭建

如果环境中只有一个PHP版本,那直接配置Apache或者Nginx配置就行了。本文说的是如果是多个PHP版本,如何在Apache中配置一个指定PHP7版本的项目。

1.首先,需要Apache的mod_fcgid模块来支持运行多个PHP版本。

mod_fcgid的下载就是通过正常的下载tar包安装就可以了。这里有个坑就是APXS的问题:

wget   https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz   #下载

tar -zxvf mod_fcgid-2.3.9.tar.gz

cd mod_fcgid-2.3.9

APXS=/usr/local/apache/bin/apxs      ./configure.apxs

make

make install

就是上面那个配置apxs的步骤。至于apxs是什么,可以点这里详细了解一下。

坑就坑在,我这个机器上是通过rpm安装的httpd,根本就没有apxs这个工具。当然按理说通过rpm安装一下就OK了,但是,当我用命令

yum -y install httpd-devel

去安装的时候报错了。提示我httpd-devel和我安装的httpd版本不一致。。。

然后我用yum list httpd* 查看了一下,果然这个yum源下的httpd-devel工具和httpd不是一个版本。

已经安装的httpd是2.2.15-69。而我的yum源下是httpd-devel-2.2.15-59。这就坑了啊。然后我机会找遍了网上的其他yum源,也没找到httpd-devel-2.2.15-69版本。(当然这里如果是源码安装的方式是可以在configure的时候指定apxs)

然后就找啊找,终于在rpm的官方网站上找到了这个版本的rpm包。

RPM Search httpd-devel (pbone.net)

安装好apxs之后,就可以接着往下走,配置Apache

<VirtualHost *:88>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /var/new_rsync
ServerName 10.240.180.172
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common 
DirectoryIndex index.htm index.html index.php
AddHandler fcgid-script .fcgi .php
FcgidInitialEnv PHPRC "/usr/local/webserver/php-7.2.24" #php安装路径
FcgidWrapper "/usr/local/webserver/php-7.2.24/bin/php-cgi" .php #php-cgi脚本执行路径
SocketPath /etc/httpd/logs/fcgidsock


<Directory "/var/new_rsync">
php_admin_value open_basedir "/var/new_rsync:/tmp/"
Options Includes ExecCGI FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

然后再修改.htaccess文件,修改重写规则

<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>

 

至此,Apache下运行多版本PHP就完成了,打开浏览器能正常访问,以为万事大吉了。其实后面还有坑~

虽然,新的站点是在Apache下运行起来了,但是后面去运行yaf的时候又出幺蛾子了。

出现了下面的报错

PHP Fatal error: Class ‘/Yaf//Application’ not found

查了下发现是命名空间的问题,在本地的环境是开启命名空间的,所以yaf的继承核心类都是命名空间的方式。结果在Linux环境上一直提示找不到,查看php.ini上yaf的yaf.use_namespace已经是打开的状态。然后打印PHPinfo发现yaf.use_namespace的local value是开启,但是master value是空。然后看Apache的配置里也没有修改这个值的设置,然后怎么修改php.ini并且重启php-fpm和php-cgi都不好使,master value一直是空。最后没办法,直接是修改了yaf里的命名方式,换成了没有命名空间的方式。最终才可以正常访问了。

直接访问yaf默认路由是没问题的,但是访问自定义模块还是会报错,找不到对应的文件,说明还是解析yaf路由出现了问题。然后打印$_SERVER发现没有PATH_INFO这个属性,然后通过修改Apache的重写规则来解决,而且是必须写到项目根目录的.htaccess文件中,写到conf文件中不生效。就是这个规则  RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

至此,整个yaf+PHP7的环境才跑通~

 

 

 

 

 

 

 

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇