第1章 1.2 PHP 安装与环境配置
上章回顾:上一章我们聊了 PHP 是什么、以及 LAMP/WAMP 这些"技术套餐"。有个读者留言说"看完热血沸腾,想马上动手,结果卡在第一步——不知道咋装 PHP"。好,这章我们就来解决这个问题。


🎯 开场:为什么你装 PHP 总失败?
说个真实故事:小明在网上搜"PHP 安装",下载了三个软件、装了两个套件、最后电脑弹了一堆看不懂的报错,电脑小白直接懵了。
你的痛点是不是也这样?
- 不知道该装哪个(PHPStudy?XAMPP?手动编译?)
- 装完了不知道咋验证"到底装好没"
- 一运行就报错
php.ini找不到、扩展没加载
学完这章你能:
- 3 分钟内判断 PHP 有没有装好
- 独立完成 Windows/Mac/Linux 任一平台的 PHP 环境搭建
- 改 php.ini 解决最常见的扩展报错
🧱 基础:3 种安装方式,选哪个?
1.2.1 先搞清楚你要哪种"套餐"
我把 PHP 安装方式分成三类,对应三种人:
| 类型 | 适合谁 | 一句话特点 |
|---|---|---|
| 集成环境(如 phpStudy) | 纯新手,想快速跑起来 | 点按钮就行,10 分钟搞定 |
| 独立安装(如 Docker) | 有点折腾精神,想干净可控 | 环境隔离,删了就删了 |
| 手动编译 | 极客/服务器运维 | 从源码编译,定制化最高 |
大多数同学用第一种就够了,我重点讲。
1.2.2 方式一:phpStudy(Windows 最简单)
phpStudy 是个"一键安装包",自带 PHP + MySQL + Nginx/Apache,还带图形界面。
安装步骤(对着截图做,5 分钟):
- 百度搜
phpStudy官网,下载最新版(选 PHP 8.x 版本) - 解压,双击
phpStudySetup.exe,一路点"下一步" - 启动面板后,点"启动"按钮,等右下角绿灯亮起
验证安装成功:
打开电脑的记事本,输入以下代码,保存为 info.php(注意扩展名是 .php,不是 .txt):
<?php
phpinfo();
把这个文件扔进 phpStudy 的网站根目录(默认是 D:\phpStudy\PHPTutorial\WWW\),然后浏览器访问 http://localhost/info.php。
如果看到一页密密麻麻的 PHP 配置信息(如图1),说明安装成功了 🎉
这行代码在干嘛:phpinfo() 是 PHP 内置函数,专门用来"汇报"当前 PHP 的所有配置信息。新手不知道装好没?用它一查便知。
1.2.3 方式二:Docker 安装(Mac/Linux 推荐)
如果你用 Mac 或 Linux,或者想体验"干净环境",Docker 是个好选择。
核心概念先普及:Docker 可以理解成"软件集装箱"。你把 PHP 装进一个集装箱(容器)里,这个集装箱在哪都能跑,跟你电脑原本的环境互不干扰。
5 分钟搭建 PHP 8.x 环境:
打开终端,一条命令:
docker run -d -p 8080:80 --name my-php -v ~/my-php-projects:/var/www/html php:8.2-apache
解释一下这条命令:
| 参数 | 意思 |
|---|---|
-d |
后台运行,不占用你的终端 |
-p 8080:80 |
把容器的 80 端口映射到你电脑的 8080 |
--name my-php |
给这个容器起个名字叫 my-php |
-v ~/my-php-projects:/var/www/html |
把你的项目文件夹挂载进去 |
php:8.2-apache |
用 PHP 8.2 + Apache 的官方镜像 |
验证:
在 ~/my-php-projects 文件夹里新建 info.php,内容同上,浏览器访问 http://localhost:8080/info.php,看到配置页就 OK。
1.2.4 方式三:XAMPP/MAMP(跨平台可选)
XAMPP 和 MAMP 本质跟 phpStudy 一样,都是"集成包",区别在于:
- XAMPP:跨平台(Windows/Mac/Linux),Apache + MySQL + PHP + Perl
- MAMP:Mac 专用,界面漂亮,但功能跟 XAMPP 差不多
安装方式也是下载 -> 解压 -> 启动 -> 绿灯。这俩的好处是界面更专业,适合以后做正式开发。
1.2.5 php.ini 核心配置(装完必看)
PHP 装好了,但默认配置不一定适合你。最重要的就是 php.ini 文件。
找到 php.ini:
用 phpinfo() 页面搜 php.ini,会显示配置文件路径,或者在终端输:
php --ini
新手必改的 3 个配置:
打开 php.ini,找到对应行,改成下面这样:
; 显示错误信息(开发时开,上线后关)
display_errors = On
; 设置时区(不改的话,日期函数会差 8 小时)
date.timezone = Asia/Shanghai
; 文件上传大小限制(默认 2MB,改大点方便传图片)
upload_max_filesize = 10M
怎么找和改:php.ini 里用 ; 开头的是注释,找到对应行后删掉开头的 ; 就生效了。
改完保存,重启 PHP 服务(apache/nginx),再刷新 phpinfo() 页面,搜对应配置名看到值变了就说明生效了。
🔥 实战:3 个递进小项目
项目 1:5 分钟,写个"PHP 环境检测器"(跟抄就能跑)
场景:每次换电脑/重装系统后,都要检查 PHP 环境。与其每次手敲命令,不如写个脚本来自动检查。
完整代码(保存为 check_env.php):
<?php
echo "========== PHP 环境检测 ==========\n\n";
// 检测 PHP 版本
echo "PHP 版本:" . PHP_VERSION . "\n";
if (version_compare(PHP_VERSION, '8.0.0') >= 0) {
echo "✅ 版本达标(>= 8.0)\n";
} else {
echo "❌ 版本过低,建议升级到 8.0+\n";
}
// 检测必要扩展
$required_extensions = ['pdo', 'pdo_mysql', 'mbstring', 'json'];
echo "\n必要扩展检测:\n";
foreach ($required_extensions as $ext) {
if (extension_loaded($ext)) {
echo "✅ $ext 已加载\n";
} else {
echo "❌ $ext 未加载,请检查 php.ini\n";
}
}
// 检测时区
echo "\n当前时区:" . date_default_timezone_get() . "\n";
if (date_default_timezone_get() === 'Asia/Shanghai') {
echo "✅ 时区正确\n";
} else {
echo "⚠️ 时区可能是默认的,建议改成 Asia/Shanghai\n";
}
echo "\n========== 检测完毕 ==========\n";
预期输出:
========== PHP 环境检测 ==========
PHP 版本:8.2.10
✅ 版本达标(>= 8.0)
必要扩展检测:
✅ pdo 已加载
✅ pdo_mysql 已加载
✅ mbstring 已加载
✅ json 已加载
当前时区:Asia/Shanghai
✅ 时区正确
========== 检测完毕 ==========
这代码在干嘛:用 extension_loaded() 检查扩展有没有加载,用 version_compare() 比对版本号,用 date_default_timezone_get() 查时区设置。相当于一个"体检报告"。
项目 2:15 分钟,"一键配置生成器"
场景:每次装新环境都要改 php.ini,记不住该改哪些。小明想做一个工具,输入想要的配置,输出改好的 php.ini 内容。
完整代码(保存为 config_generator.php):
<?php
// 配置生成器:根据需求生成 php.ini 配置片段
$config = [
'display_errors' => 'On',
'date.timezone' => 'Asia/Shanghai',
'upload_max_filesize' => '10M',
'post_max_size' => '12M',
'max_execution_time' => 300,
'memory_limit' => '256M'
];
echo "以下是建议的 php.ini 配置:\n";
echo "(把以下内容复制到你的 php.ini 对应位置)\n\n";
foreach ($config as $key => $value) {
echo "$key = $value\n";
}
echo "\n--- 完整配置块 ---\n";
echo "; PHP 开发环境优化配置\n";
foreach ($config as $key => $value) {
if (strpos($key, '.') !== false) {
echo "$key = $value\n";
} else {
echo "$key = $value\n";
}
}
预期输出:
以下是建议的 php.ini 配置:
(把以下内容复制到你的 php.ini 对应位置)
display_errors = On
date.timezone = Asia/Shanghai
upload_max_filesize = 10M
post_max_size = 12M
max_execution_time = 300
memory_limit = 256M
--- 完整配置块 ---
; PHP 开发环境优化配置
display_errors = On
date.timezone = Asia/Shanghai
upload_max_filesize = 10M
post_max_size = 12M
max_execution_time = 300
memory_limit = 256M
扩展一下:如果想改成从命令行参数读取配置(比如 ./config_generator.php --timezone=America/New_York),可以用 $argv 数组接收。这个留给你自己折腾。
项目 3:15 分钟,"PHP 版本管理器"思路
场景:有时候要同时跑多个 PHP 版本(比如维护老项目用的是 5.6,新项目用的是 8.2)。这时候你需要"版本切换器"。
核心思路(不写完整代码,讲清楚逻辑):
1. 电脑上装多个 PHP 版本(通过 Docker 或 phpStudy 的多版本功能)
2. 用一个 JSON 记录每个版本的路径:
"5.6": "/usr/local/php5.6/bin/php",
"7.4": "/usr/local/php7.4/bin/php",
"8.2": "/usr/local/php8.2/bin/php"
3. 写个脚本读取这个 JSON,根据用户输入切换 symlink
Docker 下多版本共存更简单:
# 同时跑两个 PHP 版本
docker run -d -p 8080:80 --name php56 php:5.6-apache
docker run -d -p 8081:80 --name php82 php:8.2-apache
# 访问 localhost:8080 是 5.6,localhost:8081 是 8.2
这个思路在下一章讲"变量和数据类型"时会用到——我们可以把版本信息存在变量里,用数组管理。
💪 进阶:5 个新人必踩的坑
坑 1:文件扩展名写成 .php.txt
❌ 错误:保存文件时系统自动加了 .txt,或者压根没注意到扩展名变了
✅ 正确:文件管理器里显示"info.php",不是"info.php.txt"。如果看不到扩展名,百度搜"win10 显示文件扩展名"
坑 2:php.ini 改了不生效
❌ 错误:改完 php.ini 直接刷新浏览器,发现配置没变
✅ 正确:php.ini 改了必须重启 PHP 服务。集成环境点"停止"再"启动",Docker 里 docker restart my-php
坑 3:路径用了反斜杠
❌ 错误(Windows):D:\phpStudy\WWW\info.php —— 浏览器访问时反斜杠会出问题
✅ 正确:要么用正斜杠 D:/phpStudy/WWW/info.php,要么用双反斜杠 D:\\phpStudy\\WWW\\info.php
坑 4:docker 端口被占用
❌ 错误:docker run 报 端口已被占用 或 Bind for 0.0.0.0:8080 failed
✅ 正确:先停掉占用端口的程序,或换一个新端口(比如 -p 9090:80)
坑 5:phpinfo() 找不到
❌ 错误:浏览器访问 http://localhost/info.php 显示 404 或空白
✅ 正确:确认文件在正确的网站根目录,且 Apache/Nginx 已启动(phpStudy 面板要亮绿灯)
调试技巧:最朴素的 var_dump
遇到变量不知道值对不对?var_dump() 是 PHP 新手最好的调试工具:
$name = "小明";
$age = 18;
var_dump($name, $age);
输出:
string(6) "小明" int(18)
能看到类型和值,比 echo 只能输字符串强一百倍。
✏️ 练习题
练习 1(2 分钟):版本检测
- 输入:运行 php -v 或写脚本输出 PHP_VERSION
- 预期输出:显示当前 PHP 版本号
- 提示:直接用 echo PHP_VERSION;
练习 2(3 分钟):扩展检测增强
- 输入:在项目 1 基础上,加一个检测 curl 扩展
- 预期输出:多了"✅ curl 已加载"或"❌ curl 未加载"
- 提示:把 curl 加入 $required_extensions 数组
练习 3(5 分钟):配置生成器加功能
- 输入:给项目 2 加一个"内存限制"配置项 memory_limit = 512M
- 预期输出:配置块里多了这一行
- 提示:在 $config 数组里加一行 'memory_limit' => '512M'
练习 4(8 分钟):串联检测+生成
- 输入:用项目 1 的方法检测当前环境,根据检测结果自动生成配置建议
- 预期输出:如果检测到 PHP < 8.0,配置里不要加 readonly 相关特性
- 提示:用 if (version_compare(PHP_VERSION, '8.0.0') < 0) 判断
练习 5(5 分钟):报错分析
- 输入:用户报错 Fatal error: Call to undefined function phpinfo() in D:\www\info.php on line 2
- 预期输出:说出哪里错了、为什么、怎么修
- 提示:检查 PHP 有没有装、扩展有没有加载
作业:做一个「PHP 环境一键安装脚本」
- 需求描述:写一个 batch(Windows)或 shell(Mac/Linux)脚本,双击运行后自动检测/提示/引导安装 PHP 环境
- 功能点:
1. 检测当前系统是否有 PHP(命令行php -v)
2. 检测端口 80/8080 是否被占用
3. 根据检测结果输出"诊断报告"和"下一步建议" - 加分项:
1. 能自动下载 phpStudy 便携版
2. 能生成启动批处理文件 - 验收标准:在没装 PHP 的电脑上运行脚本,输出有意义的诊断信息
- 提交方式:评论区贴关键代码片段
📚 总结
本文学了 3 件事:
- PHP 有三种安装方式,新手用 phpStudy 最简单
- 装完用
phpinfo()验证,用 php.ini 调配置 phpinfo()、扩展检测、配置生成器是三个实用小工具
延伸资源:
- PHP 官方文档 - 安装(最权威,但有点啰嗦)
- phpStudy 官网(中文界面,文档齐全)
- 视频:B 站搜"PHP 环境搭建 2024",有大量实操视频
互动钩子:你是用什么方式装 PHP 的?踩过什么坑?评论区聊聊,帮你 Debug 👇
📌 下章剧透:装好了 PHP,写了
echo "Hello World",然后呢?下一章我们会讲"变量"——PHP 里的储物箱。你会知道$name = "小明"和$age = 18有什么区别,为什么有些变量能改、有些不能改。下章见!

评论(0)