目录
- 1.1 Mac PHP 升级
- 1.2 Mac Nginx 安装
- 1.3 Laravel安装
- 1.4 打通环境
Mac PHP 升级到7.2
使用brew工具:
第一次安装可以直接以下命令:
brew search php #刷新php版本
brew install php72 #安装php7.2稳定版
之前用brew安装过php,需要先卸载之前的php,再执行前文的安装命令:
brew uninstall php
成功升级完成
从上图可看出成功安装后:
1. php 相关bin
php 安装在/usr/local/opt/[email protected]/bin目录下,
php-fpm 安装在/usr/local/opt/[email protected]/sbin目录下,
按照上图提示将php相关的bin、sbin目录 export放到source文件中的环境变量中,然后生效文件:”source ~/.zshrc“。
完成后可通过"php -v"确认新版本是否生效
2. php 相关配置文件
配置文件放在:/usr/local/etc/php/7.2
php.ini 是 php引擎的配置文件:主要用来控制php的某些功能,比如:错误提示,短标签,上传文件最大值,扩展等等可以通过php.ini文件设置
php-fpm.conf 是PHP-FPM进程管理器的配置文件
Mac Nginx安装
- brew update
- brew search nginx //查询要安装的软件是否存在
-
brew info nginx //此命令可查看当前环境是否安装了nginx,以及nginx的(预)安装信息
上图可以看出:
nginx在本地还未安装(Not installed),nginx的来源(From)
Docroot默认为/usr/local/var/www
在/usr/local/etc/nginx/nginx.conf配置文件中
默认端口被配置为8080
nginx将在/usr/local/etc/nginx/servers/目录中加载所有文件,
用命令 ‘nginx’ 来启动nginx。
-
brew install nginx //安装nginx
-
open /usr/local/etc/nginx/ //查看nginx配置目录
nginx.conf 是主要的配置文件,services目录是用来存放不同服务的具体配置的
open /usr/local/Cellar/nginx //nginx的安装目录
启动nginx,执行:nginx
-
浏览器访问localhost:8080 验证
若出现403
一般是因为:安装的nginx会默认在html(也就是/usr/local/var/www)目录下生成一个欢迎页面文件,而出现上面这种情况就是欢迎页面文件没有生成。
cat /usr/local/etc/nginx/nginx.conf
通过配置文件我们可以看到其默认的网站根目录为html(即/usr/local/var/www),而默认的索引文件为index.html 和 index.htm,
cd /usr/local/var/www/ //进入到www目录下
touch index.html //创建一个新的
index.html文件
vim index.html //编辑该文件,随便来几句html
:wq 保存信息
重新刷新localhost:8080 可看到你编辑的页面
Laravel安装(5.8)
laravel 对php扩展有一定的要求:
PHP >= 7.1.3
PHP OpenSSL 扩展
PHP PDO 扩展
PHP Mbstring 扩展
PHP Tokenizer 扩展
PHP XML 扩展
PHP Ctype 扩展
PHP JSON 扩展
PHP BCMath 扩展
php在模特步安装的时候,已经加载了这些扩展,可以使用命令查看当前自己环境的支持的扩展
php -m //查看当前自己环境的php支持的扩展
Laravel 使用 Composer管理依赖,所以,安装之前确保已经在机器上安装了 Composer
1. 在终端中执行以下命令下载Composer可执行文件,这会在当前目录下安装
curl -sS https://getcomposer.org/installer | php
2. 想全局生效需把composer.phar移到系统/usr/local/bin/目录下:
mv composer.phar /usr/local/bin/composer
laravel安装
1. 安装
composer global require laravel/installer
2. 将laravel的bin目录增加到PATH中:
目录:$HOME/.composer/vendor/bin
vim ~/.zshrc //打开source文件
在底部增加:export PATH="$HOME/.composer/vendor/bin:$PATH" //修改文件
wq! //保存
source ~/.zshrc //生效环境信息
安装完成后,只需通过 laravel new 命令即可在当前目录下创建一个新的 Laravel 应用
laravel new blog
cd 到blog的目录下:执行
php artisan serve // 访问http://localhost:8000 可查看项目
访问连接遇到问题:
1. 访问页面出现500错误
a. blog 目录权限问题 : chmod -R 775 ./blog
b. blog的err日志中" No application encryption key has been specified.", 这是由于新生成的代码没有".env"文件导致的:
cd blog
mv .env.example .env
php artisan key:generate
打通环境
上面三步,分别安装了php、nginx、laravel工程,并且实现了使用php启动laravel,下文将介绍如何 将nginx、larave、php打通,我们通过访问nginx的入口调用php引擎解析laravel项目,实现项目的访问。
php配置修改
忘记可通过 php --ini 查看配置路径
1. 修改 php.ini
vim /usr/local/etc/php/7.2/php.ini
搜索 ;cgi.fix_pathinfo=1 ,改为cgi.fix_pathinfo=0
2. 修改php-fmp配置
vim /usr/local/etc/php/7.2/php-fpm.d/www.conf
将;listen = 127.0.0.1:9000改为listen = /Users/xxx/webserver/var/php-fpm/php-fpm.sock;
将;listen.owner = nobody改为listen.owner = nobody
将;listen.group = nobody改为listen.group = nobody
将user = apache改为user = nobody
将group = apache改为group = nobody
nginx 配置修改
vim /usr/local/etc/nginx/nginx.conf //忘记可通过brew info nginx查看
user nobody; // 需要跟php配置中listen.owner,listen.group保持一致
worker_processes 1; //工作进程个数
error_log /Users/xxx/webserver/nginx_log/error.log; //nginx err日志存储路径,设置成自己的路径
pid /Users/xxx/webserver/nginx_log/nginx.pid;//nginx 进程pid存储路径,设置成自己的路径
events {
worker_connections 1024;//最大连接数
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; // 日志格式
access_log /Users/xxx/webserver/nginx_log/access.log main; //access日志存储路径,设置成自己的路径
sendfile on;
keepalive_timeout 65;
server {
listen 8080;
server_name localhost;
access_log /Users/xxx/webserver/nginx_log/host.access.log main; //设置成自己的路径
root /Users/xxx/webserver/laravel_app/blog/public; //web root目录,设置成laravel项目的public目录
index index.php; //入口文件
location / { //路由规则
try_files $uri $uri/ /index.php?$query_string;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /Users/xxx/webserver/laravel_app/blog/public;
}
location ~ \.php$ {
fastcgi_pass unix:/Users/xxx/webserver/var/php-fpm/php-fpm.sock; // fastcgi 设置成自己的php-fpm.sock的存放路径
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; //fastcgi_param
include fastcgi_params;
}
}
include servers/*;
}
重启服务
1.php-fpm启动
sudo php-fpm //fpm需要root角色启动,否则报错 [17-Jun-2019 08:11:17] ERROR: [pool www] failed to chown() the socket '/Users/xxx/webserver/var/php-fpm/php-fpm.sock': Operation not permitted (1)
- nginx 启动
sudo nginx //fpm 使用了root角色启动,生成的sock文件需要同样的权限访问,所以nginx也使用root启动最方便
访问http://localhost:8080/ 会出现laravel默认工程页面
其他问题:
问题1:nginx错误日志:2019/06/10 08:26:21 [error] 92105#0: *1 directory index of "/Users/xxx/webserver/laravel_app/blog/public/" is forbidden, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "127.0.0.1:8080"
解决:nginx的目录配置的有问题,查看nginx配置的root目录下是否有 index.php
问题2:php错误日志:2019/06/11 08:30:29 [error] 54823#0: *13 FastCGI sent in stderr: "Unable to open primary script: /scripts/index.php (No such file or directory)" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/Users/xxx/webserver/var/php-fpm/php-fpm.sock:", host: "127.0.0.1:8080"
解决:
a. nginx 和 php-fpm 配置需要使用同一个账号(上文中nobody部分) ,并且 php-fmp的目录需要授权给这个账号(chmod -R 777 php-fpm.sock)
b.nginx 配置问题
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 需要修改成fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
问题3:laravel错误日志 :The stream or file "/Users/xxx/webserver/laravel_app/blog/storage/logs/laravel-2019-06-11.log" could not be opened: failed to open stream: Permission denied
解决: laravel 目录没权限 :目录+777 权限