配置 php7 + Nginx
最近在看人工智能相关的知识,无意中发现了一个巨牛的 人工智能教程,分享一下给大家。
教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点 这里 可以直接看教程。
PHP7
之前为了配合完成一个项目(PHP 版本为5.6),在本机搭建了 PHP56 的环境,后面自己系统升级为 macOS High Sierra
,发现系统自带的 PHP 版本已经是 7.1 了,于是就开始使用系统自带的 PHP 版本了。
1 | php -v |
显示 PHP 版本信息,如下:
1 | PHP 7.1.16 (cli) (built: Apr 1 2018 13:14:42) ( NTS ) |
系统自带的 PHP7.1 没有默认的 php.ini
文件,执行下面命令查找一下:
1 | php -r "echo php_ini_loaded_file();" |
此时并没有打印对应的配置文件信息。需要我们手动去复制一份:
1 | sudo cp /private/etc/php.ini.default /private/etc/php.ini |
再次执行上面命令,即可看到配置文件的绝对路径了。或者执行 php --ini
1 | php --ini |
这里有个问题需要注意,php.ini
文件复制成功后,需要下面两步操作,否则在 php 代码发生致命错误的时候,页面不会输出任何内容,只是报 HTTP ERROR 500
的错误。
第一步,修改 php.ini
文件的权限,否则无法编辑保存,默认是只读属性。
1 | sudo chmod 777 /private/etc/php.ini |
第二步,编辑 php.ini
文件,将 display_errors = Off
改为下面 on
即可。
1 | display_errors = On |
记得每次修改完配置文件,需要重启 php-fpm
和 nginx
服务。
PHP56
1. 安装 PHP56
可以参考下面两篇文章。
2. 卸载(删除)PHP56
执行 brew uninstall
1 | brew uninstall php |
即可完成卸载。
如果卸载遇到问题,就打开 /usr/local/Cellar/
目录,删除对应的 PHP 目录即可。
配置 php-fpm
现在新版本的 PHP 其内核已经集成了 php-fpm,我们不需要另外安装了。
配置 php-fpm 配置文件
1 | sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf |
修改配置文件
1 | sudo vi /private/etc/php-fpm.conf |
找到 error_log 项,添加下面两个配置项,如下:
1 | error_log = /usr/local/var/log/php-fpm.log |
如果不配置上面的配置项,启动 php-fpm 会报错:
1 | ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2) |
接下来, 继续配置,将 www.conf.default
复制一份命名为 www.conf
即可。
1 | cd /private/etc/php-fpm.d/ |
不配置上面的,会报如下错误:
1 | ERROR: No pool defined. at least one pool section must be specified in config file |
至此,可以启动 php-fpm 了,执行下面命令:
1 | sudo php-fpm -D |
不出意外的话,已经成功启动,可以使用下面命令查看端口使用情况
1 | netstat -an | grep 9000 |
如果你在启动 php-fpm 遇到下面的错误:
1 | ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48) |
有两种方式解决这个问题
**1.**修改 php-fpm 使用的端口号
1 | sudo vim /private/etc/php-fpm.d/www.conf |
将 listen = 127.0.0.1:9000
改为 listen = 127.0.0.1:9001
即可。
**2.**杀掉9000端口占用的进程
关闭所有之前启动的 php-fpm
1 | killall php-fpm |
找到占用端口的进程号
1 | netstat -an | grep 9000 |
然后 kill -9 pid
,重新启动 php-fpm 即可。
安装和配置 Nginx
1 | brew install nginx |
创建文件
1 | mkdir -p /usr/local/var/log/nginx |
1 | sudo mkdir -p /var/www |
改变 nginx.conf 配置文件
该配置文件在 /usr/local/etc/nginx/nginx.conf
下面.
我的配置:
1 | worker_processes 1; |
注意:
1 | location / { |
配置了我的 web 目录和支持的文件.
运行 PHP
创建 index.php
启动 php-fpm
1 | sudo php-fpm |
或者以守护进程的方式来启动 PHP-fpm
1 | sudo php-fpm -D |
- 启动 Nginx
1 | sudo nginx |
- 编辑 index.php
在 web 目录(我配置的) ~/projs/phpdev/nginx/nginx_sites/
新建文件 index.php
.
index.php 里面可以编写代码:
1 | <!-- lang: php --> |
打开浏览器, 输入地址:http://localhost:8080/index.php 你会看到下面的页面:
也可以在该目录下创建其他 PHP 文件, 如 m.php
文件.
浏览器中输入 http://localhost:8080/m.php 可以执行相对应的文件.
注意:这里的 m.php
是新建的 PHP 文件.
重要文件
1. php 配置文件
1 | /private/etc/php.ini |
2. nginx log 文件
1 | /usr/local/var/log/nginx/access.log |
3. nginx 配置文件
1 | /usr/local/etc/nginx/nginx.conf |
4. php-fpm 配置文件
1 | /private/etc/php-fpm.d/www.conf |
常见问题
502 bad gateaway
我是经常看到这个问题,但是每次引起的原因又不太一样,绝大部分是因为 php-fpm
启动不了或者是其端口错误导致的。
这种情况下,建议去看 /usr/local/etc/nginx/logs/error.log
日志文件。
例如下面的错误:
1 | [error] |
最终,我修改了 /private/etc/php-fpm.d/www.conf
中端口为 9000
(我之前将该端口修改了其他的),重启 php-fpm
解决问题。
扫码关注,你我就各多一个朋友~