【问题标题】:PHP fopen/fwrite problem on IIS7IIS7 上的 PHP fopen/fwrite 问题
【发布时间】: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


【解决方案1】:

您能否为这两个选项设置 var_dump($fileHandle),向我们展示它的功能。我注意到您只是假设文件已打开,而不是检查值(如果为 FALSE,fwrite 将失败)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多