我想检查文本文件中是否存在字符串,如果存在,则返回消息string exists
。如果它不存在,请将该字符串添加到文件中并返回string added
。
我得到它没有消息:
<?php
$path = '../test/usersBlacklist.txt';
$input = $_POST["id"];
if ($input) {
$handle = fopen($path, 'r+');
while (!feof($handle)) {
$value = trim(fgets($handle));
if ($value == $input) {
return false;
}
}
fwrite($handle, $input);
fclose($handle);
return true;
}
if (true) {
echo 'added';
} else {
echo 'exists';
}
?>
答案 0 :(得分:1)
@NigelRen提到使用this question的答案,然后用它来追加:
if( strpos(file_get_contents($path),$input) !== false) {
echo "found it";
}
else{
file_put_contents($path, $input, FILE_APPEND | LOCK_EX);
echo "added string";
}
答案 1 :(得分:0)
这段代码没有任何意义,解决方案可能是创建一个函数:
function checkI($input) {
$handle = fopen($path, 'r+');
while (!feof($handle)) {
$value = trim(fgets($handle));
if ($value == $input) {
return false;
}
}
fwrite($handle, $input);
fclose($handle);
return true;
}
然后:
if (checkI($input)) {
echo 'added';
} else {
echo 'exists';
}
你的if(真实),它将永远是真的。
答案 2 :(得分:0)
如果您尝试将某些值附加到已包含某些数据的文件中,那么最好使用"a+"
标志代替"r+"
如php文档中所述:
'a +'开放阅读和写作;将文件指针放在文件的末尾。如果该文件不存在,请尝试创建它。在此模式下,fseek()仅影响读取位置,始终附加写入。
此处有更多信息:https://secure.php.net/manual/en/function.fopen.php
而且像CBroe说的那样在函数之外使用return
对你来说不会有更好的方法:
$input = $_POST["id"];
function doesLineExist($input){
$path = '../test/usersBlacklist.txt';
if ($input) {
$handle = fopen($path, 'r+');
while (!feof($handle)) {
$value = trim(fgets($handle));
if ($value == $input) {
return false;
}
}
fwrite($handle, $input);
fclose($handle);
return true;
}
}
$doesExist = doesLineExist($input);
if($doesExist){
echo "Added"
}else{
echo "Exists"
}