升级服务器从5.2 php升级到5.4,现在有错误

时间:2013-12-13 20:01:55

标签: php

第一个错误是

  

严格标准:只应在第196行的/home/.sites/143/site2/dispatch.php中通过引用传递变量

dispatch.php的第196行看起来像是

$table_name = array_pop(split('/',$controller));

第二个错误是

  

严格标准:只应在第18行的/home/.sites/143/site2/lib/referer.php中通过引用传递变量

referer.php的第18行看起来像这样

$agentInfo = array_pop($db->get('agencies','company_name,enabled',"id='$agent_id'"));

第三个错误是

  

严格标准:在978行的/home/.sites/143/site2/controllers/step4.php中,只能通过引用传递变量

step4.php的第978行看起来像是

$info = array_pop($this->db->get_records_by_sql($sql));

4 个答案:

答案 0 :(得分:2)

在您的代码中,您将split()函数的返回值传递给array_pop(),但array_pop()期望数组通过引用传递,而不是值。

您可以通过查看array_pop()的文档中的功能说明来验证这一点:

  

mixed array_pop(array & $ array

&符号表示函数需要通过引用传递数组。

您可以使用数组变量来存储函数的输出来解决此问题。另请注意,split()已弃用。请改用explode()

$array = explode('/', $controller);
$table_name = array_pop($array);

更改所有类似的事件。

答案 1 :(得分:0)

尝试将第一个更改为

$r=explode('/',$controller);
$table_name = array_pop($r);

然后

$q=$db->get('agencies','company_name,enabled',"id='$agent_id'");
$agentInfo = array_pop($q);

$q=$this->db->get_records_by_sql($sql);
$info = array_pop($q);

这是因为函数array_pop返回对变量的引用,即最后一个数组成员。请注意这只是严格的警告,而不是错误。

答案 2 :(得分:0)

最佳的是,你应该继续使用5.2版本的项目,将来只需使用5.4。您发现了这些错误,但是您可以在将来发现任何其他错误,并且不是在项目中消除所有错误的好方法。

答案 3 :(得分:0)

错误意味着PHP函数array_pop()需要引用变量而不是值。看到小&在这个页面上的$ array参数旁边?

http://www.php.net/manual/es/function.array-pop.php

您可以使用以下内容解决此问题:

$data = $this->db->get_records_by_sql($sql);
$info = array_pop($data);