2014-05-22 63 views
1

僅供練習使用,我已經編寫了用於將用戶名和密碼保存到文本文件的小代碼。這是代碼:PHP腳本在讀取和寫入文本文件時不工作

$fh = fopen("de.txt", 'a+') or die(""); 
$text = "username =" . $uide . "password =" . $pwd ."\n"; 
$contents = fgets($fh); 
if(strpos($contents, '$uide') !== false) && 
strpos($contents, '$pwd') !== false)) 
{ 
    break; 
} 
else { 
fwrite($fh, $text) or die(); 
} 

我基本上想要做的是從一個文本文件,支票,讀取用戶名和密碼是否已經存在與否,如果沒有的話,保存它,如果它已經存在再到丟棄它並執行進一步的腳本,但是我在這裏遇到了一些問題。

它不保存憑據,從我將此代碼添加到腳本的那一天起,我的整個腳本停止工作。在我的知識中,我嘗試了各種解決方案,但似乎都沒有解決這個問題。任何人都可以幫我解決這個問題嗎?

編輯:我編輯了答案中給出的代碼,它正在工作,但它仍然有問題。它只適用於第一個用戶名和密碼,剩下的全部仍然被複制。我的意思是憑據保存的文本文檔中下列方式

username = batman password = not-found

username = spiderman password = pepper

username = spiderman password = pepper

所以我說,第一線的憑據將不會再出現在文本保存,但畢竟那東西還在不斷重複,誰能說出爲什麼?

+1

一些建議。 1.定義「停止工作」,你有任何錯誤代碼或觀察? 2.通過在每一行代碼之後放置loglines來嘗試縮小問題的範圍,以便確切知道哪一行會導致問題。 如果你設法弄清楚這兩件事情,那麼你可以自己修復它 –

+0

是的,我是通過cron執行此代碼,並且每次我啓動cron失敗HTTP錯誤500你能找出什麼問題 - - 沒有關於什麼或哪條線路導致問題的詳細日誌,這就是爲什麼它很難對我 – Programmer

+0

@Programmer請看我的答案。您的括號不平衡,清楚地顯示錯誤報告。也是字符串與變量的問題。但括號是導致錯誤500的原因。 – JakeGould

回答

2

您是否啓用了錯誤報告的字符串?因爲當我嘗試用你的代碼中的錯誤是非常明確的:

Parse error: syntax error, unexpected '&&' (T_BOOLEAN_AND) in /Applications/MAMP/htdocs/test.php on line 7

如果我看第7行我看到這一點:

if(strpos($contents, '$uide') !== false) && 
strpos($contents, '$pwd') !== false)) 

第一個問題是你的括號不均衡。它更改爲這修正了直接的問題:

if(strpos($contents, '$uide') !== false && 
strpos($contents, '$pwd') !== false) 

或者,如果你想添加圓括號你可以做到這一點每個條件的另一層,但它是不需要的邏輯,你必須到位:

if ((strpos($contents, $uide) !== false) && 
    (strpos($contents, $pwd) !== false)) { 

然後你的代碼中還有其他一些問題。例如爲什麼會檢查strpos的值爲'$uide'以及'$pwd'。當你像這樣放置單引號時,它的字面值爲'$uide''$pwd'。因此,應改變這種:

if(strpos($contents, $uide) !== false && 
strpos($contents, $pwd) !== false) 

這裏,它是在你的全碼爲帶有幾分格式化清理:

$fh = fopen("de.txt", 'a+') or die(""); 
$text = "username =" . $uide . "password =" . $pwd ."\n"; 
$contents = fgets($fh); 
if (strpos($contents, $uide) !== false && 
    strpos($contents, $pwd) !== false) { 
break; 
} 
else { 
fwrite($fh, $text) or die(); 
} 

格式可能不會永遠看起來像一個大問題,但這種簡單的代碼語法錯誤通常會通過簡單的代碼格式顯示和清除。

+0

非常感謝您的幫助,我只是在PHP的noob這是我的第二個代碼。但我仍然有一個問題,它仍然保存重複的用戶名和通過你能幫我 – Programmer

+0

@程序員很高興能有所幫助,但不知道你的腳本的其餘部分如何工作這是我能做的最好的。祝你好運! – JakeGould

+0

是啊你是對的謝謝你是一個格柵幫助我被困在這一個星期再次感謝 – Programmer

2

'$uide'只是字符串'$uide',而不是變量,您應該刪除單引號。

+0

正確。但不是500錯誤的原因。有一個清晰的'Parse error:語法錯誤,'當啓用錯誤報告時顯示。 – JakeGould

1

試試看看這個代碼。它有幫助嗎?

<?php 
$fh = fopen("de.txt", 'a+') or die(""); 
$text = "username =" . $uide . "password =" . $pwd ."\n"; 
$contents = fgets($fh); 
if(strpos($contents, $uide) !== false && strpos($contents, $pwd) !== false){ 
    break; 
} else { 
    fwrite($fh, $text) or die(); 
} 
?> 
0

一切都很好,只需更換這兩條線,

if(strpos($contents, $uide) !== false) && 
strpos($contents, $pwd) !== false)) 

,因爲這是你的變量被認爲是與美元的

+0

這不是唯一的問題。 – JakeGould

1

你的代碼中有if條件語法錯誤,你如果條件不正確關閉(檢查額外的支架),它應該是::

if(strpos($contents, '$uide') !== false && strpos($contents, '$pwd') !== false)