PHP 不会按计划保存变量


PHP doesn't save variable as planned

我想在数据库中保存用户正在查看的页面。我编写了代码,但每次将页面保存到数据库时,它都会保存字符串"favicon.ico"。但是当我对要保存在数据库中的变量进行var_dump时,它会显示"个人/消息"。

这是代码:

$page = isset($_GET['REQUEST_URI']) ? $_GET['REQUEST_URI'] : 'home';
var_dump($page); // Outputs: string(17) "personal/messages"
$this->query(
    "UPDATE ".TBL_USERS." SET page = :page WHERE username = :id",
    array(':page' => $page, ':id' => $username)
);

因此,当我查看数据库时,它说:"favicon.ico"。当我将变量 $page 更改为 = "家"时;它将主页保存到数据库而不是网站图标.ico。

以下是更多输出:

$page = isset($_GET['REQUEST_URI']) ? $_GET['REQUEST_URI'] : 'home';
var_dump($page); // Outputs: string(17) "personal/messages"
// Saves in database as "favicon.ico"
$page = $_GET['REQUEST_URI'];
var_dump($page); // Outputs: string(17) "personal/messages"
// Saves in database as "favicon.ico"
$page = "personal/messages";
var_dump($page); // Outputs: string(17) "personal/messages"
// Saves in database as "personal/messages"

有人知道问题吗?

用户的浏览器向favicon发出请求.ico因此它可以显示一个可爱的favicon。但是您的 htaccess 似乎将该请求重写到您的脚本中。您要么必须放置一个网站图标.ico。或者更改您的 htaccess 文件

您似乎遇到了 URL 重写问题(在您的 htaccess 文件或服务器配置中)。问题是对静态文件的请求也会重定向到您的 php 脚本,这就是为什么您的脚本也会获取/favicon.ico 请求并将其写入数据库的原因。

您必须验证 URL 重写规则,以防止静态文件 URI 重定向到脚本 URI。阿帕奇指南Nginx指南

而不是保存REQUEST_URi

从魔术常量__FILE__中获取文件名并从中删除扩展名。

function chopExtension($filename) {
  $ext = pathinfo($filename, PATHINFO_EXTENSION);
  return preg_replace('/'.' . preg_quote($ext, '/') . '$/', '', $filename);
}
$page = chopExtension(__FILE__);