LAMP安装在我的本地电脑上,因为我知道字符串 xxxx
可以写入带有以下php功能的 /tmp/test
.
file_put_contents("/tmp/test","xxxx")
ajax_get.html
和 ajax_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
,并输入 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
目录?