我有一个在我们的Linux服务器上运行良好的Web应用程序,但是当使用PHP 5.3在Zend社区版服务器上运行Mac OS时,我们收到错误:
usort():数组由用户比较函数
修改
每次第一次加载页面时(页面加载并加载大约需要2分钟,在linux服务器上加载页面的时间为1秒)。
有没有其他人经历过这个或者我知道如何解决这个问题,我已经尝试过玩PHP和Apache内存设置而没有运气。
答案 0 :(得分:85)
有一个PHP错误可能会导致此警告,即使您不更改阵列。
简短版本,如果任何PHP调试函数检查排序数组,它们将更改引用计数并欺骗usort()
以认为您已更改数据。
因此,您将通过在sort函数(或从其调用的任何代码)中执行以下任何操作来获得该警告:
var_dump
或print_r
debug_backtrace()
该错误影响所有PHP 5版本> = 5.2.11但不影响PHP> = 7.有关详细信息,请参阅the bug report。
据我所知,唯一的解决方法是“不要那样做”(对于异常很难),或者使用错误抑制运算符@usort()
来忽略所有错误。
答案 1 :(得分:8)
要解决此问题,我们可以按照以下方式处理
1)使用error_reporting
$a = array('id' => 2,'val' => 3, 'ind' => 3);
$errorReporting = error_reporting(0);
usort($a);
error_reporting($errorReporting);
2)使用@usort($a);
$a = array('id' => 2,'val' => 3, 'ind' => 3);
@usort($a);
答案 2 :(得分:3)
当PHP在我的回调函数中抛出错误时,我遇到了这个问题。因此,不是吐出正在发生的实际错误,而是抛出:
usort():数组由用户比较函数
修改
答案 3 :(得分:1)
Linux机器上有哪个版本的PHP?
两个方框的error_reporting级别是否相同?尝试将它们都设置为E_ALL。
警告几乎肯定不是谎言。它说你传递给usort()的比较函数是改变你正在尝试排序的数组 - 这肯定会让我们花费很长时间,可能永远!
我的第一步是研究比较功能,并弄清楚为什么会发生这种情况。如果linux盒子使用的是5.3之前的版本,那么比较函数中使用的某些语言函数的行为可能会有所不同。
答案 4 :(得分:1)
我发现使用PHP5.4,使用error_log($message, $message_type, $destination, $extra_headers)
进行日志记录会导致此错误,当我清理日志条目时,我的问题就解决了。通过在排序功能后禁用和恢复日志记录,可以暂时暂停日志记录。