Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取和写入文本文件时,PHP脚本不起作用_Php - Fatal编程技术网

读取和写入文本文件时,PHP脚本不起作用

读取和写入文本文件时,PHP脚本不起作用,php,Php,为了练习,我编写了这个小代码,用于将用户名和密码保存到文本文件中。代码如下: $fh = fopen("de.txt", 'a+') or die(""); $text = "username =" . $uide . "password =" . $pwd ."\n"; $contents = fgets($fh); if( strpos($contents, '$uide') !== fals

为了练习,我编写了这个小代码,用于将用户名和密码保存到文本文件中。代码如下:

$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();
} 
我基本上想做的是,从文本文件中读取检查用户名和密码是否已经存在,如果不存在,则保存它,如果已经存在,则丢弃它并执行进一步的脚本,但我这里有一点问题

它没有保存凭据,从我将此代码添加到脚本的那天起,我的整个脚本就停止工作。据我所知,我尝试了各种各样的解决办法,但似乎没有一个能解决这个问题。有人能帮我解决这个问题吗

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

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

用户名=蜘蛛侠密码=胡椒

用户名=蜘蛛侠密码=胡椒


因此,我的意思是,第一行的凭证不会再次保存在文本中,但之后的所有内容仍在重复,有人能告诉我原因吗?

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

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

尝试此代码。有帮助吗

<?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();
} 
?>

试试这段代码。有帮助吗

<?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();
} 
?>

一切正常,只需更换这两行

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

因为在这个例子中,变量被认为是一个带dollar的字符串,所有都是好的,只需替换这两行

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

因为在这种情况下,您的变量被视为带有美元的字符串,所以启用了错误报告功能吗?因为当我尝试使用您的代码时,错误非常明显:

分析错误:语法错误,中出现意外的“&&”(T_BOOLEAN_和) /第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)) {
然后,代码中还有一些其他问题。例如,为什么要检查值为
'$uide'
以及
'$pwd'
strpo
。当您这样放置单引号时,它是
'$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();
} 

格式化可能从来都不是什么大事,但像这样的简单代码语法错误通常会通过格式化代码来发现和清除。

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

分析错误:语法错误,中出现意外的“&&”(T_BOOLEAN_和) /第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)) {
然后,代码中还有一些其他问题。例如,为什么要检查值为
'$uide'
以及
'$pwd'
strpo
。当您这样放置单引号时,它是
'$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();
} 

格式化可能从来都不是什么大事,但像这样的简单代码语法错误通常会通过格式化代码来发现和清除。

如果您的代码在if条件下有语法错误,您的if条件没有正确关闭(请勾选额外的括号),它应该是:

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

您的代码在if条件中有语法错误,您的if条件未正确关闭(请检查附加括号),它应该是:

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

一些建议。1.定义“停止工作”,您是否有任何错误代码或观察结果?2.通过在每一行代码后面加上日志行来缩小你的问题范围,这样你就能确切地知道哪一行引起了麻烦。如果你想办法解决这两个问题,那么你可以自己解决是的,我是由cron执行这段代码的,每次我启动cron时,它都会失败,出现HTTP错误500。你能找出问题所在吗?没有详细的日志记录是什么或哪一行导致了问题,这就是为什么很难找到它me@Programmer请看我的答案。您的括号不平衡,这清楚地显示了错误报告。还有字符串与变量的问题。但是括号是导致错误的原因。一些建议。1.定义“停止工作”,您是否有任何错误代码或观察结果?2.通过在每一行代码后面加上日志行来缩小你的问题范围,这样你就能确切地知道哪一行引起了麻烦。如果你想办法解决这两个问题,那么你可以自己解决是的,我是由cron执行这段代码的,每次我启动cron时,它都会失败,出现HTTP错误500。你能找出问题所在吗?没有详细的日志记录是什么或哪一行导致了问题,这就是为什么很难找到它me@Programmer请看我的答案。您的括号不平衡,这清楚地显示了错误报告。还有字符串与变量的问题。但是括号是导致错误500的原因。这不是唯一的p