php5下载使用教程:新手完成第一张作品的方法

php5下载使用教程:新手完成第一张作品的方法

php5下载使用教程:新手完成第一张作品的方法

想学 PHP,或需要维护一套老系统,常会遇到“下载 PHP 5”的需求。先说结论:PHP 5 已经停止维护,不适合新项目,也不应直接部署到公网。本文会说明它适合什么场景、怎样尽量安全地运行旧版本,并带你做一个可以实际运行的网页计算器。示例使用 PHP 5 常见语法,同时尽可能写得清楚,方便初学者阅读。

一、先弄清楚:PHP 5 是什么,适合做什么

PHP 是一种运行在服务器端的脚本语言。浏览器请求 PHP 页面时,服务器上的 PHP 解释器执行代码,再把结果(通常是 HTML)发送给浏览器。PHP 5 指 PHP 语言的旧版本系列,不是一个单独的编辑器,也不是一个网页制作软件。写 PHP 代码可以用普通文本编辑器;要运行它,则需要 PHP 解释器,通常还需要 Web 服务器。

PHP 5 可能适合以下用途:

  • 阅读、理解使用旧版 PHP 编写的项目。
  • 在隔离环境中复现老系统的问题,或为迁移做准备。
  • 学习服务器端程序如何接收请求、处理数据并生成网页。

如果是新项目,应该选择当前仍受支持的 PHP 版本,并确认所用框架、扩展和部署环境兼容。不要因为旧教程使用 PHP 5,就把它当成今天的默认选择。PHP 5.6 的最后一个正式版本是 5.6.40;PHP 5 系列早已停止安全维护。旧版本不会再获得常规安全修复,这一点比“代码能不能跑”更重要。

二、下载之前先选对运行方式

PHP 5 的安装包会随操作系统、版本、CPU 架构和线程安全构建方式不同而不同。尤其是 Windows 上,PHP 二进制包还可能要求匹配的运行库和 Web 服务器配置。不能把一个系统上的 PHP 文件直接复制到另一台系统上,也不能把“下载了解压”误认为已经完成 Web 环境配置。

需要 PHP 5 时,优先从 PHP 官方的历史版本发布资料寻找对应版本,并核对文件名、平台、架构及官方提供的校验信息。不要从来历不明的网盘、论坛附件或所谓“一键绿色版”下载可执行文件。若所在平台已经无法方便地取得可信的旧版二进制文件,可以考虑使用受控的虚拟机或容器,按组织的维护规范构建隔离环境;不要在日常办公电脑或生产服务器上随意安装旧运行时。

对初学者而言,建议分清两种目标:

  • 只想学 PHP:安装当前受支持的 PHP 版本更合适。本文示例也采用较基础的语法,便于在较新的 PHP 上运行。
  • 必须验证 PHP 5 项目:先确认项目需要的具体小版本、扩展、数据库和 Web 服务器,再在隔离环境中准备相同条件。PHP 5 各小版本的功能和扩展支持并不完全相同。

不要为了运行旧代码而关闭系统防火墙、开放公网端口,或把旧版 PHP 作为公共网站的解释器。PHP 5 的边界是“遗留兼容和受控测试”,不是安全的长期运行方案。

三、安装后先检查命令行是否可用

如果已经通过可信渠道取得并安装了对应平台的 PHP,可先打开终端(Windows 可用命令提示符或 PowerShell),运行:

php -v

如果终端显示 PHP 版本,说明命令行能找到 PHP。若提示找不到命令,可能是没有安装、安装目录没有加入 PATH,或当前终端没有读取到更新后的环境变量。Windows 用户也可以在 PHP 程序所在目录直接运行可执行文件,例如:

.\php.exe -v

具体文件名和路径取决于你取得的发行包,不要照搬别的操作系统的路径。检查版本时还要看清楚实际调用的是哪一个 PHP:电脑上可能同时存在多个版本,命令行版本与 Web 服务器使用的版本也可能不同。

PHP 可以直接在命令行运行脚本。先创建一个名为 hello.php 的纯文本文件,内容如下:

<?php
echo "你好,PHP!\n";

在文件所在目录运行:

php hello.php

看到“你好,PHP!”就完成了最小验证。PHP 文件应保存为纯文本,而不是带格式的 Word 文档。文件名要以 .php 结尾;用普通编辑器保存时,留意不要意外变成 hello.php.txt。

四、完成第一件作品:网页四则计算器

接下来做一个可以在浏览器中提交两个数字、选择运算符并显示结果的小页面。它不是生产级计算服务,但涵盖了新手必须理解的几个概念:表单提交、服务器端校验、运算符白名单、除数检查,以及把内容输出到 HTML 时进行转义。

创建 calculator.php,把下面的完整内容保存进去。注意,代码中没有使用较新版本才有的空值合并运算符、箭头函数或类型声明,适合用来理解 PHP 5 风格的基础写法:

<?php
$result = '';
$error = '';
$left = '';
$right = '';
$operator = '+';

function h($value)
{
    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $left = isset($_POST['left']) ? trim($_POST['left']) : '';
    $right = isset($_POST['right']) ? trim($_POST['right']) : '';
    $operator = isset($_POST['operator']) ? $_POST['operator'] : '';

    $numberPattern = '/\A-?(?:\d+(?:\.\d*)?|\.\d+)\z/';

    if (strlen($left) > 32 || strlen($right) > 32) {
        $error = '输入过长,请缩短数字。';
    } elseif (!preg_match($numberPattern, $left)
        || !preg_match($numberPattern, $right)) {
        $error = '请输入有效的十进制数字。';
    } elseif (!in_array($operator, array('+', '-', '*', '/'), true)) {
        $error = '请选择有效的运算符。';
    } else {
        $a = (float) $left;
        $b = (float) $right;

        if (abs($a) > 1000000 || abs($b) > 1000000) {
            $error = '数字范围请控制在 -1000000 到 1000000 之间。';
        } elseif ($operator === '/' && $b == 0) {
            $error = '除数不能为零。';
        } else {
            if ($operator === '+') {
                $value = $a + $b;
            } elseif ($operator === '-') {
                $value = $a - $b;
            } elseif ($operator === '*') {
                $value = $a * $b;
            } else {
                $value = $a / $b;
            }

            $result = rtrim(rtrim(number_format($value, 6, '.', ''), '0'), '.');
            if ($result === '' || $result === '-0') {
                $result = '0';
            }
        }
    }
}
?>
<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>网页四则计算器</title>
</head>
<body>
    <h1>网页四则计算器</h1>

    <form method="post" action="">
        <p>
            <label>第一个数字:
                <input type="text" name="left" value="<?php echo h($left); ?>">
            </label>
        </p>

        <p>
            <label>运算符:
                <select name="operator">
                    <option value="+"<?php echo $operator === '+' ? ' selected' : ''; ?>>+</option>
                    <option value="-"<?php echo $operator === '-' ? ' selected' : ''; ?>>-</option>
                    <option value="*"<?php echo $operator === '*' ? ' selected' : ''; ?>>*</option>
                    <option value="/"<?php echo $operator === '/' ? ' selected' : ''; ?>>/</option>
                </select>
            </label>
        </p>

        <p>
            <label>第二个数字:
                <input type="text" name="right" value="<?php echo h($right); ?>">
            </label>
        </p>

        <p><button type="submit">计算</button></p>
    </form>

    <?php if ($error !== '') { ?>
        <p>错误:<?php echo h($error); ?></p>
    <?php } ?>

    <?php if ($result !== '') { ?>
        <p>结果:<?php echo h($result); ?></p>
    <?php } ?>
</body>
</html>

五、运行网页并验证结果

对于本地学习,可以使用 PHP 自带的开发用 Web 服务器。在 calculator.php 所在目录打开终端,运行:

php -S 127.0.0.1:8000

保持终端窗口运行,然后在本机浏览器访问 http://127.0.0.1:8000/calculator.php。输入两个数字,选择运算符,再点“计算”。开发服务器是为了本地开发和测试使用的,不是生产环境的 Web 服务器;把地址绑定在 127.0.0.1,可以让它仅接受本机连接。不要为了让外网访问而随意改成监听所有网卡的地址。

可以试着验证这些输入:

  • 12.5 加 2,检查小数加法。
  • 9 除以 0,检查是否显示除数错误。
  • 输入字母、空字符串或过长内容,检查是否被拒绝。
  • 输入较大的数字,检查是否触发范围限制。

如果不使用 PHP 自带服务器,而是已经配置好本机 Apache 等 Web 服务器,也可以把文件放进该服务器配置的站点目录,再用浏览器访问。仅仅双击 .php 文件通常不会执行 PHP;浏览器需要向运行 PHP 的服务器发起请求。

六、代码里几个重要的边界和安全点

1. 表单校验必须在服务器端完成

浏览器里的输入框可以被修改,客户端校验也可以被绕过。示例在 PHP 中检查输入格式、长度、范围和运算符,因此不能只依赖 HTML 的输入限制。正则表达式只接受带可选负号的普通十进制格式,例如 -2、3.5 和 .25;它不接受科学计数法、千分位逗号或前后夹带文字的值。这是示例有意采用的输入规则,不代表所有数字应用都必须使用同一种格式。

最大长度和数值范围是本示例的演示限制,不是 PHP 的参数限制,也不是 PHP 5 对所有程序的通用限制。实际应用要根据业务需求设定合理边界。若处理金钱、精确计量或高精度科学数据,不能简单用浮点数当作精确十进制数;应选择符合精度要求的数据表示和计算方案。

2. 用户输入不能当作程序指令

示例只允许 +、-、*、/ 四种运算符,并用条件分支执行计算。不要把用户提交的字符串交给 eval() 执行。eval() 会把字符串当 PHP 代码运行,面对不可信输入会引入严重风险。这个计算器也没有必要使用动态执行。

3. 输出到网页时要按上下文转义

用户提交的内容会重新显示在表单里,所以代码使用 htmlspecialchars 并指定 UTF-8 编码。这样可以避免把输入中的尖括号等字符直接解释为 HTML。转义不是“过滤掉所有坏内容”的万能办法:数据进入 HTML、JavaScript、URL、SQL 等不同上下文时,处理方法也不同。本例只把这些值输出在 HTML 文本或属性中;不要把同一套处理机械地套用到所有位置。

ENT_QUOTES 会处理单引号和双引号,指定字符集有助于按 UTF-8 解释内容。对于非常早期的 PHP 5 安装,函数行为和可用参数应以该具体版本的手册为准;本文示例针对常见 PHP 5 环境,不承诺兼容每一个 PHP 5 的早期小版本。若项目要求兼容特别老的版本,应在对应运行环境中实际测试,并考虑升级运行时。

4. 旧版 PHP 不会因为“只做小工具”就变安全

这个示例不连接数据库、不上传文件、不执行系统命令,也没有用户账户,因此适合本地学习。它不等于一个已经具备生产安全能力的网站。旧版 PHP 运行时本身缺少后续安全修复;真实网站还需要维护 Web 服务器、依赖库和操作系统,并设计认证、授权、错误处理、日志、备份和数据保护等措施。

如果要处理账户密码,应使用安全的密码哈希 API,而不是明文保存或自行设计加密方案;但 PHP 5 的早期版本未必提供现代项目通常依赖的接口,不能直接假设代码在所有 PHP 5 环境都可用。遇到这类需求,优先迁移到受支持的 PHP 版本。面向公网的旧系统应尽快制定升级和迁移计划,并通过网络隔离、访问控制等措施降低过渡期间的风险,而不是把隔离当成永久替代维护。

七、新手常见错误排查

  • 浏览器显示 PHP 源码,或下载 PHP 文件:请求没有经过 PHP 解释器。检查 Web 服务器是否配置了 PHP,或改用本地开发服务器访问。
  • 终端找不到 php 命令:确认 PHP 已安装、路径正确,并检查 PATH 配置。修改环境变量后可能需要重新打开终端。
  • 页面出现空白或服务器错误:先查看终端或服务器错误日志。PHP 错误显示配置因版本和环境而异;不要为了查错而把详细错误信息长期公开给网站访客。
  • 提示文件不存在:确认当前终端目录、文件名和扩展名。可先列出目录内容,检查文件是否真的叫 calculator.php。
  • 中文乱码:确认文件以 UTF-8 保存,页面声明了 UTF-8,并在输出转义时明确使用 UTF-8。编辑器编码与网页声明不一致时,可能造成乱码。
  • 修改代码后网页没有变化:确认编辑的是服务器实际读取的文件;如果运行在 Web 服务器环境,也要检查缓存和访问路径。
  • 本机端口无法访问:确认 PHP 开发服务器仍在运行、终端没有报错,并访问正确的端口和文件路径。该命令默认服务当前目录。
  • 下载的 PHP 无法启动:常见原因包括操作系统或架构不匹配、依赖运行库缺失、下载包类型不合适,或运行了错误的二进制文件。不要随意从陌生网站补下载 DLL;先核对官方发布信息和对应平台要求。

八、接下来怎样继续

完成计算器后,可以先在不改变安全边界的前提下增加功能,例如显示用户选择的算式、加入清空按钮,或将页面拆分为 HTML 与 PHP 文件。每次修改都在本机测试,尤其检查无效输入和边界值。

若目标是维护旧项目,下一步不是继续照抄零散的 PHP 5 教程,而是盘点项目实际运行版本、扩展、依赖和部署方式,建立可重复的隔离测试环境,再评估迁移到受支持 PHP 版本的工作量。若目标是学习开发,则从当前仍受支持的 PHP 版本开始,并学习表单处理、数据校验、输出编码、数据库访问和错误日志等基础知识。这样做出的作品不仅能运行,也更容易安全地维护。

© 版权声明

相关文章