2012-09-22 61 views
1

我正在做一个注册表单,但似乎无法写入文本文件。在这段代码中,我将一个人的真实姓名放在acc/pplid/[name] .txt文件中。该文件根本不写 - echo不输出任何内容。我正在使用我的电脑上的Microsoft Webmatrix。提前致谢!PHP没有写入文件

 $irlname = $_POST["irlname"]; 
     $name = $_POST["username"]; 
     $email = $_POST["email"]; 
     $password = $_POST["password"]; 
     $name = htmlentities($name); 

     echo $name; 
     file_put_contents("acc/pplid/".name.".txt", $irlname); 
     echo file_get_contents("acc/pplid/".$name.".txt"); 
+1

仅供参考,这允许你把在名称中NUL字节,使用''../目录树中的要上去覆盖任意文件。 HTML转义文件名也没有意义。无法写入的文件可以被读取 - 所以代码是双重的。 – ThiefMaster

+0

对不起,我的代码是双重错误的。我逃过了文件名,因为它是另一端的文本框,没有任何检查。如果你想告诉我如何防止NUL字节,这将是有益的。我最关心的是让它工作。 :P谢谢,虽然。我会研究它。 – Andrey

+0

对于这种情况(除了使用数据库而不是平面文件),唯一安全的方法是使用严格的白名单来验证字符串 – ThiefMaster

回答

2
file_put_contents("acc/pplid/".name.".txt", $irlname); 

应该

file_put_contents("acc/pplid/".$name.".txt", $irlname); 

除非name在别的地方定义,否则我会说检查写权限。在file_put_contents之前检查文件夹file_existsis_dir的状态。

if(is_dir("acc/pplid") && is_writable("acc/pplid")){ 
    file_put_contents("acc/pplid/".$name.".txt", $irlname); 
} else echo "A problem with the folder occurred"; 
+0

我会检查file_exists,因为添加$没有修复它 – Andrey

+0

我添加了'print(file_exists(“acc/pplid /”));'以及'print(file_exists(“acc/pplid /”)。 $ name。“.txt”));'这个页面只是空白的。当我检查文件夹的属性时,它的复选框被填充,就像它是如果一些文件是只读的而另一些则不是。当我解开它并重新打开属性窗口时,它仍然被填满。 – Andrey

+0

“你是什么意思?这个文件夹找不到”被输出 – Andrey