【问题标题】:Writing to file in background using PHP/AJAX使用 PHP/AJAX 在后台写入文件
【发布时间】:2013-02-11 18:10:50
【问题描述】:

这一切有点新,但我试图在后台将文件写入服务器上的磁盘时显示网页。我让一个简单的页面加载,然后将 AJAX 响应发送到处理实际文件操作的第二个脚本。我这样做是为了让用户在生成文件时不会等待 30 多秒来加载一个简单的页面,并试图避免浏览器超时。文件写入后,我想重定向到它。但是,该文件永远不会被创建,并且重定向会直接将您发送到 404,尽管 AJAX 请求总是返回成功的状态代码。

示例

index.php

<html>
  <head>
    <script src="js/jquery-1.8.3.min.js"></script>
  </head>
  <body>
    <script>
      $.ajax({
        url: "out.php",
        method: "get",
        data: { 'answer' : 42 },
        success: function(data, status, jqxhr) {
          alert(jqxhr.responseText);
          $("body").append("<meta http-equiv='refresh' content='0;out.log'>");
        }
      });
    </script>
  </body>
</html>

out.php

<?php
  echo "WHAT IS HAPPENING....";
  $fd = fopen("out.log", "wb");
  fwrite($fd, "Not this... " . $_GET['answer']);
  fclose($fd);
?>

如果我使用php-cgi out.php answer=42 运行out.php,它会按预期工作,但同样,当通过浏览器访问时,什么都不会写入。

有什么方法可以让out.php 创建并写入out.log

【问题讨论】:

  • 如果您在浏览器中输入 localhost/your_project/out.php?answer=42,会做些什么??
  • 哎呀,不知道为什么我没想到要尝试...不,它不会写入文件。开始认为它与权限有关(当前目录和文件不属于apache.apache)。但是,我过去可以在没有使用输出缓冲这些权限的情况下将内容写入磁盘。我会试一试,然后再报告。
  • 权限...你在 Linux 风格的环境中吗??...我也想念那个 XD

标签: php ajax output


【解决方案1】:

事实证明,我根本没有权限在我尝试使用的目录中写入文件……经过一点chown 魔术之后,现在一切都对我有用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多