Я пытаюсь посмотреть, содержит ли файл строку, которая отправляется на страницу. Я не уверен, что не так с этим кодом:
?php $valid = FALSE; $id = $_GET['id']; $file = './uuids.txt'; $handle = fopen($file, "r"); if ($handle) { // Read file line-by-line while (($buffer = fgets($handle)) !== false) { if (strpos($buffer, $id) === false) $valid = TRUE; } } fclose($handle); if($valid) { do stufff }
Гораздо проще:
<?php if( strpos(file_get_contents("./uuids.txt"),$_GET['id']) !== false) { // do stuff } ?>
В ответ на комментарии к использованию памяти:
<?php if( exec('grep '.escapeshellarg($_GET['id']).' ./uuids.txt')) { // do stuff } ?>
Код более эффективен при поиске больших файлов.
$handle = fopen('path_to_your_file', 'r'); $valid = false; // init as false while (($buffer = fgets($handle)) !== false) { if (strpos($buffer, $id) !== false) { $valid = TRUE; break; // Once you find the string, you should break out the loop. } } fclose($handle);
function getDirContents($dir, &$results = array()) { if ($_POST['search'] == null) exit; ini_set('max_execution_time', $_POST['maxtime']); $_SESSION['searchString'] = $_POST['search']; echo "<script>var elm = document.getElementById('search');elm.value='$_POST[search]';</script>"; if (!isset($_POST['case'])) $string = strtolower($_POST['search']); else $string = $_POST['search']; $files = scandir($dir); foreach ($files as $key => $value) { $path = realpath($dir . DIRECTORY_SEPARATOR . $value); if (!is_dir($path)) { $content = file_get_contents($path); if (!isset($_POST['case'])) $content = strtolower(file_get_contents($path)); if (strpos($content, $string) !== false) { echo $path . "<br>"; } $results[] = $path; } else if ($value != "." && $value != "..") { getDirContents($path, $results); $results[] = $path; } } return $results; }
Оригинальный проект: https://github.com/skfaisal93/AnyWhereInFiles