• 【PHP】如何搭建PHP本地运行学习环境2022版


    一、PHP的运行方式

    你好,我是小雨青年,一名程序员。

    今天我们来学习如何在本地搭建PHP的运行环境,在这之前我们先来看下PHP的怎么跑起来的。

    前面我们提到过,PHP是一种脚本语言,不需要编译即可执行。

    1. 命令行运行

    在本地安装完成PHP之后,可以直接在命令行运行 php xxx.php运行文件。

    php test.php
    
    • 1

    这种场景一般用在临时执行脚本,或者需要定时任务调用。

    2. 服务器端执行

    作为Web服务端PHP,绝大多数还是作为Web服务的。

    目前Web端运行PHP有两种形式,这两种形式也分别对应了程序连接PHP的两种形式。

    • Apache模式,以Apache的模块运行
    • FastCGI模式,一般通过Nginx服务器调用

    关于这两种运行模式,我们会在后续详细说明,本篇的目的是教你如何在本地搭建起PHP的运行环境。

    二、整合套件,懒人必备

    1. wampserver

    Windows 平台上推荐使用的套件,支持切换PHP版本,自带MySQL数据库,并且支持比较老的WIn版本。

    这个套件是法国人开发的,官网支持英文。官网地址是 https://www.wampserver.com/en/ 。

    这里注意,我们在学习中免不了要下载一些的东西,建议你直接去找源头渠道,即官网,这样可以免去很多弯路,并且不会被错误的信息引导。

    image-20220823174841256

    2. phpStudy

    phpStudy 算是国内做集成环境很早的软件了,并且现在还在更新,现在叫小皮面板。

    官网链接 https://www.xp.cn/download.html

    image-20220823175228874

    3. MAMP

    MAMP 是 MacOS 上的集成环境,同时也有win版本。

    官网链接 https://www.mamp.info/en/mamp/mac/

    关于集成环境,友好的图形界面就是最好的教程,如果你对哪个操作有疑问,可以在评论下列出。

    如果你正在使用哪些集成环境,可以在评论区和我一起讨论。

    三、Docker,强烈推荐

    docker 的优势在于对于原生系统的入侵程度低,如果你的系统装的软件过于复杂,就会在原生安装的时候出现各种问题。

    还有一个原因,docker 作为开发环境,可以通过docker-compose.yml 放在代码库中,方便团队内成员同步开发环境,不管是更新配置文件还是增加redis或者memcached都很方便。

    使用Docker配置环境,你可以很清晰地知道你的PHP、Nginx的配置情况,并且因为和本地环境隔离,不会有冲突的风险。

    这是一份很完整的PHP的docker-compose配置,包括了

    • elasticsearch
    • kibana
    • php
    • nginx
    version: "3"
    services:
      elastic:
        image: elasticsearch:6.7.0
        ports:
          - "9200:9200"
        environment:
          - bootstrap.system_call_filter=false
        volumes:
          - ../elasticsearch-local/data:/usr/share/elasticsearch/data
        networks:
          web:
            ipv4_address: 172.25.0.3
      kibana:
        image: kibana:6.7.0
        environment:
          - I18N_LOCALE=zh-CN
          - ELASTICSEARCH_HOSTS=http://172.25.0.3:9200
          - ELASTICSEARCH_URL=http://172.25.0.3:9200
        ports:
          - "5601:5601"
        networks:
          - web
      php:
        image: crunchgeek/php-fpm:7.0
        volumes:
          - ./yii_env.php:/var/www/yii_env.php
          - ./php.ini:/usr/local/etc/php/php.ini
          - ./:/var/www/html
        networks:
          - web
      web:
        image: nginx
        ports:
          - "8001-8009:8001-8009"
        volumes:
          - ./yii_env.php:/var/www/yii_env.php
          - ./:/var/www/html
          - ./default:/etc/nginx/conf.d/default.conf
          - ./localcerts:/etc/nginx/certs
        networks:
          - web
    
    networks:
      web:
        ipam:
          driver: default
          config:
            - subnet: "172.25.0.0/16"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    那你可能要问了,诶,MySQL呢?我不需要elasticsearch啊?别急,下面我们一步步地从零开始编写属于自己的本地PHP的docker-compose文件。

    1. composer.yml的结构

    你要想使用docker作为开发环境,就需要简单了解一下docker和docker-compose文件的基本构成。

    Docker是一个容器平台,可以把应用软件和基础架构区分开,并可以通过管理应用软件的方式管理基础架构,可以理解为配置即服务。下图为Docker的架构图,你可以看到,Docker占用的系统资源相对于虚拟机来说更少。

    docker与虚拟机的区别

    什么是docker-compose呢?你可以理解为对docker命令的打包,由于一套环境涉及到多种软件,并且会挂载到不同目录和不同的配置,那么docker-compose就可以把所有相关的配置放在一个文件中,这样仅需一个命令即可启动整套环境。

    version: "3"
    
    • 1

    最新的版本已经弃用,version 指的是docker使用的版本,目前的最新版本是3.8,如果你对于docker的要求不高,建议你使用上面的版本描述,在没有小数点的情况下,这样的写法默认是version: "3.0"

    services:
    
    • 1

    services 是 docker-compose 中必需的内容,是你的应用程序需要的服务,每个服务里可以配置使用的镜像、挂载、配置文件,docker-compose中存在多个服务,都可以单独配置。

      php:
        image: crunchgeek/php-fpm:7.0
        volumes:
          - ./yii_env.php:/var/www/yii_env.php
          - ./php.ini:/usr/local/etc/php/php.ini
          - ./:/var/www/html
        networks:
          - web
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里我们可以看到,这个名为php的服务使用的镜像是crunchgeek/php-fpm:7.0,挂载了三个目录,分别是配置文件、项目的配置文件、项目文件,启用的网络名称是web

    networks:
      web:
        ipam:
          driver: default
          config:
            - subnet: "172.25.0.0/16"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    networks 是配置的网络,我这里是名为web的网络配置,也是上面php服务使用的,这里指定了子网ip,如果不需要可以不指定。

    2. LNMP环境的配置文件

    下面是一套完整的本地LNMP配置文件,你需要把他放在本地项目的根目录,然后修改项目入口文件位置即可使用。

    services:
      php:
        image: crunchgeek/php-fpm:7.0
        volumes:
          - ./:/var/www/html
        networks:
          - nmp
      mysql:
        image: mysql:5.7
        ports:
          - "3309:3306"
        volumes:
          - ./mysql/data:/var/lib/mysql/:rw
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: "123456"
          TZ: "Asia/Shanghai"
        networks:
          - nmp
      web:
        image: nginx
        ports:
          - "8010:8010"
        volumes:
          - ./:/var/www/html
          - ./default:/etc/nginx/conf.d/default.conf
        networks:
          - nmp
        depends_on:
          - mysql
    networks:
      nmp:
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    同级目录下的nginx配置文件default,你也可以把他放在单独的文件夹内。

    server {
        listen          8010;
        index           index.php index.html;
        server_name     _;
        root            /var/www/html;
    
        location /status {
                fastcgi_pass  php:9000;
                fastcgi_param  SCRIPT_FILENAME  $fastcgi_script_name;
                include fastcgi_params;
        }
    
        location / {
                try_files $uri $uri/ /index.php?$args;
        }
    
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass php:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    Nginx对外暴露端口为8010,浏览器可以访问。

    image-20220824110311802

    MySQL我们配置的对外暴露端口为3009,为的是和本地不冲突,也是可以访问成功的。

    image-20220824110711711

    MySQL的挂载目录为项目目录下的MySQL文件夹,但是实际项目中不推荐这样做,因为不同的开发人员的本地测试数据会不一样,不需要同步。

    image-20220824111039093

    四、虚拟机

    虚拟机这种方式不建议你作为本地开发环境使用,占用系统资源比较多,项目代码的更新也多麻烦一些。

    但是,虚拟机作为给实际项目的部署工作练手,是很好的方式。

    目前常用的虚拟机有一下几种

    • Virtualbox 。Oracle 出品的虚拟机,免费。推荐。 https://www.virtualbox.org/wiki/Downloads

    • Vmware 。 也是老牌的虚拟机,需要付费。 https://customerconnect.vmware.com/en/downloads

    • Parallels Desktop。MacOS专用的虚拟机,兼容性最好,也是需要付费的。 https://www.parallels.cn/products/desktop/trial/

    五、总结

    目前PHP网站的主流使用Nginx作为web服务,本地开发环境优先使用docker环境。

  • 相关阅读:
    聚观早报 | 理想L6正式发布;Meta发布Llama 3
    Text2SQL之不装了,我也是RAG
    10 个 Java Stream 神级技巧:编程更轻松、更高效
    Redis高可用之主从复制、哨兵、cluster集群
    Arduion 驱动 ADXL335三轴加速度计模块
    【Linux kernel基础】arch_initcall到底是怎么是一回事
    Python(1)——基础
    Spring IOC 容器:掌握 Spring 的核心技术
    NewStarCTF 2023 公开赛道 WEEK2|WEB 游戏高手
    D-Star 寻路算法
  • 原文地址:https://blog.csdn.net/diandianxiyu/article/details/126501991