2012-09-22 101 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