1

我有一个在两个地方运行的应用程序——一个在 OS X 上使用 PHP 5.3 和 Apache 的开发 MAMP 服务器,以及一个使用 PHP 5.3 的生产 IIS 6.0 服务器。

问题是,该应用程序在 Apache 上运行良好。没有错误、警告或任何东西。

但是当我在 IIS 服务器上调用实用程序类的静态函数时,我收到 500 错误。问题是,函数永远不会被调用——在函数的开头放置一个“echo”什么都不做,这告诉我问题不是函数内部的代码......上课很好。

检查日志 ( C:\Windows\temp\php-errors.log) 未显示与此问题相关的任何内容,但它正在正确记录其他错误(意外字符和其他任何内容)。

这是被调用的函数和脚本停止执行的地方:

json_encode(Utilities::ContextifyToUser(Article::getArticlesInCollectionOfUser($user), $user);

分离json_encodegetArticlesInCollection表明它们都在工作并返回正确的值。杀死它的是“上下文化”功能。

这是 contextify 函数,在名为 的类中定义Utilities

public static function ContextifyToUser($obj = array(), $user = null){
        if(is_null($user) || !is_array($obj)){
            return null;
        }

        foreach($obj as $key => $value){
            $obj[$key] = $value->contextifyToUser($user);
        }

        return $obj;
    }

正如我之前提到的,函数中的任何代码都不会被调用。如果我在函数定义后加上“echo 'hello'”,它就永远不会被调用。

是我的代码,还是 IIS 有点奇怪?考虑到这在 Apache 中完美运行,我认为是后者......

我还想指出,尽管更改了 display_errors INI 并使用error_reporting(E_ALL). 简单地抛出一个 500 错误,并且脚本在该点之后停止执行。

4

1 回答 1

0

事实证明,这是我在其中一个 contextifyToUser 中的函数之一,它假设变量是一个类,但在某些情况下它为空。这在我的开发机器中没有发生,因为它使用了一组不同的输入数据。

它。恨。IIS。我仍然不确定为什么没有记录错误,也没有抛出异常或任何东西

于 2012-06-22T18:42:04.530 回答