Php 如果IP匹配,则从CSV中删除一行
我有一个CSV,其中包含IP,该IP的状态,以及该状态被提取的时间,按顺序排列。我试图做的是将IP输入到一个文本框中,如果它发现该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 =
<?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));
}