【发布时间】:2009-12-08 15:15:52
【问题描述】:
我在 Windows Server 2008 R2 上的 IIS7 上运行 PHP5。查看下面的代码,它将通过 POST 请求参数接收到的字符串写入 XML 文件。
<?php
$temp = "";
if($_SERVER['REQUEST_METHOD']=="POST"){
if($_POST["operation"]=="saveLevels"){
$fileHandle = fopen("c:\\inetpub\\wwwroot\\test\\xml\\levels.xml", 'w');
fwrite($fileHandle, stripslashes($_POST["xmlString"]));
fclose($fileHandle);
$temp = "success";
}elseif($_POST["operation"]=="saveRules"){
$fileHandle = fopen("c:\\inetpub\\wwwroot\\test\\xml\\rules.xml", 'w');
fwrite($fileHandle, stripslashes($_POST["xmlString"]));
fclose($fileHandle);
$temp = "success";
}
}
当我发出 POST 请求以调用此代码时,拥有/托管包含 php 文件的站点的应用程序池停止(由于一些致命错误,因为它在事件查看器中写入),然后 IIS 继续响应 HTTP503 .现在,我已在该 (test/xml) 目录上授予 IUSR 和 IISUSRS 适当的权限。这两个 XML 文件尚不存在,当 XML 文件已存在时,我也尝试过代码,但是;它的行为方式相同。 那个php代码有什么问题?我已经在 linux-box 上进行了尝试,它的表现符合预期。
edit:我尝试了这段代码的各种不同版本并得出了这个结果:当被 POST 请求唤醒时,fopen 调用总是返回 FALSE 或有时返回 NULL,并导致自身的应用程序池停止。完全相同的代码,在 GET 请求中可以正常工作,具有完全相同的参数。所以;我不知道问题是什么,但是;暂时我将使用 GET 请求进行此操作。
【问题讨论】:
-
你提到的那些致命错误是什么?
-
我不知道。在事件查看器中,它只是说由于致命错误,它必须自动禁用 Windows 应用程序池服务。
标签: php iis iis-7 windows-server-2008