ошибка строки с поиском в php

0

Я разрабатываю систему, которая ищет слова, которые пользователь вводит в php файлы, используя PHP без MySQL, но у меня проблема. Система работает очень хорошо, когда в файле нет разрыва строки. Например, если я ищу слово "хорошо" в файле, который содержит текст "доброе утро", отлично работает, но если я ищу "хороший" в файле, который содержит текст "хорошо"
утром "(с перерывом строки), он не будет отображать файл в результате. Вот мой код:
index.php

<form action="busca.php" method="get">
<input type="text" name="s"><br>
<input type="submit">
</form>

busca.php

<?php
$pesq = (isset($_GET['s'])) ? trim($_GET['s']) : '';
if (empty($pesq)) {
    echo 'Type something.';
} else {
    $index    = "index.php";
    $busca    = glob("posts/content/*.php", GLOB_BRACE);
    $lendo    = "";
    $conteudo = "";
    foreach ($busca as $item) {
        if ($item !== $index) {
            $abrir = fopen($item, "r");
            while (!feof($abrir)) {
                $lendo = fgets($abrir);
                $conteudo .= $lendo;
                $lendo .= strip_tags($lendo);
            }
            if (stristr($lendo, $pesq) == true) {
                $dados    = str_replace(".php", "", $item);
                $dados    = basename($dados);
                $result[] = "<a href=\"posts/$dados.php\">$dados</a>";
                unset($dados);
            }
            fclose($abrir);
        }
    }
    if (isset($result) && count($result) > 0) {
        $result = array_unique($result);
        echo '<ul>';
        foreach ($result as $link) {
            echo "<li>$link</li>";
        }
        echo '</ul>';
    } else {
        echo 'No results';
    }
}
?>
  • 0
    Это неправильно: $lendo .= strip_tags($lendo); , Должно быть $lendo = strip_tags($lendo); , Любой зачем беспокоиться о циклах, когда вы можете легко загрузить файл в переменную с помощью file_get_contents() ?
  • 0
    где я должен использовать file_get_contents ()? Я думаю, что петли необходимы для поиска
Показать ещё 1 комментарий
Теги:
search
system

1 ответ

0
Лучший ответ

stristr использование stristr.
Сравните это с false следующим образом:

if (stristr($lendo, $pesq) !== false) {

Если строка находится - функция возвращает подстроку. Который может быть изменен как логический true или false, вы никогда не знаете. Если он не находит его - он возвращает false - единственное правильное значение, с которым вы должны сравнить.

Еще лучше использовать strpos для этого.
Мой вариант:

foreach ($busca as $item) {
        if ($item !== $index) {
            $lendo = file_get_contents($item);
            $lendo = strip_tags($lendo);
            if (strpos($lendo, $pesq) !== false) {
                $dados    = str_replace(".php", "", basename($item));
                $result[] = "<a href=\"posts/$dados.php\">$dados</a>";
            }
        }
    }

Чтобы исправить разрывы строк - попробуйте избавиться от них. Вот так:

$lendo = file_get_contents($item);
$lendo = strip_tags($lendo);
$lendo = str_replace(["\r","\n"], ' ', $lendo);
  • 0
    Хороший совет, но он все еще не работает с переносами строк
  • 0
    Проверьте код еще раз. Посмотрите, что вы делаете в цикле: `$ lendo = fgets ($ abrir);` Вы заменяете $ lendo каждой строкой кода. Не добавлять, а заменить . В конце вашего while он будет содержать только последнюю строку. Вот почему гораздо лучше использовать file_get_contents . Меньше шансов добавить такую ошибку
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню