最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • PHP本地环境不会搭建,看这里!

    正文概述 转载于:掘金(言淦)   2021-01-17   466

    前言

    2021年第一篇,最近想用 php 搞个项目玩玩,但万万没想到倒在了环境搭建这一步。

    首先在网上冲浪一番后,你会发现PHP的搭建方式其实挺多(但有时候选择多并不是一件好事),目前常见的搭建方式有:Homestead(基于虚拟机)、XAMPP、MAMP、Laradock(基于Docker)等,但这些都比较重量级;轻量级的也有,比如 Valet,但之前试过 Valet 发现它会修改本地配置,典型如Nginx,而且在卸载的时候还不小心把Nginx配置全删了,顿时觉得不太可控,所以最后选择的方案是 Nginx + php-fpm,足够可用,同时也不会太重量级。

    注:本文基于 Mac 环境。

    安装流程

    • 1.检查 php 是否安装
    • 2.检查 composer 是否安装
    • 3.检查 laravel 是否安装
    • 4.检查 php-fpm 是否安装
    • 5.检查 nginx 是否安装
    • 6.设置多版本共存
    • 7.创建 laravel 项目并测试

    检查php是否安装

    现在比较新的 Mac 系统都会自带php以及php-fpm,如下:

    # 版本
    $ php -v
    PHP 7.3.11 (cli) (built: Jun  5 2020 23:50:40) ( NTS )
    Copyright (c) 1997-2018 The PHP Group
    Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
    
    # 执行路径
    $ which php
    /usr/bin/php
    
    # 配置文件
    $ ls /etc/php-fpm.conf
    /etc/php-fpm.conf
    
    # 实际的配置文件,因为 /etc/php-fpm.conf 使用了include关键字
    $ ls /private/etc/php-fpm.d
    www.conf         www.conf.default
    

    检查composer是否安装

    composer 是php的包管理器,类似 pip,这个Mac系统就没有自带,需要自己安装。

    # 安装
    $ brew install composer
    
    $ composer --version
    Composer version 1.9.0 2019-08-02 20:55:32
    

    检查laravel是否安装

    这个不是非必须,主要是后面会创建laravel项目,来测试php环境是否搭建成功,建议安装,后续你也会用到。

    # 安装
    $ composer global require laravel/installer
    
    # 测试
    $ laravel --version
    Laravel Installer 4.1.1
    

    检查nginx是否安装

    由于我搭建php环境选择的方案是 nginx + php-fpm,所以这里必须安装nginx(其实不管啥方案都会用到nginx,区别是自己安装,还是别人帮你安装好)。

    # 安装
    $ brew install nginx
    
    # 测试
    $ nginx -v
    nginx version: nginx/1.19.5
    

    多版本共存

    由于历史原因,很多项目的php版本并没有一个统一的标准,项目版本可能会在php5.6、php7.2,甚至php8.0之间跳跃,而版本的不一致则带来语法的不一致,导致出现一些奇怪的问题,所以多版本共存就显得非常重要。

    本次通过homebrew实现多版本并存,实现起来也比较简单,首先我们弃用Mac自带的php,全部使用brew安装的。

    安装php5.6

    # 安装
    $ brew install php@5.6
    
    # 配置环境变量 (可通过 brew info php@5.6 查看)
    echo 'export PATH="/usr/local/opt/php@5.6/bin:$PATH"' >> ~/.zshrc
    echo 'export PATH="/usr/local/opt/php@5.6/sbin:$PATH"' >> ~/.zshrc
    

    安装php7.2

    # 安装
    $ brew install php@7.2
    
    # 配置环境变量 (可通过 brew info php@7.2 查看)
    echo 'export PATH="/usr/local/opt/php@7.2/bin:$PATH"' >> ~/.zshrc
    echo 'export PATH="/usr/local/opt/php@7.2/sbin:$PATH"' >> ~/.zshrc
    

    php-fpm 配置不同端口

    多版本共存的核心是启动不同版本的 php-fpm,所以就要避免端口占用。

    为啥需要 php-fpm 呢?这也是我一开始疑惑的地方,这是因为PHP不像Javascript,可以直接被浏览器解析,所以当用户请求PHP程序时,会先经过Nginx,Nginx会通过php-fpm将请求转发到php解释器,并进行处理,具体可以参考这里

    # 配置文件路径可通过 brew info php@5.6 或者 brew info php@7.2 得到
    
    # php5.6 监听9001端口
    $ vim /usr/local/etc/php/5.6/php-fpm.conf
    listen = 127.0.0.1:9001 
    
    # php7.2 监听9002端口
    $ vim /usr/local/etc/php/7.2/php-fpm.d/www.conf
    listen = 127.0.0.1:9002
    

    启动服务

    # 启动php5.6
    brew services start shivammathur/php/php@5.6
    
    # 启动php7.2
    brew services start php@7.2
    
    # 查看
    $ ps -ef | grep php-fpm
    501 12981     1   0 11:35上午 ??         0:00.15 /usr/local/opt/php@5.6/sbin/php-fpm --nodaemonize
    501 12988 12981   0 11:35上午 ??         0:00.74 /usr/local/opt/php@5.6/sbin/php-fpm --nodaemonize
    501 12989 12981   0 11:35上午 ??         0:00.00 /usr/local/opt/php@5.6/sbin/php-fpm --nodaemonize
    501 13141     1   0 11:35上午 ??         0:00.14 /usr/local/opt/php@7.2/sbin/php-fpm --nodaemonize
    501 13148 13141   0 11:35上午 ??         0:00.17 /usr/local/opt/php@7.2/sbin/php-fpm --nodaemonize
    501 13149 13141   0 11:35上午 ??         0:00.00 /usr/local/opt/php@7.2/sbin/php-fpm --nodaemonize
    

    此时php多版本搭建完毕,通过后面的测试可以查看搭建是否成功。

    项目部署及测试

    本次我们会通过部署两个版本的laravel项目,从而测试上述多版本的正确性,以及让朋友们知道如何部署php项目。

    1.创建项目

    # 创建项目
    # laravel 5.2 要求的php版本最低是 5.5.9
    composer create-project laravel/laravel=5.2.* php56 --prefer-dist
    
    # laravel 5.6 要求的php版本最低是 7.1.3
    composer create-project laravel/laravel=5.6.* php72 --prefer-dist
    

    2.创建 blog56 的配置

    vim /usr/local/etc/nginx/servers/php56.conf
    
    server {
            # 监听的端口,也就是我们访问的端口
            listen       6001 default_server;
            server_name  127.0.0.1;
    
            # 默认网站根目录(www目录)
            root        /Users/xxx/PhpstormProjects/php56/public;
            access_log /Users/xxx/PhpstormProjects/php56/access.log;
            error_log /Users/xxx/PhpstormProjects/php56/error.log;
    
            location / {
                try_files $uri /index.php?$query_string;
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
    
            # PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.
            location ~ \.php$ {
                # 这个是我们上述设置的端口,9001会交由 php5.6 处理
                fastcgi_pass   127.0.0.1:9001;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
        }
    

    3.创建 blog72 的配置

    vim /usr/local/etc/nginx/servers/php72.conf
    
    server {
            # 监听的端口,也就是我们访问的端口
            listen       6002 default_server;
            server_name  127.0.0.1;
    
            # 默认网站根目录(www目录)
            root        /Users/xxx/PhpstormProjects/php72/public;
            access_log /Users/xxx/PhpstormProjects/php72/access.log;
            error_log /Users/xxx/PhpstormProjects/php72/error.log;
    
            location / {
                try_files $uri /index.php?$query_string;
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
    
            # PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.
            location ~ \.php$ {
                # 这个是我们上述设置的端口,9002会交由 php7.2 处理
                fastcgi_pass   127.0.0.1:9002;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
        }
    

    4.访问测试: 浏览器访问 http://localhost:6001/ 以及 http://localhost:6002/ 可以看到欢迎界面

    踩坑总结

    1.Nginx配置一定要加上 access_logerror_log,这样出错的时候才能定位到,因为很多情况下都是Nginx配置出问题!!!

    2.注意浏览器代理问题,很多人包括我习惯性在浏览器测试(GET请求),但有时候由于代理问题,请求会失败,这时可尝试在命令行,或者其他浏览器执行(个人经验)

    3.之前一开始配置时参考过一篇文章[《Laravel 项目部署,php-fpm 及 nginx 配置》],但是配置后会出现"访问直接下载index.php文件"的情况,原因是该文的Nginx配置有点问题:

    # 作者的配置(不能说他配置有问题,只能说大家环境不同)
    location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
    
    # 实际的配置
    location / {
            try_files $uri /index.php?$query_string;
        }
    

    解决方案参考:https://stackoverflow.com/questions/19285355/nginx-403-error-directory-index-of-folder-is-forbidden

    提醒:这里要给个提醒,很多人由于配置不正确(权限或者路径问题),导致访问失败,所以切记一定要加上 access_log 和 error_log,才能知道报了什么错!!另外,有时候可能由于代理问题,在浏览器直接测试可能会不成功。

    参考

    1.PHP安装配置篇-学院君
    2.mac中利用brew实现多版本php共存以及任意切换
    3.Mac下启动php-fpm问题解决


    起源地下载网 » PHP本地环境不会搭建,看这里!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元