LAMP安装在我的本地电脑上,因为我知道字符串 xxxx 可以写入带有以下php功能的 /tmp/test .
file_put_contents("/tmp/test","xxxx")
ajax_get.html 和 ajax_get.php 都在我的本地目录 /var/www/html 中 .
cat ajax_get.html
function show(){
var formData = new FormData( document.querySelector("#myForm") );
var query_str = "ajax_get.php?";
for(var pair of formData.entries())
{
query_str += pair[0] + "=" + pair[1] + "&";
}
query_str = query_str.substr(0,query_str.length - 1);
var obj = new XMLHttpRequest();
obj.onreadystatechange = function(){
if(obj.readyState == 4 && obj.status == 200){
console.log(obj.responseText);
}
}
obj.open("get",query_str);
obj.send();
}
ob = document.getElementById("submit");
ob.addEventListener("click",show);
cat ajax_get.php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$str = implode(" ",$_GET);
file_put_contents("/tmp/test",$str);
print($str);
?>
现在输入 127.0.0.1/ajax_get.html ,并输入 test1 和 test2 ,然后单击 submit 按钮, query_str 传入 ajax_get.php ,网页上没有显示错误信息,为什么没有字符串 test1 test2 写入 /tmp/test ?
在 ajax_get.html 的控制台的网页中显示 test1 test2 ,这意味着信息从 ajax_get.html 传递到 ajax_get.php 并进行了解析 .
为什么 ajax_get.php 中的命令 file_put_contents("/tmp/test",$str); 不起作用?
替换 file_put_contents 是没有用的
$handle=fopen("/tmp/test","w");
fwrite($handle,$str);
fclose($handle);
也许这是关于目录权限的问题,如果我在 ajax_get.php 中更改以下语句
file_put_contents("/tmp/test",$str);
成
file_put_contents("test",$str);
并运行上一个过程, ajax_get.php 在 /var/www/html/test 中创建一个文件
cat /var/www/html/test
test1 test2
显示 /tmp 目录的权限 .
ls -al /tmp
total 76
drwxrwxrwt 16 root root 12288 Dec 10 18:39 .
drwxr-xr-x 23 root root 4096 Dec 1 08:03 ..
. 是当前目录 /tmp ,其权限是777(rwxrwxrwx),为什么不能通过php将文件写入 /tmp 目录?