lamp环境配置好后,调试yii遇到的坑

1.opcahe导致的php文件很长时间不更新,实际配置文件(opcache.revalidate_freq)写的60s,刚改成0。

opcahe是查看了phpinfo后看到的,是引入的:

Additional .ini files parsed  /usr/local/php/php.d/mongodb.ini, /usr/local/php/php.d/opcache.ini, /usr/local/php/php.d/redis.ini, /usr/local/php/php.d/xdebug.ini

参考文章:(一)opcache的检测文件更新的小坑(二)PHP 代码更新延迟 PHP代码没及时更新解决方案

2.lamp底下没有启动php-fpm,php正常运行。原理是:

# 以 module 方式加载 php 

# 指明 php 配置文件 php.ini 的位置

# 定义能够执行 php 的文件类型,即.php和.html的文件能执行PHP程序 

 AddType application/x-httpd-php .php .phtml

    AddType appication/x-httpd-php-source .phps

3.apache重启。

find / -name apachectl

找到路径。

/usr/local/apache/bin/apachectl restart

 参考:linux 下 apache启动、停止、重启命令

4.经过以上的折腾,不再只是浏览器显示“该网站无法正常运行”这样毫无价值的提示,报错信息出来了。

Warning: require(): open_basedir restriction in effect. File(/data/www/wx/vendor/autoload.php) is not within the allowed path(s): (/data/www/wx/backend/web:/tmp:/var/tmp:/proc) in /data/www/wx/backend/web/index.php on line 4 Call Stack: 0.0004 232160 1. {main}() /data/www/wx/backend/web/index.php:0 Warning: require(/data/www/wx/vendor/autoload.php): failed to open stream: Operation not permitted in /data/www/wx/backend/web/index.php on line 4 Call Stack: 0.0004 232160 1. {main}() /data/www/wx/backend/web/index.php:0 Fatal error: require(): Failed opening required '/data/www/wx/backend/web/../../vendor/autoload.php' (include_path='.:') in /data/www/wx/backend/web/index.php on line 4 Call Stack: 0.0004 232160 1. {main}() /data/www/wx/backend/web/index.php:0。

对了,我kill掉了php-fpm。不过开启了貌似也还是提示以上信息:

既然如此我们继续。

对了,在启动php-fpm的时候,出现如下提示:

[17-Jan-2018 16:38:13] NOTICE: fpm is running, pid 26430

[17-Jan-2018 16:38:13] NOTICE: ready to handle connections

显然不足以提供足够的信息来解决问题,因此修改php-fpm和php.ini对日志级别的一些参数配置,以提升日志级别,获取详细的错误信息。

搜索配置文件的中log关键字,或者根据文档或资料修改,一些方法或步骤如下:

/etc/php-fpm.conf文件,将日志级别从notice改动到debug。

log_level = debug

参考:解决phpMyAdmin在nginx+php-fpm模式下无法使用的问题

反馈如下:

[17-Jan-2018 16:52:22.753974] DEBUG: pid 26525, fpm_scoreboard_init_main(), line 40: got clock tick '100'

[17-Jan-2018 16:52:22.754294] ERROR: pid 26525, fpm_sockets_new_listening_socket(), line 191: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)

[17-Jan-2018 16:52:22.754304] ERROR: pid 26525, fpm_init(), line 72: FPM initialization failed

提示fpm已经启动。

通过start会报这个错,通过restart不会。所以用service php-fpm restart即可。

Warning: require(): open_basedir restriction in effect. 出现这个警告的原因是apache或者是php.ini中设置了php可以访问的目录权限导致的,我的apache中:

 

php_admin_value open_basedir

这个设置项之前是web目录,也就是外网才可访问的目录,很显然在上一层甚至上上层的php文件是不允许访问的,因此报错。将其改为项目所在根目录后,问题解决。

参考:(一)php错误提示 open_basedir restriction in effect 解决(二)open_basedir restriction in effect,解决php引入文件权限问题

问题解决。项目运行正常了。

5.yii依旧不正常运行。报错如下:

session_start(): Failed to initialize storage module: files (path: )

出现这个问题的原因还是上面的php执行目录权限的问题,默认的应该是根目录底下的tmp目录,将这个目录添加到执行权限路径中,问题解决。

原因分析:php5一个安全模式的bug,默认session的save_path是系统的临时目录,这样会要校验权限。

别忘了重启apache。

参考:(一)session_start(): Failed to initialize storage module 解决办法(二)Fatal error: session_start(): Failed to initialize storage module: files问题解决方法

6.配置apache和php.ini等,实现路由美化

httpd.conf配置文件中加载了mod_rewrite.so模块 //在APACHE里面去配置 
#LoadModule rewrite_module modules/mod_rewrite.so把前面的警号去掉

基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。

基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性(httpd.conf中的Option FollowSymLinks)且在.htaccess里要声明RewriteEngine on。

我是在的虚拟目录,开启的重写,并在web目录也即index.php同级目录加了.htaccess,内容如下:

 

<IfModule mod_rewrite.c>

RewriteEngine on

Options +FollowSymlinks

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule . index.php

</IfModule>

【【【网友提供的另一种方法,在php.ini中找到 ;cgi.force_redirect = 1,去掉前面的分号并且把后面的1改为0】】】测试过貌似不管用,或者单独这个选项不能起作用。

yii urlManager配置代码:

'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => false,
'showScriptName' => false,
'suffix' => '',
'rules' => [
"<controller:\w+>/<id:\d+>"=>"<controller>/view",
"<controller:\w+>/<action:\w+>"=>"<controller>/<action>"
],
],
总结来说,apache引入重写模块,虚拟主机开启重写,目录级.htaccess中写重写规则,隐藏入口脚本,yii配置中配置脚本隐藏,一切ok,只欠东风。
参考:(一)Apache Rewrite规则详解(二)apache配置伪静态隐藏index.php文件
posted @ 2018-01-17 17:11  菜鸟江太公  阅读(389)  评论(0)    收藏  举报