在读取和写入文本文件时,PHP脚本无法正常工作

时间:2014-05-22 04:06:38

标签: 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();
} 

我基本上想要做的是从文本文件中读取检查用户名和密码是否已经存在,如果没有则保存,如果已经存在则丢弃它并执行进一步的脚本,但是我我在这里遇到了一些问题。

它没有保存凭据,从我将此代码添加到我的脚本的那天起,我的整个脚本停止工作。我在我的知识中尝试了所有类型的解决方案,但似乎没有一个解决这个问题。任何人都可以帮我解决这个问题吗?

编辑:我已经编辑了答案中给出的代码并且它正在运行,但它仍然存在问题。它仅适用于第一个用户名和密码,其余的仍然被复制。我的意思是凭证以下列方式保存在文本文档中

  

用户名 =蝙蝠侠密码 =未找到

     

用户名 = spiderman 密码 =胡椒

     

用户名 = spiderman 密码 =胡椒

所以我说第一行的凭据不会再保存在文本中,但之后的所有内容仍然不断重复,任何人都可以告诉为什么会这样?

5 个答案:

答案 0 :(得分:2)

'$uide'只是字符串'$uide',而不是变量,您应该删除单引号。

答案 1 :(得分:2)

您是否启用了错误报告?因为当我尝试使用您的代码时错误非常明显:

  

解析错误:语法错误,意外'&&' (T_BOOLEAN_AND)in   第7行/Applications/MAMP/htdocs/test.php

如果我看第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();
} 

格式化可能看起来不是什么大问题,但像这样的简单代码语法错误通常只需格式化代码即可显示和清理。

答案 2 :(得分: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();
} 
?>

答案 3 :(得分:1)

你的代码在if条件中有语法错误,你的if条件没有正确关闭(检查额外的括号),它应该是::

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

答案 4 :(得分:0)

一切都很好,只需更换这两行,

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

因为在这里你的变量被认为是带有美元

的字符串