4

PHP 5.1.6 を搭載した企業クライアントの RHEL サーバーに展開するために、1.10 を使用して ZF アプリを構築しました。実行されません。

私はググったところ、それが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 に追加するために使用できるパッチはありますか? 他にも問題があるかもしれませんが、これが私が今行き詰まっているところです。

どんなアドバイスでも歓迎

どうもありがとう

イアン

編集: 以下のコメントで述べているように、RHEL5 は企業環境の標準になるため、多くの人が以前にこれを実行したことがあると思います。ゼロから考案するのではなく、既存のソリューションへのリンクを望んでいました。

更新:受け入れられた回答にリンクされているパッチを使用したところ、問題が修正されました。

これは、次のパブリック メソッドを Zend/View/Helper/Placeholder/Container/Abstract.php に追加しています。

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

残りの問題が 1 つあります。Zend_View_Helper_Doctype の文字列変換による PHP 通知。この関数を上下の同様の関数と比較すると、これはライブラリのエラーのようです

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

変更:

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

ライブラリ自体にパッチを適用することは、私が通常行う最後のことでしたが、この場合、問題が解決しました。パッチがリポジトリでバージョン管理され、将来の開発者のために明らかに文書化されていることを確認します.

4

2 に答える 2

6

今日も同じ問題がありました。このブログ投稿で解決策を見つけました。

次のスニペットを/Zend/View/Helper/Placeholder/Container/Abstract.phpに追加します。

/**
* Sort the array by key
*
* @return array
*/
public function ksort()
{
    $items = $this->getArrayCopy();
    return ksort($items);
} 
于 2010-07-30T15:54:55.557 に答える
2

の継承を変更し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 と記載されている場合は、それを実行する必要があります。

于 2010-07-29T01:53:32.767 に答える