Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PHP Development Lab

通过 20 个彼此独立、可以单独运行的 PHP 小实验,系统理解 PHP 从基础语法到表单、文件、Session、Cookie、PDO、SQLite、CRUD、搜索分页、JSON API,再到完整迷你项目的核心开发流程。

本仓库的目标不是提供一个大型框架项目,而是把 PHP 开发中最常见、最值得掌握的知识拆成 20 个最小实验单元

每个实验都尽量只解决一个核心问题,并在自己的目录中提供独立的 README.md,便于逐章运行、修改、验证和复习。


项目定位

这个仓库适合用于:

  • 系统学习 PHP 基础语法与 Web 开发流程
  • 理解 HTML 表单与 PHP 后端之间的数据传递
  • 学习文件、JSON、Session、Cookie 等常见数据保存方式
  • 掌握 PDO 与 SQLite 的基础数据库操作
  • 理解 CRUD、预处理语句、搜索、排序、分页等后台开发核心能力
  • 建立从“单个 PHP 文件”到“多文件小型应用”的完整认知
  • 作为以后开发 WordPress、WooCommerce、企业网站后台或 PHP 小工具时的代码参考库

本项目以 学习、实验、理解原理 为第一目标,不追求框架化,也不过早引入 Composer、MVC 框架、ORM 或复杂工程工具。


20 个实验知识地图

整个仓库可以分成 4 个阶段:

阶段 1:PHP 基础能力
01 → 02 → 03 → 04 → 05 → 06

阶段 2:Web 请求、表单与状态
07 → 08 → 09 → 10 → 11 → 12 → 13 → 14

阶段 3:数据库与数据应用
15 → 16 → 17 → 18 → 19

阶段 4:综合实战
20

也可以把它理解为一条逐步升级的数据处理链:

变量
↓
数组
↓
条件与循环
↓
函数与模块化
↓
GET / POST
↓
验证与安全输出
↓
文本 / JSON
↓
Session / Cookie
↓
文件上传
↓
PDO + SQLite
↓
CRUD
↓
预处理语句
↓
搜索 / 排序 / 分页
↓
JSON API
↓
完整 PHP 小应用

实验目录

# 目录 实验主题 核心知识
01 01-php-basics PHP 基础输出、变量与数据类型 echo、变量、字符串、数字、布尔值、类型
02 02-php-array PHP 数组与数据遍历 索引数组、关联数组、多维数组、数组读取
03 03-php-condition PHP 条件判断与状态显示 ifelseif、比较运算、业务状态
04 04-php-loop PHP 循环生成 HTML forwhileforeach、动态页面输出
05 05-php-function PHP 自定义函数与参数 函数、参数、返回值、类型声明、代码复用
06 06-php-include PHP 页面模块化 includerequire、公共头尾、配置与函数文件
07 07-php-get GET 参数读取 $_GET、查询字符串、搜索参数、安全输出
08 08-php-post POST 表单提交 $_POST、请求方法、表单提交、数据回显
09 09-php-form-validation 表单验证与安全输出 必填验证、邮箱验证、长度验证、htmlspecialchars()
10 10-php-file 文本文件读取与写入 file_get_contents()file_put_contents()、追加、文件锁
11 11-php-json JSON 数据读取与保存 json_encode()json_decode()、结构化文件存储
12 12-php-session Session 登录状态 session_start()$_SESSION、Session ID、退出登录
13 13-php-cookie Cookie 与用户偏好 setcookie()$_COOKIE、有效期、删除 Cookie
14 14-php-file-upload PHP 文件上传 $_FILES、MIME、finfo、图片验证、随机文件名
15 15-pdo-sqlite PDO + SQLite PDO、DSN、建表、初始化数据、查询数据
16 16-php-sqlite-crud SQLite CRUD Create、Read、Update、Delete、多页面数据管理
17 17-pdo-prepared-statements PDO 预处理与安全查询 prepare()execute()、参数绑定、SQL 注入防护基础
18 18-php-search-sort-pagination 搜索、排序与分页 WHEREORDER BYLIMITOFFSETCOUNT(*)
19 19-php-json-api PHP JSON API JSON Response、HTTP 状态码、前后端数据接口
20 20-php-mini-notes Mini Notes 综合项目 CRUD、搜索、分页、PDO、SQLite、模块化、小型应用结构

每个目录都包含自己的 README.md,建议学习时进入对应目录查看该实验的详细说明。


项目结构

php-development-lab/
│
├── README.md
│
├── 01-php-basics/
├── 02-php-array/
├── 03-php-condition/
├── 04-php-loop/
├── 05-php-function/
├── 06-php-include/
├── 07-php-get/
├── 08-php-post/
├── 09-php-form-validation/
├── 10-php-file/
├── 11-php-json/
├── 12-php-session/
├── 13-php-cookie/
├── 14-php-file-upload/
├── 15-pdo-sqlite/
├── 16-php-sqlite-crud/
├── 17-pdo-prepared-statements/
├── 18-php-search-sort-pagination/
├── 19-php-json-api/
└── 20-php-mini-notes/

前面的实验多数采用单文件形式,后面的实验逐渐拆分为:

index.php
create.php
edit.php
delete.php
includes/
database/
api/

这种变化本身就是学习内容之一:

从“先把 PHP 写出来”,逐渐过渡到“开始组织一个可维护的小型 PHP 应用”。


运行环境

推荐环境:

PHP 8.1+

之所以建议 PHP 8.1 或更高版本,是因为部分实验使用了现代 PHP 语法和类型声明。

需要关注的 PHP 扩展

实验 01~13

通常使用 PHP 默认扩展即可运行。

实验 09 对 mbstring 做了兼容处理:

有 mbstring
→ 使用 mb_strlen()

没有 mbstring
→ 自动退回 strlen()

因此不会因为服务器未启用 mbstring 而直接产生 Fatal Error。

实验 14

文件上传实验需要:

fileinfo

代码通过 finfo 检查真实 MIME 类型,而不是只相信上传文件的扩展名。

实验 15~20

数据库实验必须启用:

PDO
pdo_sqlite

可以通过下面的命令检查:

php -m

正常情况下应该能够看到:

PDO
pdo_sqlite

如果没有启用 pdo_sqlite,数据库实验会显示数据库连接错误提示。


最简单的运行方法

方法一:PHP 内置开发服务器

进入仓库根目录:

cd php-development-lab

启动服务器:

php -S localhost:8000

然后在浏览器访问:

http://localhost:8000/01-php-basics/

其他实验只需要修改目录名:

http://localhost:8000/09-php-form-validation/
http://localhost:8000/16-php-sqlite-crud/
http://localhost:8000/20-php-mini-notes/

停止服务器:

Ctrl + C

方法二:XAMPP / WAMP / MAMP

也可以把整个仓库复制到本地 Web 根目录,例如 XAMPP:

C:\xampp\htdocs\php-development-lab\

然后访问:

http://localhost/php-development-lab/01-php-basics/

这种方式比较适合希望通过浏览器长期逐章测试 PHP 的学习环境。


GitHub 与 GitHub Pages

这个仓库非常适合上传到 GitHub 保存源码、记录版本和复习知识。

但是需要注意:

GitHub Pages 只能托管静态页面,不能直接执行 PHP。

因此:

GitHub
→ 可以保存和展示源码

GitHub Pages
→ 不能直接运行这些 PHP 实验

如果需要真正运行 PHP,应使用:

  • 本地 PHP 开发服务器
  • XAMPP / WAMP / MAMP
  • 支持 PHP 的虚拟主机
  • VPS / Linux Web Server

写入权限

部分实验会向服务器写入数据。

需要确保下面这些目录或文件具有 PHP 可写权限:

10-php-file/data/
11-php-json/data/
14-php-file-upload/uploads/
15-pdo-sqlite/database/
16-php-sqlite-crud/database/
17-pdo-prepared-statements/database/
18-php-search-sort-pagination/database/
19-php-json-api/database/
20-php-mini-notes/database/

如果页面可以打开,但出现:

写入失败
保存失败
数据库无法写入

优先检查目录权限和 PHP 扩展,而不是先修改业务代码。


推荐学习方式

这个仓库最适合“运行 → 修改 → 观察结果”的方式,而不是只阅读源码。

建议每个实验都完成下面 5 个动作:

1. 先运行原始代码
2. 阅读本章 README
3. 找到本章最核心的 PHP 代码
4. 主动修改变量、参数或条件
5. 再观察页面和数据发生了什么变化

例如学习 GET 时,不要只看:

$_GET['keyword']

而是实际修改浏览器地址:

?keyword=WPC
?keyword=Decking
?keyword=Wall

学习 CRUD 时,也不要只看 SQL,而应该实际完成:

新增一条
→ 编辑
→ 搜索
→ 删除
→ 再观察数据库和页面变化

这种方式更容易真正建立 PHP 的执行模型。


最值得掌握的核心链路

完成 20 个实验后,最重要的不是记住所有函数,而是理解下面几条开发链路。

1. PHP 页面执行链

浏览器请求
↓
Web Server
↓
PHP 执行
↓
读取 / 处理数据
↓
生成 HTML 或 JSON
↓
返回浏览器

2. 表单处理链

HTML Form
↓
GET / POST
↓
PHP 获取数据
↓
验证数据
↓
处理业务逻辑
↓
安全输出结果

3. 数据持久化链

内存变量
↓
文本文件
↓
JSON
↓
SQLite
↓
数据库 CRUD

4. 数据库查询链

用户输入
↓
验证 / 白名单
↓
PDO prepare()
↓
参数绑定
↓
执行 SQL
↓
fetch / fetchAll
↓
安全输出

5. 小型 PHP 应用链

列表页
↓
新增
↓
编辑
↓
删除
↓
搜索
↓
分页
↓
公共 functions / includes
↓
数据库

实验 20 就是前面这些知识第一次真正组合到一起。


安全相关知识

本仓库已经在学习范围内演示了一些重要安全习惯:

  • 使用 htmlspecialchars() 对动态 HTML 输出进行转义
  • 使用 filter_var() 验证邮箱
  • 使用 filter_input() 处理部分输入参数
  • 使用 PDO Prepared Statements 分离 SQL 与用户输入
  • 对动态排序字段使用白名单
  • 文件上传通过真实 MIME 类型检查
  • 上传文件使用随机文件名
  • Session 登录后重新生成 Session ID
  • Cookie 使用 HttpOnlySameSite=Lax
  • 删除操作使用 POST 而不是简单 GET 链接

但这些代码仍然是学习实验,不等同于生产级应用

如果未来真正部署为公开网站,还应该继续增加:

CSRF Token
身份认证与权限控制
更严格的输入长度限制
统一错误日志
生产环境异常隐藏
数据库文件访问保护
上传目录执行权限限制
请求频率限制
安全响应头

特别需要注意:本项目中的 data/database/uploads/ 目录是为了方便学习而保留的简单结构。

不要直接在这些实验中保存密码、API Key、客户资料或其他敏感数据。


SQLite 为什么适合这套实验

本项目后半部分选择 SQLite,而不是直接使用 MySQL,主要是为了降低学习成本。

SQLite 的特点:

无需单独启动数据库服务器
↓
一个 .db 文件就是一个数据库
↓
仍然可以学习表、SQL、PDO、CRUD、分页和查询

因此特别适合:

  • PHP 入门
  • 本地工具
  • 小型管理页面
  • 原型开发
  • 私有后台工具
  • 学习 PDO

当这些知识完全理解以后,再切换到 MySQL,核心思路基本不需要推翻,只需要重点学习数据库连接配置、字段类型、索引、并发和服务器管理等内容。


从实验 20 再往后可以学什么

完成本仓库以后,可以继续沿着当前体系自然扩展,而不需要马上进入复杂框架。

推荐方向:

01. CSRF Token
02. 用户注册与密码哈希
03. Login / Logout 完整认证
04. SQLite 表关联
05. MySQL + PDO
06. 数据库事务 Transaction
07. 文件下载
08. Ajax + Fetch + PHP API
09. REST 风格 API
10. 后台管理页面
11. PHP Router
12. 简单 MVC
13. Composer 与自动加载
14. WordPress 数据处理
15. WooCommerce 数据处理

其中比较推荐的下一阶段是:

原生 PHP + PDO + MySQL
↓
Ajax / Fetch + PHP JSON API
↓
简单 Router / MVC
↓
再重新理解 WordPress / WooCommerce 的 PHP 架构

这样会比一开始直接学习大型框架更容易建立底层认知。


代码检查状态

本仓库在整理阶段进行了以下检查:

  • 20 个实验目录完整
  • 40 个 PHP 文件全部通过 PHP 语法检查
  • 基础页面加载正常
  • GET 搜索功能测试正常
  • POST 表单提交测试正常
  • HTML 特殊字符转义测试正常
  • 表单验证测试正常
  • 文本文件写入与读取测试正常
  • JSON 保存与读取测试正常
  • Session 登录 / 退出流程测试正常
  • Cookie 保存 / 删除测试正常
  • 图片上传及非法 MIME 拦截测试正常
  • 6 个 SQLite 数据库文件完整性检查正常
  • SQLite 表结构与示例数据检查正常
  • 数据库驱动缺失时具有明确错误提示

同时修复了实验 09 在未安装 mbstring 的 PHP 环境中调用 mb_strlen() 可能产生 Fatal Error 的兼容性问题。


项目原则

这套实验始终遵循几个原则:

1. 一个实验只突出一个主要知识点

避免为了“看起来功能更多”而让示例失去重点。

2. 先理解原生 PHP,再理解框架

框架最终仍然建立在:

请求
数据
函数
对象
数据库
Session
Cookie
文件
HTTP

这些基础能力之上。

3. 示例必须可以修改

实验代码不是只能看的 Demo,而是应该可以不断被改坏、修复、扩展和重新运行。

4. 从最小代码逐步走向小型项目

前 19 章学习“零件”,第 20 章第一次把这些零件组合成一个完整的小应用。


License

本项目主要用于个人学习、PHP 技术研究和代码实验。

如果需要公开发布,可以根据自己的仓库计划补充合适的开源 License。


最后

如果能够真正理解这 20 个实验之间的关系,那么 PHP 就不再只是零散的:

变量
数组
函数
SQL

而会形成一个完整的 Web 开发模型:

浏览器请求
→ PHP 接收
→ 验证数据
→ 执行业务逻辑
→ 读取或保存数据
→ 生成 HTML / JSON
→ 返回浏览器

这也是本仓库最重要的学习目标。

About

20 个独立 PHP 小实验,系统学习原生 PHP、表单、Session、文件处理、PDO、SQLite、CRUD 与 JSON API。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages