Возвращаемое сообщение, если строка найдена или добавлена ​​в файл - PullRequest
0 голосов
/ 24 мая 2018

Я хочу проверить, существует ли строка в текстовом файле и, если она существует, вернуть сообщение 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 голосов
/ 24 мая 2018

Как упомянул @NigelRen, используйте ответ от на этот вопрос , а затем добавьте:

if( strpos(file_get_contents($path),$input) !== false) {
    echo "found it";
}
else{
    file_put_contents($path, $input, FILE_APPEND | LOCK_EX);
    echo "added string";
}
0 голосов
/ 24 мая 2018

Если вы пытаетесь добавить какое-либо значение в файл, в котором уже есть некоторые данные, лучше использовать флаг "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"
 }
0 голосов
/ 24 мая 2018

Этот код не имеет смысла, возможно решение состоит в том, чтобы создать функцию:

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 (true), оно всегда будет истинным.

...