一、配置nginx,Apache支持pathinfo模式
phpinfo模式就是类似这样的路径:http://47.9.1.3/index.php/home/index/action/3408.html。从中可以看出其有以下几个特点。
1,URL中带有入口文件全名,即index.php,
2,在入口文件后面依然跟有路径比如上面的/home/index/action/3408.html
3,很多框架中后面分别是/模块/控制器/方法参数等,Thinkphp就是这样的。当然这个不一定非得是模块控制器方法的组成。
按照常理来理解,index.php后面跟随着路径,那么index.php就相当于一个文件夹了。但实际上又不存在index.php这个文件夹,所以如果没有开启phpinfo模式,那么这个路径解析就会报找不到文件。
而只有在开启phpinfo模式之后,服务器才会去执行index.php这个文件。从服务器上的配置方法也可以看出来。
下面是nginx服务器开启phpinfo模式的方法:
location ~ [^/]\.php(/|$)
{
# comment try_files $uri =404; to enable pathinfo
#try_files $uri =404; #把这行代码注释,让服务器不尝试去加载路径文件
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf; #加载phpinfo.conf配置
}
重启nginx服务器即可。对于Apache服务器,需要先加载rewrite模块,将http.conf中的配置AllowOverride None将None改为 All,在.htaccess文件中加入
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
重启Apache即可。publish:April 14, 2015 -Tuesday
二、php-fpm常用重启、启动、停止命令
PHP-fpm的启动,直接执行php-fpm的绝对路径即可。建议打开php配置文件中的pid文件(以方便获取进程id值)。如果把php-fpm写入了服务,也可以使用service php-fpm start或/etc/init.d/php-fpm start来启动。另外php-fpm也可以使用信号控制:php-fpm的master主进程可以理解以下信号:
INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块
测试如下:
[root@kermit ~]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@kermit ~]# php -v
PHP 5.3.28 (cli) (built: Jul 21 2016 17:44:48)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
with Zend Guard Loader v3.3, Copyright (c) 1998-2010, by Zend Technologies
[root@kermit ~]# ps -ef |grep "php-fpm: master process" | grep -v 'grep'
root 18541 1 0 09:35 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
[root@kermit ~]# kill -USR2 18541
[root@kermit ~]# ps -ef |grep "php-fpm: master process" | grep -v 'grep'
root 18610 1 0 09:36 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
[root@kermit ~]# service php-fpm status
Usage: /etc/init.d/php-fpm {start|stop|force-quit|restart|reload}
[root@kermit ~]#
我的php版本是5.3.28。使用命令:kill -USR2 18541 平滑重启了php-fpm进程,并生成了新的进程ID。如果打开了pid文件,则可以直接使用cat获取pid文件中的进程ID值,如我下面的php-fpm配置:
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
这样就可以直接使用以下命令来操作:
[root@kermit ~]# cat /usr/local/php/var/run/php-fpm.pid
18610
[root@kermit ~]# kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
[root@kermit ~]# ps -ef |grep "php-fpm: master process" | grep -v 'grep'
root 18801 1 0 09:47 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
[root@kermit ~]#
注:php5.3.3以后源码中已经内嵌了php-fpm,不用再打php-fpm补丁,只需要在configure的时候添加编译参数 –enable-fpm –with-fpm-user=www –with-fpm-group=www –with-libevent-dir=libevent位置。
但是,php5.3.3以后的php-fpm不再支持php-fpm以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令。