PHP:奇怪的usort错误

3

在我的本地机器上,一切都正常。但是当我将这段代码上传到我的生产服务器时,我收到了一个奇怪的警告...

usort($modules, array('util_SortItem', 'ByOrder'));

引起此警告的原因:

警告:include_once(sc3lycp6hmyab.php)[function.include-once]:未能打开流:在/opt/www/xxx/web/private/Zend/Loader.php的第146行中没有此文件或目录

警告:include_once()[function.include]:无法打开包括'sc3lycp6hmyab.php'中(包括路径='.:/usr/share/php:/usr/share/pear')/opt/www/xxx/web/private/Zend/Loader.php的第146行

当我从代码中删除usort时,警告消失了。

您有什么想法可以消除这个警告吗?

3个回答

3
这与usort无关,而是与Util_SortItem类的ByOrder方法有关,你告诉usort()要调用它。你应该查看定义该类的文件以查看它触发错误的原因。
一种可能性是它尝试包含一个不存在的类,这会触发Zend的自动加载程序; 另一种可能是Zend正在尝试创建某种类型的缓存文件。

如果我在ByOrder方法的第一行代码之前添加一个die;语句,我仍然会收到警告。 - brechtvhb
@brechtvhb 奇怪。那么这一定是Zend在加载类时(或尝试这样做时)所做的事情。util_SortItem是一个类吗?它是如何加载的? - Pekka
这是一个非常简单的类:a = $objectA; $this->b = $objectB; } public function ByOrder($m, $n) { print_r($m); if ($m->Order == $n->Order) { return 0; } return ($m->Order < $n->Order) ? 1 : -1; } } ?> - brechtvhb
@brechtvhb 你是通过自动加载器还是使用 include() 加载它的?你是否配置了Zend Framework的路径以存储缓存和临时文件?我不是ZF大师,但我记得它在某个地方有这些选项。该文件名看起来像一个临时文件。 - Pekka
好的 :) 更奇怪的是,它确实像应该一样排序。 - brechtvhb
显示剩余2条评论

2

在我看来,这些名字看起来像是垃圾邮件发送者的名字。我猜这与此事无关。我认为你的应用程序中可能存在未转义的内容,导致有人试图利用它 ;)


是的,我也想到了:可能是Zend自动加载程序意外捕获的恶意软件注入。另一方面,它也可能是一个随机的缓存文件名。无论如何都值得检查。 - Pekka
Zend缓存文件以zend-cache-开头,因此它不是缓存文件。 - Ashley
我怀疑这不是恶意软件注入...该网站只是上线了,URL尚未知晓。 - brechtvhb

1

我一直没能解决这个问题,但我通过合并两个查询并在我的SQL服务器上进行排序来解决了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接