开发环境配置

经常看到有朋友发帖问某某环境下的某某问题,各种 homestread、vagrant 报错提问(说实话这玩意报错各有各的不同,很难靠一张截图或几行提示解决)。这里给出 PHP 和其他中间件的安装方式,各位同学可以组合使用,编译那块需要同学有一定的排错能力

PS 之前写的有些谬误,我记错了以为 Mac 也有预编译二进制文件,今天增加了:Linux/Mac 下编译 PHP 和使用 docker-compose 部分

PHP 运行环境

window 下运行 PHP

PHP 运行的话一般要搭配 web 服务器(apache、nginx等),但从 5.4 起,PHP 内置了服务器(绝不能用于生产环境),可以配置开发环境

  1. 官网下载你需要的版本(选 vc2015x64NonThreadSafe)版本,下载并解压到你想要存放的目录,假定为 c:/soft/php74,该目录即解压后根目录。

  2. 配置环境变量

    • window10
      1.依次进入 控制面板-系统和安全-系统-高级-环境变量
      2.在系统变量中找到 Path 点编辑,然后新建,将 c:\soft\php74 目录添加进去
      3.查看是否安装成功,打开 cmd,输入 php -v,如果显示了版本号则成功

    • window7

      与 window10 类似,但界面没那么友好,找到环境变量后,在当前环境变量后面手动增加 ;c:\soft\php74

  3. 使用
    1.php 配置文件,在 c:\soft\php7.4 下将 php.ini-development 文件复制为 php.ini
    2.项目根目录(有 index.php)的那个目录启动服务器

    php -S localhost:8080
  4. 备注
    PHP 是与平台高度耦合的,所以你需要安装你下载的版本对应的 C 库,如下载 vc2015,你需要去微软官网下载 x86vc2015和amd64vc2015

  5. 安装扩展

    • 扩展首选 composer 包,composer 包是使用 PHP 语言实现的,是在 PHP 上抽象的,不依赖于平台

    • 而 PHP 扩展则与系统耦合,依赖于系统和对应库的能力。所以有些扩展是在特定操作系统下是找不到的
      安装扩展流程:

      1. 到 pecl 官网搜索扩展,点击去看,找到对应的版本,点击 window图标DLL (动态链接库)进去找到当前 PHP 版本的扩展下载(有 thread, non thread,x86,x64 区别,注意匹配 PHP 版本)

      2. 解压后找到扩展的 .dll 文件,复制到刚才解压 PHP 文件夹下扩展文件夹,c:/soft/php74/ext 目录下

      3. 修改 php.ini 文件,添加 extension={extension_name}

      4. 验证
        php -m 查看输出结果

      5. 配置扩展(php 配置是一个 ini 文件,你可以这样配置扩展选项)

         [extension]
         key = value
      6. 备注
        有的扩展(比如 amqp)还有一个对应软件库的 .dll 文件,这是软件客户端库,你需要把它复制到 C:\Windows\System32 这个目录。
        如果报错扩展找不到,把 php.ini 文件中的 extension_dir 配置为绝对路径

windows 下写代码始终要注意以下几项:

  • 文件编码使用 UTF-8
  • 使用常量代替系统对应硬编码,如 PHP_EOL 代替换行符,DIRECTORY_SEPARATOR 代替路径分隔符
  • 始终大小写敏感
    做到这几点,你的代码就可以移植到其他系统的 PHP 上运行了

现在开发环境中的 PHP 运行环境和 Web 服务器都已经解决了。对于中间件可以使用 docker 或云服务

Mac/Linux 下编译 PHP

之前没注意,以为 Mac 下也有预编译好的二进制执行文件。忘记了没有,需要自己编译,编译适用于 Linux,另外编译安装也是提高性能的方法之一(使用新编译器/PGO)。以下基于 Ubuntu20.04 下编译演示

  1. 配置国内软件源,这个直接百度

    # 前置软件安装
    sudo apt install gcc autoconf make
  2. 下载 php-7.4.11.tar.xz,并解压,我这里目录是 /var/php-7.4.11

    # 解压,其他后缀也可以使用该命令解压
    tar -xf php-7.4.11.tar.xz
  3. 测试配置

    编译条件测试,需要什么条件可以使用 ./configure --help 自行查看选择,enable 前缀是核心自带,不依赖于外部库,with 前缀需要外部库,此时需要安装依赖库一般为 sudo apt install libxml-dev 这种格式

    ./configure 
    --prefix=/usr/local/php   # 指定编译位置
    --enable-fpm       # 启用 fpm-sapi
    --enable-mysqlnd # 开启 mysqlnd
    --with-mysqli # 启用 mysql
    --without-sqlite3 # 不要支持 sqlite3

    出现 license 声明和 thank you 则成功

  4. 编译安装

    make
    make install
  5. 配置 daemon

    # /var/php-7.4.11/sapi 中拷贝对应 .serivce 文件
    sudo cp /make/path/php-fpm.service /lib/systemd/system/php-fpm.service
    # 配置
    sudo systemctl daemon-reload
    sudo systemctl enable php-fpm.service
  6. 配置环境变量

    vim ~/.bashrc

    PATH=$PATH:/usr/local/php/bin

    刷新配置 source .bashrc

  7. 安装扩展以 pdo_mysql 为例子

    # 进入源码文件夹 /ext/pdo_mysql
    cd /var/php-7.4.11/ext/pdo_mysql
    # 生成 configure 文件
    phpize
    # 编译选项
     ./configure --with-php-config=/usr/local/php/bin/php-config
    # 编译安装
    make 
    make install

    增加扩展配置,在 php.ini 文件中

    使用 php --ini 确定扫描配置的路径,在其中新增 php.ini 文件

    extension=pdo_mysql
Ubuntu 下库安装
  1. 添加国内源

  2. 安装 LNMP 软件

    sudo apt install php-fpm php-dev php-pdo php-mysqli php-mbstring php-curl nginx mysql

其他服务运行

docker 运行中间件
# mysql 中间件
docker run -d -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD={your-pass} mysql:{tag}
# redis
docker run -d -p 6379:6379 redis:{tag}

使用时直接使用 IP 加端口连接

docker-compose 运行所有软件

直接使用 docker-compose 配置 PHP 和各种中间件

docker-compose.yml

version: "3"
services:
  php:
    image: php:7.4.10-fpm-buster
    volumes:
      - {/your/app/root/path}:/var/www/html
  nginx:
    image: nginx:stable
    volumes:
      - {/your/app/root/path}:/var/www/html
    ports:
      - 80:80
  mysql:
    image: mysql:5.7
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=secret
  redis:
    image: redis:6.0.8-buster

按照最小暴露原则,只暴露 80 端口到外部,不需要配置什么网络、端口,compose 会帮你搞定。使用时代码中直接使用容器名加端口号就可以解析。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!