PHP If-Else не работает для сравнения содержимого файла - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь создать приложение PHP, которое просматривает файлы вашего текущего каталога и ищет файл в каждом подкаталоге с именем email.txt, затем получает содержимое файла и сравнивает содержимое из электронной почты. TXT с данным запросом и повторяет все соответствующие каталоги с данным запросом. Но это не работает, и похоже, что проблема в части сценария if-else в конце, потому что он не дает никакого вывода.

<?php
// pulling query from link
$query = $_GET["q"];
echo($query);
echo("<br>");

// listing all files in doc directory
$files = scandir(".");

// searching trough array for unwanted files
$downloader = array_search("downloader.php", $files);
$viewer = array_search("viewer.php", $files);
$search = array_search("search.php", $files);
$editor = array_search("editor.php", $files);
$index = array_search("index.php", $files);
$error_log = array_search("error_log", $files);
$images = array_search("images", $files);
$parsedown = array_search("Parsedown.php", $files);

// deleting unwanted files from array
unset($files[$downloader]);
unset($files[$viewer]);
unset($files[$search]);
unset($files[$editor]);
unset($files[$index]);
unset($files[$error_log]);
unset($files[$images]);
unset($files[$parsedown]);

// counting folders
$folderamount = count($files);

// defining loop variables
$loopnum = 0;

// loop
while ($loopnum <= $folderamount + 10) {
    $loopnum = $loopnum + 1;

    // gets the emails from every folder
    $dirname = $files[$loopnum];
    $email = file_get_contents("$dirname/email.txt");
    //checks if the email matches
    if ($stremail == $query) {
        echo($dirname);
    }
}

//print_r($files);
//echo("<br><br>");
?>

Может кто-нибудь объяснить / исправить это для меня ? Я буквально понятия не имею, что это такое, и я уже много отлаживал. Это было бы очень любезно и высоко ценится.

С уважением, Bluppie05

1 Ответ

0 голосов
/ 07 марта 2020

Есть несколько проблем с этим кодом, которые мешали бы вам получить правильный вывод.

Основная причина, по которой вы не получаете вывод из теста if, заключается в том, что условие (предположительно) неверное имя переменной.

  // variable with the file data is called $email
  $email = file_get_contents("$dirname/email.txt");

  // test is checking $stremail which is never given a value
  if ($stremail == $query) {
    echo($dirname);
  }

Существует также проблема с комбинацией scandir() и unset(). Как вы обнаружили, scandir() в основном дает вам все, что dir или ls в командной строке. Использование unset() для удаления указанных c файлов проблематично c, так как необходимо вести жестко закодированный список файлов. Однако unset() также оставляет дыры в вашем массиве, счетчик изменяется, а исходные индексы - нет. Возможно, поэтому вы используете $folderamount + 10 в вашем l oop. Взгляните на этот вопрос переполнения стека, чтобы подробнее обсудить проблему.

Перебазировать ключи массива после сброса элементов

Я рекомендую прочитать справочную страницу PHP на функция glob(), поскольку она значительно упростит получение содержимого каталога. В частности, обратите внимание на флаг GLOB_ONLYDIR.

https://www.php.net/manual/en/function.glob.php

Наконец, не увеличивайте свой счетчик l oop в начале l oop при использовании счетчика для чтения элементов из массива. Взгляните на справочную страницу PHP для циклов foreach для более точного способа перебора массива.

https://www.php.net/manual/en/control-structures.foreach.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...