PHP 超全局变量面试考点总结

2次阅读

php全局变量无需global声明即可全局使用,包括$_get、$_post(区分url参数与表单提交)、$_session与$_cookie(服务端vs客户端状态管理)、$_server(环境与请求信息)、$_files(文件上传)和$globals(全局变量引用),需注意安全风险与正确用法。

PHP 超全局变量面试考点总结

PHP 超全局变量是面试高频考点,核心在于理解“超全局”的含义(无需 global 声明即可在任意作用域直接使用)、区分各变量的来源与典型用途,并能识别常见误用和安全风险。

$_GET 和 $_POST:最常考的输入来源区别

$_GET 获取 URL 查询参数(如 ?id=123),数据可见、长度受限、易被篡改;$_POST 获取表单 POST 提交数据(通常来自 application/x-www-form-urlencodedmultipart/form-data),适合传敏感或大量数据。

  • 注意:$_REQUEST 默认包含 $_GET、$_POST、$_COOKIE,但顺序可由 variables_order 配置决定,不建议依赖它——容易引发覆盖或混淆
  • 不要直接输出 $_GET[‘name’] 到 HTML,必须 htmlspecialchars() 或其他方式转义,否则 xss 风险
  • $_POST 不会自动解析 json 请求体;若前端用 fetch(…, { body: JSON.stringify(…) }),需用 file_get_contents(‘php://input’) 手动读取并 json_decode()

$_SESSION 和 $_COOKIE:状态管理的关键差异

$_SESSION 服务端存储(默认存在文件中),靠 session_id 关联用户;$_COOKIE 是客户端存储的键值对,随每次请求发送到服务端。

  • session_start() 必须在任何输出前调用,否则报错;开启后 $_SESSION 才可用
  • $_COOKIE 中的数据可被用户直接修改,绝不可信任;$_SESSION 数据相对可控,但仍需防范会话固定(Session Fixation)和会话劫持
  • 设置 Cookie 用 setcookie(),且同样需在输出前;$_COOKIE 只反映请求头中已有的 Cookie,不会实时同步 setcookie() 的结果

$_SERVER:获取运行环境与请求上下文

包含服务器信息、请求路径、http 头等,是调试和路由判断的重要依据。

立即学习PHP免费学习笔记(深入)”;

  • 常用键:$_SERVER[‘REQUEST_URI’](原始请求路径)、$_SERVER[‘PHP_SELF’](当前脚本名)、$_SERVER[‘HTTP_USER_AGENT’](浏览器标识)、$_SERVER[‘REMOTE_ADDR’](客户端 IP)
  • 注意:$_SERVER[‘REMOTE_ADDR’] 可被代理伪造;真实 IP 可能藏在 $_SERVER[‘HTTP_X_FORWARDED_FOR’] 或 $_SERVER[‘HTTP_X_REAL_IP’] 中,但这些头也可被恶意构造,需结合可信代理名单验证
  • $_SERVER[‘SCRIPT_FILENAME’] 和 __FILE__ 含义不同:前者是 Web 服务器解析后的绝对路径,后者是当前 PHP 文件的路径(更可靠)

$_FILES 和 $GLOBALS:上传处理与全局作用域陷阱

$_FILES 专门处理文件上传,结构为二维数组(’name’、’type’、’tmp_name’、’Error’、’size’);$GLOBALS 是指向所有全局变量的引用数组,慎用。

  • 上传失败时 $_FILES[‘file’][‘error’] !== UPLOAD_ERR_OK,需检查错误码(如 1 表示 php.ini 中 upload_max_filesize 超限)
  • 临时文件存于 tmp_name,必须用 move_uploaded_file() 移动,不能用 copy() 或 rename() —— 出于安全隔离机制限制
  • $GLOBALS[‘var’] 等价于 global $var; echo $var;,但过度依赖会降低可读性、增加耦合;函数内修改 $GLOBALS[‘x’] = 5 相当于改变了全局变量 $x,容易引发意外副作用
text=ZqhQzanResources