我有一个在我们的Linux服务器上运行良好的Web应用程序,但是当使用PHP 5.3在Zend Community Edition Server上运行Mac OS时,我们收到错误消息:
usort():数组由用户比较函数修改
每次页面第一次加载时(页面加载和加载大约需要2分钟),在Linux服务器上页面加载1秒钟.
有没有其他人经历过这个或有任何想法如何解决问题,我已经尝试过玩PHP和Apache内存设置没有运气.
小智 85
即使您不更改阵列,也会出现导致此警告的PHP错误.
简短版本,如果任何PHP调试函数检查排序数组,他们将更改引用计数和技巧,usort()
以认为您已更改数据.
因此,您将通过在sort函数(或从其调用的任何代码)中执行以下任何操作来获得该警告:
var_dump
或print_r
任何排序数据debug_backtrace()
该bug影响所有PHP 5版本> = 5.2.11但不影响PHP> = 7.有关更多详细信息,请参阅错误报告.
据我所知,唯一的解决方法是"不要那样做"(这对异常很难),或者使用错误抑制运算符@usort()
来忽略所有错误.
小智 8
要解决此问题,我们可以按照以下方式处理
1)使用error_reporting
$a = array('id' => 2,'val' => 3, 'ind' => 3);
$errorReporting = error_reporting(0);
usort($a);
error_reporting($errorReporting);
Run Code Online (Sandbox Code Playgroud)
2)使用 @usort($a);
$a = array('id' => 2,'val' => 3, 'ind' => 3);
@usort($a);
Run Code Online (Sandbox Code Playgroud)
Linux 机器上的 PHP 版本是什么?
两个盒子上的 error_reporting 级别是否相同?尝试将它们都设置为 E_ALL。
这个警告几乎肯定不是撒谎。这意味着您传递给 usort() 的比较函数正在更改您尝试排序的数组- 这肯定会使 usort 花费很长时间,甚至可能永远!
我的第一步是研究比较函数,并找出发生这种情况的原因。如果 Linux 机器使用 5.3 之前的版本,则比较函数中使用的某些语言函数的行为可能会有所不同。
归档时间: |
|
查看次数: |
21927 次 |
最近记录: |