Удаление строки из CSV, если IP совпадает - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть CSV, который содержит IP, статус этого IP и время, в которое этот статус был получен, в указанном порядке.Я пытаюсь ввести IP-адрес в текстовое поле, и если он обнаружит, что IP удалит эту строку из CSV.

Я попробовал следующий код, но все, что он делает, это удаляет всев файле

<?php
    $IP = $_POST['IP'];

    if ($_POST['submit']) {
        $file_handle = fopen("..\Database\statuses.csv", "w+");
        $myCsv = array();
        while (!feof($file_handle)) {
                $line_of_text = fgetcsv($file_handle, 1000);
                if ($IP != $line_of_text[0]) {
                    fputcsv($file_handle, $line_of_text);
                }
        }
        fclose($file_handle);
    }
?>

Вот формат CSV.У него нет заголовка:

10.10.10.10,up,12/21/2018 9:12:26 AM
10.10.10.11,up,12/21/2018 9:12:35 AM

Я бы ожидал, что это прочитает CSV, и если IP-адрес, полученный из веб-формы, и значение первого столбца не совпадают, он запишет его в CSV.

1 Ответ

0 голосов
/ 21 декабря 2018

Трудно читать и записывать в один и тот же файл и ожидать, что он будет делать что-то разумное с длиной строки и т. Д.

Этот код просто считывает весь файл (используя file()), а затем отфильтровываетстроки, начинающиеся с вашего IP-адреса после ...

if ($_POST['submit']) {
    $fileName = "..\Database\statuses.csv";
    $fileLines = file($fileName, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $fileLines = array_filter($fileLines, function ($data) use ($IP) {
        return (strpos($data, $IP) !== 0 );
    });
    file_put_contents($fileName, implode(PHP_EOL, $fileLines));

}

Запись файла за один раз.

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