PHP-FAQ-PHP_SELF和SCRIPT_NAME

avatar
作者
猴君
阅读量:0

1 需求


2 接口


3 示例

$_SERVER['PHP_SELF'] 和 $_SERVER['SCRIPT_NAME'] 在 PHP 中都用于获取当前执行脚本的路径,但它们之间有一些细微的差别,主要涉及到 URL 的格式和查询字符串(query string)的处理。

$_SERVER['PHP_SELF']

  • $_SERVER['PHP_SELF'] 返回当前执行脚本的路径,包括文件名,并且如果 URL 中包含查询字符串(即 ? 后面的部分),它也会包含这个查询字符串
  • 它通常用于表单的 action 属性中,以确保表单数据被发送回当前脚本进行处理。
  • 但是,由于它包含查询字符串,如果直接将其用于链接或重定向而不进行适当处理,可能会导致安全问题,如跨站脚本攻击(XSS)。

$_SERVER['SCRIPT_NAME']

  • $_SERVER['SCRIPT_NAME'] 也返回当前执行脚本的路径,包括文件名,但它不包括查询字符串
  • 它提供了脚本的“基础”URL,不包含任何通过 GET 方法传递的参数。
  • 由于它不包含查询字符串,因此在大多数情况下,它比 $_SERVER['PHP_SELF'] 更安全,特别是当你不希望将查询字符串传递给另一个脚本或页面时。

使用示例

假设你的 URL 是 http://example.com/script.php?action=edit

  • $_SERVER['PHP_SELF'] 将返回 /script.php?action=edit
  • $_SERVER['SCRIPT_NAME'] 将返回 /script.php

安全注意事项

当使用 $_SERVER['PHP_SELF'] 或类似变量来构建链接或重定向时,始终应该对其进行清理或转义,以防止 XSS 攻击。一个常见的做法是使用 htmlspecialchars() 函数来转义这些变量中的特殊字符。

例如:

php<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post"> <!-- 表单内容 --> </form>

这样,即使 URL 中包含恶意脚本,它们也会被转义,从而防止它们在页面上执行。


4 参考资料

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!