【问题标题】:reset() - "Strict Standards: Only variables should be passed by reference" [duplicate]reset() -“严格标准:只有变量应该通过引用传递”[重复]
【发布时间】:2014-08-17 18:56:59
【问题描述】:

我目前正在为客户迁移一个网站。据我所知,他们的旧主机必须使用旧版本的 PHP。该网站目前正在他们当前的主机上工作。我正在努力为他们将其移至新主机,但出现以下错误:

PHP 严格标准:在第 17 行的 /home/parcelt2/core/public_html/loader.php 中,只能通过引用传递变量

下面是第 17 行的一段代码

$uri = parse_url($_SERVER['REQUEST_URI']);
if (substr($uri['path'], -1, 1) == '/' && !sizeof($_POST)) {
$new_uri = substr($uri['path'], 0, -1);
if (strlen($new_uri) > 0) {
    $page = reset(explode('/', $new_uri));  //line 17
    if (!in_array($page, $exempt_requests)) {
        if (isset($uri['query']) && strlen($uri['query']) > 0) {
            $new_uri .= '?' . $uri['query'];
        }
        header('HTTP/1.1 301 Moved Permanently');
        header('Location: ' . $new_uri, true, 301);
        exit;
    }
}
}

有人能提供解决方法或一些关于如何解决此问题的建议吗?我已尝试阅读有关此错误的其他 SO 帖子,但发现它们很难理解。

谢谢

【问题讨论】:

  • 好的,您遇到了错误。你想让我们怎么做?
  • 我想知道reset 在这里做什么。 explode 创建了一个全新的数组,它的指针位于主要位置 - 指向第一个元素,即。
  • 您需要将explode调用的结果存储在一个变量中,然后将该变量传递给reset函数
  • 我不知道这里的重置是做什么的。我不是代码的开发者。我只是想把它从旧主机上移走,这就是错误日志中显示的内容。谢谢
  • 记得搜索错误信息。这不是一个新问题。

标签: php reference strict


【解决方案1】:

reset() 采用对数组(变量)的引用,因此它不适用于函数调用的结果。

你需要做这样的事情:

$arr = explode('/', $new_uri);
$page = reset($arr);

但是,explode() 返回的数组已经将其内部指针设置为第一个元素。您根本不需要调用 reset。

【讨论】:

  • 但是这里的reset 是什么?
  • @raina77ow heh...好点。我会更新答案。
  • 我不知道这里的重置是做什么的。我不是代码的开发者。我只是想把它从旧主机上移走,这就是错误日志中显示的内容。谢谢
  • 你能告诉我该代码如何适合我上面发布的内容吗?很抱歉很痛苦。
  • @BHWD 您的错误是由在函数结果上使用reset() 引起的,而不是变量引用。但是,您根本不需要使用重置。只需在第 17 行删除它即可。
猜你喜欢
  • 2014-11-01
  • 2015-05-27
  • 2016-10-05
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多