0

我想对 php 文件进行 ajax 调用;最终这个 php 文件将写入一个 mongodb 数据库。现在,我正在调试并希望打开 php 文件并写入文本文件。当我从命令行运行 php 文件时,它可以工作。同样,ajax 调用返回一个“成功”消息。但是,ajax 调用不会导致写入新的文本文件。

从我的 javascript 文件的相关部分:

$.ajax({
    type: "POST",
    url: "jq.php",
    data: {
        'myString': "blahblah",
    },
    success: function(data) {
        alert('worked');
    },
    error: function(){
        alert('failed');
    }
});

php文件:

<?php
$file=fopen("welcome.txt","w");
$str = "let's hope this works.";
fwrite($file, $str);
fclose($file);
?>

我还尝试将上述内容包装在:if ($_POST['ajax']) {...} 中。

4

2 回答 2

1

对于调试,不要从命令行运行脚本,而是直接用浏览器打开它。当您使用命令行时,您是以您的用户身份(可能是“root”)执行脚本,但如果它是从您的浏览器调用的,它由 apache(或您正在使用的任何网络服务器)执行它是自己的用户。

最有可能的是,您自己的用户帐户具有写入权限,但 apache-user 没有- 因此命令行有效,但来自浏览器的调用无效。

顺便说一句:这几乎不是替换 mongo-db(或任何其他数据库)交互的好测试用例,您不必担心文件系统权限问题,而是可能会遇到数百个其他问题。

于 2013-07-04T05:04:23.283 回答
0

你应该总是使用:

$file=fopen("welcome.txt","w");
if ($file) { // because fopen can return FALSE on error
  $str = "let's hope this works.";
  fwrite($file, $str);
  fclose($file);
}
else {
  // something wrong!
}

参考

编辑还检查E_WARNING - 它可以向您显示问题,您可以通过error_reporting(E_ALL) 激活它;如果它被您的服务器禁用或在 php 日志文件中查找错误

于 2013-07-04T05:18:45.343 回答