从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建 摘要你是否曾好奇那些动态网站背后的技术到底是什么PHP 作为 Web 开发领域的“老将”至今仍支撑着全球超过 75% 的网站。本篇作为系列开篇不写一行复杂代码先带你纵览 PHP 的诞生、发展、低谷与重生理解它为何能屹立不倒。然后手把手教你从零搭建 PHP 开发环境Windows / Mac 均适用写出并运行人生中第一个 PHP 程序迈出坚实的第一步。无论你是完全零基础的小白还是想系统梳理 PHP 的开发者这篇文章都将是你最友好的起点。一、引言当你在浏览器里打开一个网页背后发生了什么想象一下你坐在电脑前输入www.example.com回车。一瞬间漂亮的页面呈现在眼前。这一切的背后是服务器收到请求后运行某段程序动态生成 HTML 页面再返回给你的浏览器。而 PHP就是诞生于这种“动态生成网页”需求下的服务器端脚本语言。在没有 PHP 这类语言之前互联网早期网页都是手工编写的静态 HTML 文件。每增加一篇文章就需要新建一个 HTML 文件更别提用户登录、评论区、购物车这些交互功能了。PHP 的出现彻底改变了这一切它让网站能够根据不同的用户、不同的时间、不同的数据实时生成不同的页面。今天的 Facebook、维基百科、WordPress 等巨头都深度依赖 PHP。二、PHP 的前世今生从“个人主页工具”到“Web 开发基石”2.1 诞生Rasmus Lerdorf 的个人小工具19941994 年一位名叫 Rasmus Lerdorf 的程序员出生于格陵兰加拿大人为了统计自己在线简历的访问者信息用 C 语言写了一些 CGI通用网关接口脚本。他给这套工具集起名为“Personal Home Page Tools”个人主页工具简称PHP Tools。最初的 PHP 非常简陋只能做一些简单的访问计数、表单处理。但 Lerdorf 把它开源发布后不少开发者对这个能嵌入 HTML 中执行的小工具产生了兴趣。2.2 成长PHP/FI 到 PHP 3名字的变革1995-19981995 年Lerdorf 重写了代码加入了对数据库mSQL的支持发布了PHP/FIPersonal Home Page / Forms Interpreter个人主页/表单解释器。这个版本已经可以处理表单数据并与数据库交互吸引了一批早期社区用户。1997 年两位以色列开发者 Zeev Suraski 和 Andi Gutmans 正在为大学项目寻找开发工具他们发现 PHP/FI 虽然好用但不够强大于是与 Lerdorf 合作完全重写了 PHP 的核心语法分析器引擎这就是PHP 3的诞生。同时名字也正式改为“PHP: Hypertext Preprocessor”超文本预处理器这是一个递归缩写标志着 PHP 不再只是“个人主页工具”而是一个通用脚本语言。PHP 3 奠定了 PHP 的基本语法风格嵌入 HTML、弱类型、丰富的函数库、支持多种数据库。到 1998 年底全球已有数万个网站使用 PHP。2.3 爆发PHP 4 和 Zend 引擎2000-2004为了让 PHP 性能更上一层楼Suraski 和 Gutmans 重写了 PHP 的引擎称为Zend EngineZend Zeev Andi。基于 Zend Engine 1.0 的PHP 4于 2000 年发布带来了引用传递、输出缓冲、更强的面向对象支持虽然还比较初级以及 session 管理。PHP 4 的生命周期正值互联网第一次泡沫复苏配合廉价的 LAMPLinux Apache MySQL PHP技术栈PHP 迅速占据了 Web 开发的主流。WordPress 的第一行代码就是在 PHP 4 上写下的。2.4 成熟PHP 5 与面向对象革命2004-20142004 年发布的PHP 5引入了 Zend Engine 2它最大的改变是真正完善的面向对象编程OOP可见性public/protected/private、抽象类、接口、魔术方法、异常处理等。这使得 PHP 开始被企业级开发接受各种现代 PHP 框架如 Symfony、Zend Framework、CakePHP 纷纷涌现。这个阶段PHP 拥有了强大的 PDO 数据库抽象层、JSON 支持、SimpleXML、迭代器等特性。PHP 5.32009增加了命名空间、闭包、Late Static BindingPHP 5.4 加入了 Traits、内置开发服务器。PHP 5 是使用时间最长、影响最大的版本至今仍有部分遗留系统运行。2.5 挫折与重生PHP 6 的流产与 PHP 7 的性能飞跃原本计划中的 PHP 6 打算加入原生 Unicode 支持但因为实现复杂度高、社区分歧大最终在 2010 年搁浅。部分特性被移植回 PHP 5.x。这期间许多开发者开始质疑 PHP 的未来甚至出现了 “PHP is dead” 的声音。然而PHP 核心团队痛定思痛决定跳过 PHP 6直接启动PHP 7。基于 Zend Engine 3 的 PHP 7 在 2015 年底发布性能相比 PHP 5.6 提升两到三倍内存占用大幅降低。并带来了严格类型声明、返回类型声明、null 合并运算符、太空船运算符等新特性。PHP 7 的成功令整个社区为之振奋那些“死亡”言论不攻自破。2.6 现代 PHPPHP 8.x 的进化2020 至今2020 年底PHP 8.0发布。引入了 JIT即时编译进一步提升性能、联合类型Union Types、命名参数、Match 表达式、属性Attributes等。随后 PHP 8.1 带来了枚举Enums、纤程Fibers、只读属性PHP 8.2 引入独立类型的类、readonly 类PHP 8.3、8.4 持续优化和增强。今天的 PHP早已不是那个被人吐槽“混乱”的脚本语言。它具备强类型模式、高性能 JIT、完善的包管理器 Composer、庞大的生态系统依然是构建现代 Web 应用的极佳选择。2.7 为什么学 PHP 仍然值得全球占有率超过 75% 的网站使用 PHP包括 Facebook、维基百科、WordPress、Magento。就业市场中小企业建站、电商系统、CMS 定制等需求巨大特别是 WordPress 生态。入门友好学习曲线平缓部署简单FTP 上传即可运行。生态完善Composer、Laravel、Symfony 等工具和框架提供了现代化的开发体验。了解完 PHP 的“前世今生”你已经对它的来龙去脉有了清晰的画像。下面我们正式进入实战环节从搭建环境开始。三、揭开谜底PHP 到底是什么在安装之前我们先用通俗的语言解释一下 PHP 的运行原理。PHP 是一种服务器端脚本语言代码被嵌入到 HTML 中由服务器上的 PHP 解释器执行最终将执行结果通常是 HTML发送给浏览器。浏览器永远看不到 PHP 源码只看到生成后的静态内容。举个例子 你在网站登录时填写用户名、密码点击“登录”。浏览器将表单数据发送给服务器的某个.php文件。PHP 程序收到数据连接数据库验证若正确则返回“欢迎你某某”若错误则返回“密码错误”。这个逻辑判断完全由 PHP 完成。四、搭建你的第一个 PHP 开发环境很多小白会被“环境搭建”劝退。这里我会给出最无障碍的方案使用集成环境工具同时也会介绍更贴近实际部署的手动搭建方法供有余力的同学尝试。4.1 快速集成环境方案推荐零基础使用Windows 用户推荐XAMPPApache MariaDB PHP Perl或PHPStudy。macOS 用户推荐MAMP或XAMPP for macOS。Linux 用户可直接通过包管理器安装 LAMP。我们以XAMPP为例跨平台下载 XAMPP访问 XAMPP Installers and Downloads for Apache Friends 根据你的系统下载对应版本。建议选 PHP 8.x如 PHP 8.2。安装Windows 下双击.exe按提示安装注意安装路径不要包含中文和空格如C:\xampp。 macOS 下打开.dmg拖入“应用程序”即可。启动服务打开 XAMPP Control Panel点击 Apache 后的Start按钮。看到端口号80, 443显示绿色即成功。测试 PHP 是否运行进入 XAMPP 安装目录下的htdocs文件夹这是网站根目录。新建一个文本文档命名为info.php注意扩展名为.php不是.txt。用记事本/VSCode 打开输入以下代码?php phpinfo(); ?打开浏览器地址栏输入http://localhost/info.php。如果看到一张显示 PHP 版本、配置信息的紫色表格页面说明环境搭建成功备选工具 PHPStudy仅 Windows 它提供更符合国内用户习惯的界面可一键切换 PHP 版本内置 MySQL 管理工具。下载安装后启动服务并在WWW目录下同样放置info.php测试。4.2 手动搭建 LAMP/WAMP/MAMP 环境理解原理学习阶段了解手动搭建有助于理解 PHP 运行的全貌。典型的组合是Apache/Nginx PHP MySQL。步骤概览以 Windows 为例安装 Apache从 Apache Lounge 下载编译好的版本解压修改conf/httpd.conf中的路径安装为服务。安装 PHP从 windows.php.net 下载线程安全版的 PHP 压缩包解压将php.ini-development复制为php.ini。让 Apache 整合 PHP在httpd.conf末尾添加加载 PHP 模块和解析.php的配置。安装 MySQL使用 MySQL Community Server 或 MariaDB。这过程对初学者可能繁琐因此初期用集成环境即可。等你写过几个项目再回头理解这些细节会豁然开朗。4.3 选一款顺手的代码编辑器千万不要用记事本写代码会带来编码问题且无高亮。推荐Visual Studio Code免费跨平台插件丰富 安装后推荐安装插件PHP Intelephense智能感知、PHP Debug调试。PhpStorm收费功能强大适合大型项目学生可免费申请 License。五、你的第一行 PHP 代码不止是 “Hello, World!”5.1 PHP 标记与输出一个 PHP 文件通常包含 HTML 和嵌在?php ... ?中的 PHP 代码。服务器遇到?php就开始作为 PHP 代码执行直到?。在htdocs下新建hello.php输入!DOCTYPE html html langzh-CN head meta charsetUTF-8 title我的第一个 PHP 页面/title ?php // 设置中国时区解决date时区报错 date_default_timezone_set(Asia/Shanghai); ? /head body h1 ?php echo 你好世界这是我的第一个 PHP 程序。; ? /h1 p当前服务器时间 ?php echo date(Y-m-d H:i:s); ? /p /body /html浏览器访问http://localhost/hello.php你将看到大标题和时间戳。查看网页源代码会发现 PHP 代码消失了只剩下 HTML 和时间字符串。解释echo是一个语言结构用来输出字符串。date(Y-m-d H:i:s)是 PHP 内置函数格式化输出当前日期和时间。PHP 代码可以穿插在 HTML 的任何地方这就是 PHP 的“模板”本色。5.2 初识变量和数据类型PHP 变量以$开头弱类型无需声明类型。我们稍微深入一点写一个展示几种基本数据类型的脚本。新建basics.php?php // 单行注释这是一个演示变量的脚本 # 这也是单行注释shell风格 /* 多行注释 可以跨越多行 */ $name 小明; // 字符串string $age 25; // 整数int $height 1.75; // 浮点数float $is_student true; // 布尔值boolean $hobbies array(编程, 篮球, 电影); // 索引数组 echo h2个人信息/h2; // 双引号自动解析变量 echo p姓名$name/p; // 单引号不解析变量用 . 拼接字符串 echo p年龄 . $age . /p; // 大括号限定变量边界防止和文字粘连 echo p身高{$height} 米/p; // 三元表达式转换布尔为中文文字 echo p是否学生 . ($is_student ? 是 : 否) . /p; echo p爱好/pul; // 循环遍历数组 foreach ($hobbies as $hobby) { echo li$hobby/li; } echo /ul; ?讲解注释单行//或#多行/* */。字符串拼接用点.双引号内可直接解析变量单引号内变量按字面输出。数组用array()或简写[]PHP 5.4。foreach遍历数组。三元运算符条件 ? 值1 : 值2。运行结果会显示个人介绍。这个例子虽小却包含了 PHP 最基础的语法元素。5.3 PHP 与 HTML 表单的第一次交互本系列后续会详解表单处理这里先体验一下“动态”的乐趣。创建form.php和welcome.php两个文件。form.php纯 HTML 表单!DOCTYPE html html langzh-CN head meta charsetUTF-8 title简单表单/title /head body form actionwelcome.php methodpost label你的名字 input typetext nameusername required /label br button typesubmit提交/button /form /body /htmlwelcome.php接收并显示!DOCTYPE html html langzh-CN head meta charsetUTF-8 title欢迎页面/title /head body ?php // 判断是否POST提交 if ($_SERVER[REQUEST_METHOD] POST) { // 判断表单是否有输入 if (!empty($_POST[username])) { // htmlspecialchars 防止XSS跨站脚本攻击 $name htmlspecialchars($_POST[username]); echo h2欢迎你{$name}/h2; } else { echo p名字不能为空请返回重新填写/p; echo a hrefform.php返回表单/a; } } else { // 直接访问welcome.php未走表单提交 echo p请前往表单页面提交数据/p; echo a hrefform.php去填写表单/a; } ? /body /html打开http://localhost/form.php输入名字提交将跳转到welcome.php并看到欢迎信息。这个简单的例子已经展现了 PHP 作为服务器端语言的核心价值接收请求处理数据返回结果。$_POST是一个超全局变量用于收集表单以 POST 方法提交的数据htmlspecialchars防止 XSS 攻击。六、理解 PHP 的运行机制与错误调试6.1 PHP 运行流程当你访问hello.php时背后发生的事浏览器向 Apache 发送 HTTP 请求GET /hello.php。Apache 根据配置识别.php后缀把请求交给 PHP 模块或 PHP-FPM。PHP 解释器逐行执行hello.php中的代码跳过纯 HTML 部分仅执行?php ... ?内产生输出。输出内容合并回原 HTML 位置最终生成完整的 HTML 文档。Apache 将该 HTML 作为 HTTP 响应返回浏览器。整个过程对用户透明浏览器永远只能看到最终的 HTML看不到源代码。这就是服务器端脚本的安全性和核心价值。6.2 初遇错误怎么办语法错误Parse Error当 PHP 代码不符合语法规则时页面会白屏或显示错误。例如忘记分号?php echo Hello // 缺少分号 ?你会看到类似Parse error: syntax error, unexpected end of file in ...的提示。分号在 PHP 中用于表示一条语句结束不能省略在 PHP 中如果后面紧跟着关闭标签?最后一条语句前的分号可以省略但不建议。遇到错误不要慌仔细阅读错误信息定位到文件行号检查分号、括号、引号是否闭合。开启错误显示开发时我们希望看到所有错误。在 PHP 脚本开头添加ini_set(display_errors, 1); error_reporting(E_ALL);在 XAMPP 中也可以修改php.ini找到display_errors Off改为On重启 Apache。但生产环境一定要关闭错误显示避免泄露敏感信息。6.3 使用 PHP 内置开发服务器PHP 5.4如果你不想安装 ApachePHP 自带了一个简单的开发服务器。在终端/命令行中进入项目目录执行php -S localhost:8000然后浏览器访问http://localhost:8000/hello.php即可。这个内置服务器纯粹用于开发测试绝不能用于生产。七、PHP 生态初探Composer 与 PSR 规范现代 PHP 开发绕不开Composer它是 PHP 的依赖管理工具类似于 Node.js 的 npm。你可以在后续学习框架时安装但它背后的理念是代码复用与标准化。PSRPHP Standard Recommendation是 PHP-FIGPHP Framework Interop Group制定的一系列编码规范如 PSR-1基础编码标准、PSR-4自动加载标准等让不同的 PHP 组件可以无缝协作。八、总结我们穿越了 PHP 从 1994 年到 2026 年的历史理解了它如何在 Web 开发浪潮中屹立不倒。了解了 PHP 是运行在服务器端、嵌入 HTML 的脚本语言。从零搭建了 XAMPP 集成环境并成功运行了第一个 PHP 页面。接触了变量、数据类型、数组、输出、表单处理等最基础的概念看到了 PHP 动态生成页面的魔力。初步了解了 PHP 运行机制和错误调试以及未来的生态工具。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。动手练习是掌握编程最快的方法请务必亲手敲一遍本文的所有示例代码并截图保存你的成果。你的关注是我坚持原创和细节共享的力量来源谢谢大家。