【问题标题】:PHP scripts writes to file on localhost but not on IIS serverPHP 脚本写入本地主机上的文件,而不是 IIS 服务器上的文件
【发布时间】:2014-09-02 18:46:23
【问题描述】:

我制作了一个简单的网站,可以在 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 的人可能知道为什么?

谢谢

【问题讨论】:

  • 您收到什么错误信息?脚本的哪一部分不起作用。开放部分或写入部分。您是否尝试过以管理员身份运行 IIS
  • 除了通过远程桌面连接到服务器之外,没有其他权限。而且我没有收到任何错误消息。数据只是没有写入文件。
  • 您是否有足够的文件权限来写入文件?
  • 如果我检查 FileZilla 中的文件权限,他们都拥有所有者、组和公共@YahyaUddin 的读取、写入和执行权限
  • @can 谁是目录所有者?

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


【解决方案1】:

出现这种问题的原因只有三个:

  1. 没有适当的目录所有者。例如:- 在 Apache 中,默认用户是 www:data。
    • 首先检查目录所有者。
  2. 您没有足够的目录写入权限,即 755
    • 检查目录权限
  3. 写入或上传文件的目录路径不正确。
    • 检查您正在写入文件的目录路径。

根据php文档Installation on Windows systems默认用户是IUSER

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

  1. 首先尝试将所有者更改为 IUSER。它应该根据php文档工作。
  2. 设置目录的写权限。

如何在 windows 系统上更改目录权限和用户组。

Rightclick on directory->security->edit

请检查附加的屏幕截图。

【讨论】:

  • 听起来你知道你的东西!您在哪里检查第 1 步?
  • @thehidutimes 为您的查询添加了屏幕截图。使用远程桌面共享转到您的服务器
  • 或请您的系统管理员执行此操作
  • 这是权限或路径问题。我不确定,但你也可以检查 openbasedir 限制。
【解决方案2】:
  1. 您使用的是什么版本的 PHP。如果低于 5.2,可能是 json 编码功能不起作用。使用 phpinfo() 找出答案。

  2. 也可能是 $_POST['data'] 不存在。尝试放置一个数组,看看是否是问题所在。喜欢:array(1,2,3);

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

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

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

    if (file_exists ( $filename ) ) echo "文件存在";

    else echo "文件不存在";

如果以上都不起作用,那么我没有任何线索!对不起。

【讨论】:

  • 好的,谢谢。我会试试看。我确实尝试通过在浏览器中输入 url 来打开 php 脚本,这给了我 die 命令消息。这是否意味着第 5 点可能是问题所在?
  • 是的!确保该文件存在于您的文件中。
  • 更改了 $myFile = "json/countries.json";到 $myFile = "../json/countries.json";但它仍然无法正常工作。 php 脚本位于 php 文件夹中,json 位于 json 文件夹中
  • 尝试使用 var_dump(file_exists ( $filename ) ) 查看您的文件路径是否有效。可能是您编写的文件路径错误或相对于错误的文件。如果存在,它应该输出 true。
  • 同时检查您的文件权限
【解决方案3】:

将具有“执行、列出、读取”访问权限的 IIS_IUSRS 添加到属性的安全选项卡中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2017-08-04
    • 1970-01-01
    • 2022-10-12
    • 2014-01-02
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多