如果找到或添加了添加到文件

时间:2018-05-24 08:18:32

标签: php fopen fwrite

我想检查文本文件中是否存在字符串,如果存在,则返回消息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';
}

?>

3 个答案:

答案 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"
 }