我有一个在两个地方运行的应用程序——一个在 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_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 错误,并且脚本在该点之后停止执行。