Запуск Zend Framework на PHP 5.1.6 - исправление или исправление для ksort ()? - PullRequest
4 голосов
/ 29 июля 2010

Я создал приложение ZF, использующее 1.10 для развертывания на сервере RHEL в корпоративном клиенте, который имеет PHP 5.1.6. Это не будет работать.

Я гуглил и теперь понимаю, что это версия PHP. Я не осознавал, что ZF предъявлял минимальные требования к PHP 5.2.4, и вызовы HeadLink, по-видимому, вызывают фатальную ошибку «Вызов неопределенного метода Zend_View_Helper_Placeholder_Container :: ksort ()»:

PHP Fatal error:  Call to undefined method Zend_View_Helper_Placeholder_Container::ksort() in /library/ Zend/View/Helper/HeadLink.php on line 321

Клиент не будет обновлять свой PHP; Я не хочу переписывать приложение без ZF, и я бы предпочел не понижать ZF до более ранней версии.

Есть ли какой-нибудь патч, который я могу использовать, чтобы добавить ksort () к ZF 1.10, чтобы обойти это? Могут быть и другие проблемы, но я застрял прямо сейчас.

Любой совет приветствуется

Большое спасибо

Ian

РЕДАКТИРОВАТЬ: Как я уже сказал в комментарии ниже, я ожидаю, что многие люди уже сталкивались с этим и будут продолжать это делать, поскольку RHEL5 будет стандартом в корпоративных средах в течение хорошего времени. Я надеялся на ссылку на существующее решение, а не на то, чтобы разработать его с нуля.

ОБНОВЛЕНИЕ: я использовал патч, связанный с принятым ответом, и он решил проблему для меня.

Это добавление следующего открытого метода в Zend / View / Helper / Placeholder / Container / Abstract.php

    /** 
 * Sort the array by key 
 * 
 * @return array 
 */ 
public function ksort() 
{ 
    $items = $this->getArrayCopy(); 
    return ksort($items); 
}

Была еще одна проблема; уведомление PHP, вызванное преобразованием строки в Zend_View_Helper_Doctype. Сравнивая эту функцию с аналогичными выше и ниже, кажется, что это ошибка в библиотеке

public function isHtml5() {
    return (stristr($this->doctype(), '<!DOCTYPE html>') ? true : false);
}

Изменено на:

public function isHtml5() {
    return (stristr($this->getDoctype(), '<!DOCTYPE html>') ? true : false);
}

Заплатить саму библиотеку было последним, что я обычно делал, но в этом случае это вывело меня из положения. Мы позаботимся о том, чтобы патч был обновлен в репозитории и, очевидно, документирован для будущих разработчиков.

Ответы [ 2 ]

6 голосов
/ 30 июля 2010

У меня была такая же проблема сегодня.Я нашел решение в этом блоге .

Добавьте следующий фрагмент в /Zend/View/Helper/Placeholder/Container/Abstract.php:

/**
* Sort the array by key
*
* @return array
*/
public function ksort()
{
    $items = $this->getArrayCopy();
    return ksort($items);
} 
2 голосов
/ 29 июля 2010

Полагаю, вы могли бы изменить наследование Zend_View_Helper_Placeholder_Container или Zend_View_Helper_Placeholder_Container_Abstract для обеспечения собственной реализации ArrayObject::ksort.Что-то вроде:

class CompatibilityArrayObject extends ArrayObject {
    public function ksort () {
        // here be dragons
    }
}


abstract class Zend_View_Helper_Placeholder_Container_Abstract
extends CompatibilityArrayObject {
    ...
}

Вы не знаете, сколько еще проблем.Если в требовании написано PHP 5.2.4, это то, что вы должны запустить на нем.

...