LAMP安装在我的本地电脑上,因为我知道字符串 xxxx 可以写入带有以下php功能的 /tmp/test .

file_put_contents("/tmp/test","xxxx")

ajax_get.htmlajax_get.php 都在我的本地目录 /var/www/html 中 .

cat ajax_get.html

<form id="myForm">
    <input type="text" name="name">
    <input type="text" name="addr">
    <input type="button" value="submit" id="submit">
</form>
<p id="result"></p>
<script>
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);
</script>

cat ajax_get.php

<?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 ,并输入 test1test2 ,然后单击 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 目录?