【问题标题】:PHP: weird usort bugPHP:奇怪的排序错误
【发布时间】:2011-07-23 19:42:16
【问题描述】:

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

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

导致此警告:

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

警告:include_once() [function.include]:在 /opt/www/ 中打开 'sc3lycp6hmyab.php' 以包含 (include_path='.:/usr/share/php:/usr/share/pear') 失败xxx/web/private/Zend/Loader.php 在第 146 行

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

关于如何消除此警告的任何想法?

【问题讨论】:

    标签: php zend-framework usort


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      对我来说,它看起来像那些垃圾邮件发送者的名字。我想这没有任何关系。我认为您的应用程序中可能存在未转义的内容,导致有人试图利用它;)

      【讨论】:

      • 是的,我也想到了:这可能是 Zend Autoloader 意外捕获的恶意软件注入。另一方面,它可能是一个随机缓存文件名。不过值得一试
      • Zend 缓存文件以zend-cache- 开头,所以它不是缓存文件。
      • 我怀疑这是恶意软件注入...该网站刚刚上线,网址还不知道。
      【解决方案3】:

      这与usort 无关,但与您告诉usort() 调用的Util_SortItem 类的ByOrder 方法有关。

      您应该查看定义该类的文件,看看它是如何触发错误的。

      一种可能性是它试图包含一个不存在的类,这会触发 Zend 的 Autoloader; Zend 正在尝试创建某种缓存文件的另一个。

      【讨论】:

      • 如果我添加一个骰子; ByOrder 方法中第一行代码之前的语句,我仍然收到警告。
      • @brechtvhb 很奇怪。那么这一定是 Zend 在加载类(或试图这样做)时所做的事情。 util_SortItem 是一个类吗?它是如何加载的?
      • 这是一个非常简单的类:<?php class util_SortItem { var $a; var $b; public function SortItem($objectA, $objectB) { $this->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 你是如何加载它的,通过自动加载器还是使用include()?您是否配置了 Zend Framework 存储缓存和临时文件的路径?我不是 ZF Guru,但我想我记得它在某个地方有选择。文件名看起来像一个临时文件
      • 我正在通过自动加载器加载它。我没有配置任何关于缓存文件的内容,但我会调查一下。
      猜你喜欢
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2012-08-28
      • 2012-06-12
      • 2012-03-23
      • 2016-11-09
      相关资源
      最近更新 更多