第1章 1.2 PHP 安装与环境配置

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


Simple tech illustration explaining a key concept about "第1章 1.2  PHP 安装与环境配置", infographic style wi

AI comic creation scene, creative workspace with holographic UI panels, soft futuristic aesthetic, n

🎯 开场:为什么你装 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 分钟):

  1. 百度搜 phpStudy 官网,下载最新版(选 PHP 8.x 版本)
  2. 解压,双击 phpStudySetup.exe,一路点"下一步"
  3. 启动面板后,点"启动"按钮,等右下角绿灯亮起

验证安装成功

打开电脑的记事本,输入以下代码,保存为 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 件事

  1. PHP 有三种安装方式,新手用 phpStudy 最简单
  2. 装完用 phpinfo() 验证,用 php.ini 调配置
  3. phpinfo()、扩展检测、配置生成器是三个实用小工具

延伸资源

互动钩子:你是用什么方式装 PHP 的?踩过什么坑?评论区聊聊,帮你 Debug 👇


📌 下章剧透:装好了 PHP,写了 echo "Hello World",然后呢?下一章我们会讲"变量"——PHP 里的储物箱。你会知道 $name = "小明"$age = 18 有什么区别,为什么有些变量能改、有些不能改。下章见!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。