【发布时间】:2012-06-21 21:22:37
【问题描述】:
我有一个应用程序在两个地方运行——一个在 OS X 上使用 PHP 5.3 和 Apache 的开发 MAMP 服务器,以及一个使用 PHP 5.3 的生产 IIS 6.0 服务器。
问题是,该应用程序在 Apache 上运行良好。没有错误、警告或任何东西。
但是当我调用 IIS 服务器上的实用程序类的静态函数时,我收到 500 错误。问题是,该函数永远不会被调用——在函数的开头放置一个“echo”没有任何作用,这告诉我问题不是函数的代码inside。 .. 该类的其他静态函数工作正常。
检查日志 (C:\Windows\temp\php-errors.log) 未显示与此问题相关的任何内容,但它正在正确记录其他错误(意外字符和其他错误)。
这是被调用的函数,也是脚本停止执行的地方:
json_encode(Utilities::ContextifyToUser(Article::getArticlesInCollectionOfUser($user), $user);
将json_encode 和getArticlesInCollection 分开表明它们都在工作并返回正确的值。杀死它的是“上下文化”功能。
这是 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 错误,并且脚本在该点之后停止执行。
【问题讨论】: