2009-12-08 123 views
0

我在Windows Server 2008 R2上的IIS7上运行PHP5。查看下面的代码,它将通过POST请求参数接收的字符串写入XML文件。IIS7上的PHP fopen/fwrite问题

<?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上试过了,它的行为和预期的一样。

编辑:我已经尝试了这段代码的各种不同版本,并提出了这个结果:当由POST请求唤醒时,foon调用返回FALSE或有时为NULL,并导致本身的应用程序池停止。完全相同的代码在GET请求下工作正常,具有完全相同的参数。所以;我不知道问题是什么,但是;当时我只是要使用GET请求进行此操作。

+0

你提到的那些致命错误是什么? – 2009-12-08 15:22:49

+0

我不知道。在事件查看器中,它只是说它必须自动禁用Windows应用程序池服务,因为有一个致命错误。 – 2009-12-08 15:24:49

回答

0

你可以var_dump($ fileHandle)这两个选项,向我们展示它有什么。我注意到你只是假设文件被打开,而不是检查值(如果它是假的,fwrite将失败)

+0

请在帖子中看到我的编辑。 – 2009-12-09 09:54:27