reset() -“严格标准:只有变量应该通过引用传递”[重复]

Posted

技术标签:

【中文标题】reset() -“严格标准:只有变量应该通过引用传递”[重复]【英文标题】:reset() - "Strict Standards: Only variables should be passed by reference" [duplicate] 【发布时间】: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函数 我不知道这里的重置是做什么的。我不是代码的开发者。我只是想把它从旧主机上移走,这就是错误日志中显示的内容。谢谢 记得搜索错误信息。这不是一个新问题。 【参考方案1】:

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

你需要做这样的事情:

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

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

【讨论】:

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

以上是关于reset() -“严格标准:只有变量应该通过引用传递”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

严格标准:只能通过引用传递变量

错误消息“严格的标准:只能通过引用传递变量”

只有变量应该通过函数引用来分配

php数组上的严格标准消息

严格标准错误

SHELL脚本攻略(学习笔记)--1.4 变量(基础)