HelloWorld 与 PHP 使用教程

PHP 的 HelloWorld 很简单:先装好 PHP,写一个输出语句,选择终端执行或用内建开发服务器在浏览器打开即可。下面按从环境搭建到网页交互、数据库连接、常见坑与调试技巧的顺序讲清楚每一步,要做到不只会复制粘贴,而是真正理解为什么这么做。

HelloWorld 与 PHP 使用教程

为什么要学 PHP 的 HelloWorld,从哪里开始

想象做菜:HelloWorld 就像切菜、热锅、下油的第一盘菜,学会了流程,后面加料就容易了。学 PHP 的第一课不是记语法,而是把工具链(PHP、编辑器、浏览器/终端、必要扩展)搭好,理解两种运行方式——命令行脚本和作为网页的服务器端脚本。

环境准备(一步步来)

1. 安装 PHP

常见平台安装方式:

  • Windows:下载 PHP 的 Zip 包或使用包管理器(例如 Scoop、Chocolatey),也可以安装集成环境(XAMPP、WampServer)。
  • macOS:Homebrew 安装(brew install php)。
  • Linux:Ubuntu/Debian apt-get(sudo apt install php),CentOS 使用 yum/dnf。

安装后在终端运行 php -v 检查版本和是否可用。

2. 编辑器与文件位置

推荐使用 VS Code、PhpStorm 或任何支持 PHP 语法高亮的编辑器。把项目放在任意文件夹,记住路径。在做网页测试时,若用内建服务器,打开项目根目录即可。

第一个 HelloWorld:命令行模式

命令行适合做脚本、测试和学习语法,不需要 Web 服务器。

<?php
// hello.php
echo "Hello, World!\n";
?>

运行:

  • 打开终端,定位到文件夹,执行 php hello.php
  • 终端会打印出 Hello, World!,这说明 PHP 安装并能执行脚本。

在浏览器中运行 HelloWorld(内建开发服务器)

更常用的是把 PHP 嵌入 HTML 里,在浏览器中显示结果。PHP 7.4+ 提供内建服务器,开发调试非常方便。

<?php
// index.php
?>
<!doctype html>
<html>
<head><meta charset="utf-8"><title>PHP Hello</title></head>
<body>
<?php echo "<h1>Hello, World!</h1>"; ?>
</body>
</html>

启动内建服务器:

  • 在项目目录运行:php -S localhost:8000
  • 在浏览器打开 http://localhost:8000,应该看到页面。

理解 PHP 在网页中的工作方式(关键概念)

  • 服务器端执行:PHP 脚本在服务器上运行,输出 HTML 发给浏览器;浏览器看不到 PHP 源码。
  • 生命周期:一次请求对应一次 PHP 进程/线程(或复用),变量不会在请求间保存,除非使用会话、缓存或数据库。
  • 输出缓冲:PHP 可以缓冲输出,常用于修改头信息或捕获渲染内容。

基础语法速览(像解释给初学者)

把基本元素当作厨房工具:变量是碗,数组是盘子,函数是菜谱。

变量和类型

<?php
$greeting = "Hello";
$number = 42;
$isOk = true;
echo $greeting . " #" . $number;
?>

PHP 是弱类型语言,会在需要时自动转换类型。尽量用清晰的命名和适当的类型检查(比如 is_string()is_int())。

数组与遍历

<?php
$fruits = ["apple", "banana", "pear"]; // 索引数组
$person = ["name"=>"Alice", "age"=>30]; // 关联数组

foreach ($fruits as $f) {
    echo $f . "\n";
}

foreach ($person as $k => $v) {
    echo "$k: $v\n";
}
?>

函数

<?php
function greet($name) {
    return "Hello, " . htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
}

echo greet("Bob");
?>

用函数把重复逻辑抽离,写可测试、可复用的代码。

表单处理与超全局变量(最常用)

当你在网页上填写表单,数据会通过 GET 或 POST 发送到服务器,PHP 用超全局数组接收。

<!-- form.html -->
<form action="submit.php" method="post">
  <input name="username" />
  <button>Send</button>
</form>
<?php
// submit.php
$username = $_POST['username'] ?? '';
echo "You submitted: " . htmlspecialchars($username, ENT_QUOTES, 'UTF-8');
?>

记住两个要点:过滤/转义输入(防 XSS)和 验证(不能为空、类型正确等)。

会话(Session)与 Cookie

会话用来跨请求保存用户状态,例如登录信息。

<?php
session_start(); // 必须先调用
$_SESSION['user'] = ['id' => 1, 'name' => 'Alice'];

if (isset(_SESSION['user'])) { echo "Hello " . htmlspecialchars(_SESSION['user']['name']); } ?>

Cookie 存在浏览器端,不能信任存储敏感数据。Session 默认存储在服务器(文件或其他存储),由浏览器持有的 session id 关联。

数据库访问:用 PDO 安全连接

不要用老旧的 mysql_* 函数,使用 PDO 或 mysqli,并优先用参数化查询防止 SQL 注入。

DSN 例子 mysql:host=localhost;dbname=testdb;charset=utf8mb4
主要方法 prepare(), execute(), fetch()/fetchAll()
<?php
$dsn = "mysql:host=127.0.0.1;dbname=testdb;charset=utf8mb4";
$user = "dbuser";
$pass = "dbpass";

try { pdo = new PDO(dsn, user, pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]);

stmt = pdo->prepare("SELECT * FROM users WHERE email = :email"); stmt->execute(['email' =&gt; email]); user = stmt->fetch(); } catch (PDOException e) { // 日志记录,别把错误信息直接返回给用户 error_log(e->getMessage()); echo "Database error."; } ?>

Composer 与依赖管理

Composer 是 PHP 的包管理工具,类似 Node 的 npm。用它来安装第三方库(例如路由、ORM、HTTP 客户端等)。

  • 安装:按官方方法下载 composer.phar 或使用系统包管理器。
  • 初始化:在项目目录运行 composer init,然后 composer require vendor/package
  • 自动加载:引入 vendor/autoload.php 来自动加载类。

错误处理与调试(别慌,按步骤来)

调试流程像排查电器:先看外观(错误日志),再看开关(配置),最后分步测试。

  • 开发环境开启错误显示:ini_set(‘display_errors’, 1); error_reporting(E_ALL);
  • 生产环境关闭显示错误,但写日志:display_errors=0,error_log 指向文件。
  • 使用 Xdebug 可以进行断点调试和性能分析。
  • 利用 var_dump(), print_r() 和 log 文件做快速检查。

常见安全风险与防护(必须知道)

  • XSS:在输出用户输入时使用 htmlspecialchars()
  • SQL 注入:始终使用预处理语句和参数化查询(如 PDO prepare/execute)。
  • CSRF:对于有状态操作使用 CSRF token(表单中隐藏字段并在服务器验证)。
  • 文件上传:校验文件类型、限制大小、不要把文件放在可执行目录,使用随机文件名。
  • 密码存储:用 password_hash() 和 password_verify(),别用 MD5 或自行实现哈希。

性能与部署要点

简单、实用的优化优先,复杂的优化留到必要时。

  • 使用 PHP-FPM + Nginx 在生产环境,避免内建服务器。
  • 启用 OPCache(提高脚本执行速度,减少磁盘 I/O)。
  • 缓存策略:页面缓存、片段缓存、数据缓存(Redis、Memcached)。
  • 数据库优化:索引、限制返回字段、避免 N+1 查询。

调试小技巧与常见坑(实战经验)

  • 遇到 blank 页面:检查 web 服务器 error log 和 PHP error log。
  • 编码问题(乱码):确保文件、PHP、数据库都使用 utf8mb4,并在头部声明 <meta charset=”utf-8″>
  • 权限问题:Linux 下 web 用户需对上传目录有写权限,但不要给出 777。
  • 路径问题:用 __DIR__、dirname(__FILE__) 或基于项目根的常量,避免相对路径出错。

把知识串成项目:一个小示例思路

想做一个能注册/登录并显示用户名的最小项目,步骤是:

  1. 搭建项目结构(public、src、vendor、config)。
  2. 用 Composer 创建自动加载并安装必要库(例如 routing 或 dotenv)。
  3. 做数据库迁移:users 表包含 id、email、password_hash、created_at。
  4. 实现注册:表单提交 -> 验证 -> 密码哈希 -> 存库。
  5. 实现登录:验证用户 -> password_verify -> 写入 session。
  6. 实现登出和基本权限检查(登录态拦截)。

这套流程能把上面讲的每个点都用到:表单、验证、会话、PDO、Composer、路由与视图。

更多资源(像是下一步的路线图)

  • PHP 官方手册(函数手册、语言参考)——最权威的工具书。
  • 学习框架:Laravel、Symfony,适合项目化开发并能学到架构思想。
  • 调试工具:Xdebug、Blackfire(性能分析)。
  • 书籍参考:《PHP 可怕的实战》(示例书名),《Modern PHP》之类的书,帮助建立长期思维。

常见问答(快速解惑)

  • 我该学框架还是原生 PHP?先学原生,理解底层生命周期和安全细节,再学框架会更容易。
  • 开发环境和生产环境差别大吗?差别在配置(错误显示、缓存、日志),部署前要把配置适配成生产级别。
  • 如何快速排查错误?先看日志,再在最小可复现示例上复现问题,最后用调试器断点查看状态。

好啦,写到这里我也把脑子里的步骤按顺序摆出来了,可能还有一些零碎的小技巧没提,但你如果照着环境搭建、写第一个脚本、试试内建服务器、接着做表单和数据库,逐步把功能铺开,就能从 HelloWorld 顺利走到一个能用的小应用。慢慢来,出错是正常的,调试和读官方手册会变成常态,越做越顺手。