PHP脚本写入localhost上的文件但不写入IIS服务器上

时间:2014-09-02 18:46:23

标签: javascript php json iis windows-server-2008-r2

我创建了一个在localhost上工作正常的简单网站。所以我把它放在IIS Windows 2008r2服务器上,现在我的PHP脚本不再写入我的JSON文件了。我检查了服务器并安装了PHP,所以我真的不知道什么是错的或者在哪里看。

我仍然没有让它工作,所以我想更详细地解释一下情况。

因此,此脚本适用于localhost,但不适用于IIS服务器。

<?php
$myFile = "../json/countries.json";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = json_encode($_POST["data"]);
fwrite($fh, $stringData);
fclose($fh)
?>

我尝试添加:

error_reporting(E_ALL);
ini_set('display_errors', '1');

chmod("../json/countries.json", 0644);

到php但没有看到任何不同的结果或任何错误。

这是启动进程的javascript函数,将对象输出到控制台确实显示了要保存的正确数据。

function saveJson(object, file) {

console.log("Saving JSON data: " + JSON.stringify(object));

$.ajax
({
    type: "POST",
    dataType : 'json',
    async: false,
    url: file,
    data: { data:object },
    success: function () {console.log("Thanks!"); },
    failure: function() {console.log("Error!");}
});

}

仍然没有更改json文件。 任何善于使用Windows Server和php的人都知道为什么?

由于

3 个答案:

答案 0 :(得分:3)

出现这种问题仅仅是因为三个原因:

  1. 没有正确的目录所有者.Ex: - 在Apache默认用户是www:data。
    • 首先检查目录所有者。
  2. 您对目录(即755)没有足够的写入权限
    • 检查目录权限
  3. 路径对于写入或上载文件的目录不正确。
    • 检查编写文件的目录路径。
  4. 根据php文档Installation on Windows systems,默认用户为 IUSER

    因此,您必须将目录所有者'IUSR'设置为 IIS_IUSRS 组的一部分,如果它不起作用,则尝试设置'IIS AppPool\{YouApplicationPoolName}' from IIS AppPool\DefaultAppPool Ex。例如IIS AppPool\yourdomain.com。 IIS8需要此设置。

    1. 首先尝试将所有者更改为IUSER。它应该根据php文档工作。
    2. 设置目录的写入权限。
    3. 如何更改目录权限&amp; Windows系统上的用户组。

      Rightclick on directory->security->edit
      

      请查看随附的屏幕截图。

      Change user group  & permission

答案 1 :(得分:0)

  1. 您使用的是哪个版本的PHP。如果小于5.2,则json编码功能可能无法正常工作。使用phpinfo()找出答案。

  2. 也可能是$ _POST [&#39;数据&#39;]不存在。尝试放一个数组,看看是不是问题。如:array(1,2,3);

  3. 如果没有显示警告,请使用:error_reporting(E_ALL); OR error_reporting(-1);在脚本的顶部。可能是您的主机正在关闭这些错误。这将使您了解问题所在。

  4. 主机还可以停用某些PHP功能。有关此问题,请联系您的客户服务。虽然我发现他们不太可能停用你正在使用的那些。

  5. 确保文件相对于PHP代码的执行位置存在。如果这是问题,应该运行die命令。您可以使用以下命令查看该文件是否存在:

    if(file_exists($ filename))echo&#34; file exists&#34 ;;

    其他echo&#34;文件不存在&#34;;

  6. 如果上述工作都没有,那么我还没有得到线索!遗憾。

答案 2 :(得分:0)

添加带访问权限的IIS_IUSRS&#34;执行,列出,读取&#34;到属性的安全选项卡。