开始配置Nginx支持PHP。
建议:为PHP与nginx运行设置一样的用户、用户组。为了安全起见把php安装目录设置为root用户(755)。
总感觉使用nobody、nogroup不好,因为有可能其他的服务进程也会用到。更换哪一个呢?楠神发现ubuntu中有www-data用户、www-data用户组,Apache默认的就是使用的这个,我就把Nginx、PHP也改成www-data用户、用户组吧。如果你的Linux系统中没有www-data用户、用户组,可以自己动手建一个,名称不限。
①修改php-fpm配置
vi修改/usr/local/php/etc/php-fpm.d/www.conf
我们重启下php-fpm,怎么重启呢?
php 5.3.3 以后的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,所以我们需要用kill(信号)控制。
#php-fpm 关闭: kill -INT `cat /usr/local/php/var/run/php-fpm.pid` #php-fpm 重启: kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid` #注意是反引号,不是单引号。
php-fpm子进程已变成www-data用户启动。
②修改Nginx配置
vi nginx目录/conf/nginx.conf
第一处:
因为楠神的服务器是2核的,设置两个工作进程。
第二处:
多加index.php作为默认首页。
第三处:
去掉注释,改成:
location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; try_files $uri = /404.html; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
保存好Nginx配置文件
nginx目录/nginx -s reload 重启nginx
查看下Nginx能不能执行PHP文件。
③执行PHP文件
打开浏览器:
OK,成功了!nginx可以执行PHP文件了。
扩展阅读《nginx中try_files》、《Nginx配置禁止IP直接HTTP/HTTPS访问》、《nginx日志按天数进行保存》、《nginx安全设置——限定PHP脚本运行》
不通过Nginx在命令行直接用解释器执行PHP脚本文件(cli模式):
我们安装完PHP,有两个常用的执行文件:/usr/local/php/sbin/php-fpm、/usr/local/php/bin/php
/usr/local/php/sbin/php-fpm 启动PHP进程的可执行文件
/usr/local/php/bin/php 是PHP解释器
执行/usr/local/php/bin/php,把PHP脚本文件当成参数
PHP脚本文件可以正常执行。
使用别名简化:
alias php='/usr/local/php/bin/php' php test.php
当前Linux用户使用的命令解释器是/bin/bash,也可以在/bin目录中添加一个软连接
ln -s /usr/local/php/bin/php /bin
先去掉PHP命令别名:
PHP脚本文件可以执行,这样“php”可以当成一个命令来使用了。哈哈。
用PHP命令执行PHP脚本文件,脚本文件中可以使用类似“require_once”文件加载控制语句,唯一与在Nginx中执行PHP脚本文件不一样的地方:
给PHP脚本文件传参,无法模拟http中以post、get方式传参。
但可以使用$_SERVER['argv']接收参数
备注:$_SERVER['argv']、$_SERVER['argc']在命令行下可以使用如下代码替代:
global $argv;//先用global关键字声明,$argv的值 == $_SERVER['argv'] global $argc;//先用global关键字声明,$argc的值 == $_SERVER['argc']
有个地方需要说明白,php解释器执行PHP脚本文件,PHP脚本文件需要有读权限即可,不需要给它分配执行权限。此处,两个“执行”所表达的意思不一样。
第一个“执行”是翻译、解释的意思【PHP脚本文件要有可读权限】,第二个“执行”是运行的意思【PHP解释器文件(/usr/local/php/bin/php)要有可执行权限】。
其他注意的地方:
1)php脚本文件的名称有没有“.php”后缀无所谓,只要求文件的内容符合PHP语法。
2)脚本运行时间默认是0,它不受php.ini配置文件限制。这个可以写个PHP脚本,用phpinfo函数打印下即可验证:
通过Nginx执行PHP脚本的phpinfo函数
直接使用PHP解释器执行phpinfo函数
3)注意当前执行PHP解释器用户的权限问题
扩展阅读《简述PHP的标准输入与输出》