PHP 7.3 不调用 HTML,而是通过 Web 服务器响应 HTTP 请求并输出 HTML;文件上传需 HTML 表单(method="post"、enctype="multipart/form-data"、name 属性)配合 PHP 脚本接收、校验与移动文件,并配置 php.ini 及做好安全防护。

PHP 7.3 本身不“调用 HTML”,而是通过 Web 服务器(如 Apache 或 Nginx)响应 HTTP 请求,将 PHP 脚本生成的 HTML 输出给浏览器;文件上传则依赖前端表单提交 + 后端 PHP 脚本接收处理。整个流程是标准的客户端-服务器协作,不是 PHP 主动去“调用”HTML 页面。
HTML 表单必须正确配置
文件上传的起点是 HTML 表单,关键点不能遗漏:
- method 必须是 post:GET 不支持文件数据传输
- enctype 必须设为 multipart/form-data:这是唯一能编码二进制文件的表单编码类型,缺了它 $_FILES 就为空
- input type="file" 的 name 属性要明确:比如 name="upload_file",后续 PHP 才能通过 $_FILES['upload_file'] 访问
- 可加 accept 属性辅助提示(如 accept="image/*"),但仅前端提示,不可替代服务端验证
PHP 7.3 脚本接收并移动文件
假设表单 action 指向 upload.php,该文件需完成基础处理:
- 检查 $_FILES['upload_file']['error'] === UPLOAD_ERR_OK,确认无系统级错误(如超限、临时目录不可写)
- 用 is_uploaded_file() 验证 $_FILES['upload_file']['tmp_name'] 确实是合法上传临时文件,防路径伪造
- 定义目标目录(如 uploads/),确保该目录存在且 PHP 进程有写权限(chmod 755 或 775)
- 用 move_uploaded_file() 将临时文件移入目标路径,不能用 copy() 或 rename()
PHP.ini 配置必须启用上传功能
PHP 7.3 默认开启 file_uploads,但仍需人工确认和调整:
立即学习“PHP免费学习笔记(深入)”;
- 打开 php.ini,确认 file_uploads = On
- 设置 upload_max_filesize = 8M(按需调整,如需传大文件设为 20M)
- 同步调整 post_max_size = 10M(必须 ≥ upload_max_filesize)
- 重启 Web 服务器(Apache: sudo systemctl restart apache2;Nginx+PHP-FPM: sudo systemctl restart php7.3-fpm)
安全处理建议(PHP 7.3 可直接使用)
仅靠扩展名白名单不够,推荐组合措施:
- 提取扩展名用 pathinfo($filename, PATHINFO_EXTENSION),转小写后比对白名单数组(如 ['jpg','png','pdf'])
- 用 finfo_open() 检查文件真实 MIME 类型(魔术字节检测),拒绝 type 为 application/x-php 等危险类型
- 重命名文件(如用 uniqid() + mt_rand() 生成新名),避免原文件名导致路径遍历或覆盖
- 上传目录不要放在 webroot 下,或在该目录中放一个空的 index.html 和 .htaccess(Deny from all)防止直接访问



















