4

我已经使用 1.10 构建了一个 ZF 应用程序,用于在企业客户端的 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 来解决这个问题?可能还有其他问题,但这是我现在卡住的地方。

欢迎任何建议

非常感谢

伊恩

编辑:正如我在下面的评论中所说,我希望很多人之前已经达到了这一点,并将继续这样做,因为 RHEL5 将成为企业环境中的标准,并在未来的好时机。我希望有一个现有解决方案的链接,而不是从头开始设计一个。

更新:我在接受的答案中使用了链接到的补丁,它为我解决了这个问题。

这是将以下公共方法添加到 Zend/View/Helper/Placeholder/Container/Abstract.php

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

还有一个问题;由 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);
}

修补库本身是我通常会做的最后一件事,但在这种情况下,它让我失去了一个位置。我们将确保在 repo 中对补丁进行版本控制,并为未来的开发人员明确记录。

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_ContainerZend_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 回答