PHP: странная ошибка usort

На моей локальной машине все работает нормально. Но при загрузке этого фрагмента кода на мой сервер я получаю странное предупреждение ...

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' для включения (include_path = '.: / Usr / share / php: / usr / share / pear') в / opt / www / xxx / web /private/Zend/Loader.php в строке 146

Когда я удаляю usort из своего кода, предупреждения исчезают.

Есть идеи, как я могу избавиться от этого предупреждения?


person brechtvhb    schedule 27.03.2011    source источник


Ответы (3)


Это не имеет ничего общего с usort, но с методом ByOrder класса Util_SortItem, который вы говорите usort() вызвать.

Вам следует заглянуть в файл, в котором определен этот класс, чтобы увидеть, что он делает, чтобы вызвать ошибку.

Одна из возможностей состоит в том, что он пытается включить несуществующий класс, что запускает автозагрузчик Zend; во-вторых, Zend пытается создать какой-то файл кеша.

person Pekka    schedule 27.03.2011
comment
Если я добавлю кубик; перед первой строкой кода в методе ByOrder, я все равно получаю предупреждение. - person brechtvhb; 27.03.2011
comment
@brechtvhb странно. Тогда это должно быть что-то, что Zend делает при загрузке класса (или попытке сделать это). util_SortItem это класс? Как загружается? - person Pekka; 27.03.2011
comment
Это очень простой класс: <?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; } } ?> - person brechtvhb; 27.03.2011
comment
@brechtvhb Как ты его загружаешь, через автозагрузчик или с помощью include()? Вы настроили путь Zend Framework для хранения кеша и временных файлов? Я не ZF Guru, но я помню, что где-то для этого были варианты. Имя файла выглядит как временный файл - person Pekka; 27.03.2011
comment
Загружаю через автозагрузчик. Я ничего не настраивал о файлах кеша, но я изучу это. - person brechtvhb; 27.03.2011
comment
@brechtvhb автозагрузчик делает что-то забавное, но я не знаю почему. Похоже, ZF по какой-то причине создает временный файл. Может быть, кто-то из постоянных экспертов ZF знает, что это такое, обязательно задайте вопрос через несколько часов, когда в США восходит солнце. - person Pekka; 27.03.2011
comment
Хорошо :) Что делает это еще более странным, так это то, что он выполняет сортировку так, как должен. - person brechtvhb; 27.03.2011

Для меня это похоже на имена спамеров. Думаю, это вообще не связано. Я думаю, что в вашем приложении может быть что-то неэкранированное, и это приводит к тому, что кто-то пытается это использовать;)

person Tomáš Fejfar    schedule 27.03.2011
comment
Да, это тоже пришло мне в голову: это могла быть инъекция вредоносного ПО, случайно обнаруженная автозагрузчиком Zend. С другой стороны, это может быть случайное имя файла кеша. Тем не менее стоит проверить - person Pekka; 27.03.2011
comment
Файлы кэша Zend начинаются с zend-cache-, поэтому это не файл кеша. - person Ashley; 27.03.2011
comment
Я сомневаюсь, что это вредоносная инъекция ... сайт просто онлайн, а URL-адрес еще неизвестен. - person brechtvhb; 27.03.2011

Мне не удалось разобрать isue, но я избавился от него, объединив два запроса и отсортировав их на моем SQL-сервере.

person brechtvhb    schedule 27.03.2011