我想对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']){...}。
答案 0 :(得分:1)
要进行调试,请不要从命令行运行脚本,而只需使用浏览器直接打开它。当您使用命令行时,您正在以您自己的用户身份执行脚本(可能是“root”),但如果从您的浏览器调用它,则由apache(或您正在使用的任何Web服务器)执行它是自己的用户。
很可能,您自己的用户帐户具有写入权限,但apache-user不具备 - 因此命令行可以正常工作,但是来自浏览器的调用不会。
顺便说一句:这几乎不是一个很好的测试用例来替换mongo-db(或任何其他数据库)交互,你不必担心文件系统权限问题但可能会遇到数百个其他问题。
答案 1 :(得分: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日志文件中查找错误