Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果IP匹配,则从CSV中删除一行_Php_Forms_Csv - Fatal编程技术网

Php 如果IP匹配,则从CSV中删除一行

Php 如果IP匹配,则从CSV中删除一行,php,forms,csv,Php,Forms,Csv,我有一个CSV,其中包含IP,该IP的状态,以及该状态被提取的时间,按顺序排列。我试图做的是将IP输入到一个文本框中,如果它发现该IP,它将从CSV中删除该行 我尝试了下面的代码,但它似乎只是删除了文件中的所有内容 <?php $IP = $_POST['IP']; if ($_POST['submit']) { $file_handle = fopen("..\Database\statuses.csv", "w+"); $myCsv =

我有一个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,如果从web表单中提取的IP与第一列的值不匹配,它会将其写入CSV。

很难读取和写入同一个文件,并且希望它能够对行长度等做出合理的处理

这段代码只是读取usingfile中的所有文件,然后过滤掉以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));

}

一次性写回文件。

这个文件有多大?创建一个没有IP行的新文件更容易。在生产中,该文件一次可能不会超过200行。使用两个文件句柄,从一个读取,向另一个写入。或者。。。只要用grep谢谢,这是我想要的
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));

}