开发环境配置
经常看到有朋友发帖问某某环境下的某某问题,各种 homestread、vagrant 报错提问(说实话这玩意报错各有各的不同,很难靠一张截图或几行提示解决)。这里给出 PHP 和其他中间件的安装方式,各位同学可以组合使用,编译那块需要同学有一定的排错能力
PS 之前写的有些谬误,我记错了以为 Mac 也有预编译二进制文件,今天增加了:Linux/Mac 下编译 PHP 和使用 docker-compose 部分
PHP 运行环境
window 下运行 PHP
PHP 运行的话一般要搭配 web 服务器(apache、nginx等),但从 5.4 起,PHP 内置了服务器(绝不能用于生产环境),可以配置开发环境
官网下载你需要的版本(选 vc2015x64NonThreadSafe)版本,下载并解压到你想要存放的目录,假定为
c:/soft/php74
,该目录即解压后根目录。配置环境变量
window10
1.依次进入控制面板-系统和安全-系统-高级-环境变量
2.在系统变量中找到 Path 点编辑,然后新建,将c:\soft\php74
目录添加进去
3.查看是否安装成功,打开 cmd,输入php -v
,如果显示了版本号则成功window7
与 window10 类似,但界面没那么友好,找到环境变量后,在当前环境变量后面手动增加
;c:\soft\php74
使用
1.php 配置文件,在c:\soft\php7.4
下将php.ini-development
文件复制为php.ini
2.项目根目录(有index.php
)的那个目录启动服务器php -S localhost:8080
备注
PHP 是与平台高度耦合的,所以你需要安装你下载的版本对应的 C 库,如下载 vc2015,你需要去微软官网下载 x86vc2015和amd64vc2015安装扩展
扩展首选 composer 包,composer 包是使用 PHP 语言实现的,是在 PHP 上抽象的,不依赖于平台
而 PHP 扩展则与系统耦合,依赖于系统和对应库的能力。所以有些扩展是在特定操作系统下是找不到的
安装扩展流程:到 pecl 官网搜索扩展,点击去看,找到对应的版本,点击
window图标DLL
(动态链接库)进去找到当前 PHP 版本的扩展下载(有 thread, non thread,x86,x64 区别,注意匹配 PHP 版本)解压后找到扩展的
.dll
文件,复制到刚才解压 PHP 文件夹下扩展文件夹,c:/soft/php74/ext
目录下修改
php.ini
文件,添加extension={extension_name}
验证
php -m
查看输出结果配置扩展(php 配置是一个 ini 文件,你可以这样配置扩展选项)
[extension] key = value
备注
有的扩展(比如 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 下编译演示
配置国内软件源,这个直接百度
# 前置软件安装 sudo apt install gcc autoconf make
下载 php-7.4.11.tar.xz,并解压,我这里目录是
/var/php-7.4.11
# 解压,其他后缀也可以使用该命令解压 tar -xf php-7.4.11.tar.xz
测试配置
编译条件测试,需要什么条件可以使用
./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 则成功
编译安装
make make install
配置 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
配置环境变量
vim ~/.bashrc
PATH=$PATH:/usr/local/php/bin
刷新配置
source .bashrc
安装扩展以 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 下库安装
添加国内源
安装 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 协议》,转载必须注明作者和本文链接
docker compose
博客:分享MacBook下laravel多版本docker开发环境配置方案