【问题标题】:Unexpected conversion of $_GET["var"] to integer$_GET["var"] 到整数的意外转换
【发布时间】:2012-12-11 17:52:09
【问题描述】:

我在 PHP 5.4.10 下运行的页面中有以下 sn-p(注意比较中的 ===)。

$list_all_pages = False;
$reqs_per_page = 50;
$start_page = 0;

if (isset($_GET["p"])) {
    echo("Debug: " . $_GET["p"] . "\n");
    if ($_GET["p"] === "all") {
        $list_all_pages = True;
    } else {
        $start_page = intval($_GET["p"]);
        if ($start_page < 1)
            $start_page = 0;
    }
}

参数“p”意为将显示的结果页数(从零开始)或“all”以显示所有页面。由于我不明白的原因,PHP 自动将我的参数转换为整数,结果我永远无法显示我希望的所有页面。

例如,使用“mypage.php?p=all”调用页面会导致调试回显打印“调试:0”

发生了什么事?我觉得这种自动转换有点危险……以前有人遇到过这个问题吗?

【问题讨论】:

  • 你是通过 Wordpress 运行的吗?
  • @SamuelCook 你是说 WP 改变了超全局变量的值吗? :(如果是这样的话,它比我想象的还要糟糕:P
  • @SamuelCook 不,但我在同一台服务器上安装了 WP 并且启用了 APC。这种组合可以改变所有 Apache 进程共享的一些全局 PHP 状态吗?

标签: php pagination type-conversion superglobals type-coercion


【解决方案1】:

这就够了,不用打字了

if ($_GET["p"] == "all") {
        $list_all_pages = True;
    } else {
        $start_page = (int)$_GET["p"];
        if ($start_page < 1)
            $start_page = 0;
    }

【讨论】:

    【解决方案2】:

    $_GET 变量 p(即 ?p=)在 WordPress 中保留,作为提供帖子 ID 的默认方式。虽然大多数人喜欢转换他们的 URL,但默认是 www.domain.com/?p=123。

    Wordpress 专门寻找这个参数(它也作为wp_shortlink),如果不是数字会自动将值设置为0。

    【讨论】:

    • 这里是 WordPress 中保留字(术语)的链接 - codex.wordpress.org/Function_Reference/…
    • 谢谢!我只是用“pg”替换了“p”并且它起作用了。问题是:这个特定的脚本不调用任何 WP 函数(它甚至不从同一目录运行)。我认为我的 Apache 配置中有一些全局重写规则弄乱了参数。
    猜你喜欢
    • 2016-05-21
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2020-10-04
    相关资源
    最近更新 更多