ошибка строки с поисковой системой в переполнении стека

Я разрабатываю систему, которая ищет слова, которые пользователь вводит в 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

Решение

Ваше использование 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]