删除包含某些内容的行 (.txt-File) - php
delete a line (.txt-File) containing something - with php
我想删除包含 $_POST['link']
给出的内容的行
它已经适用于 .csv 文件。此时,.txt 文件的代码没有任何作用。
我的php代码
//txt
$txt = file('../textFiles/websites.txt');
$fpTXT = fopen('../textFiles/websites.txt', 'w');
foreach ($txt as $lines) {
if (!str_contains($lines[2], strval($_POST['link']))) {
fwrite($fpTXT, $lines);
}
}
fclose($fpTXT);
带js的触发器
<!-- Delete-Function -->
<script>
async function deleteRequest(elem) {
$.ajax({
type: 'POST',
url: '/sites/deleting.php',
dataType: 'html',
data: {
'link': elem
}
});
location.reload();
};
</script>
</head>
<!-- Delete Icon -->
<?php $delBtn = "<td><button class='delete' onclick=\"deleteRequest(this.parentNode.parentNode.getElementsByTagName('td')[2].innerText)\"><i class='material-icons'></i></button></td>"; ?>
csv 代码(在 txt 代码上方)
//CSV
$csv = array_map('str_getcsv', file('../textFiles/websites.csv'));
$fpCSV = fopen('../textFiles/websites.csv', 'w');
foreach ($csv as $fields) {
if (!str_contains($fields[2], strval($_POST['link']))) {
fputcsv($fpCSV, $fields);
}
}
fclose($fpCSV);
.txt 文件中的 2 行
您从 file()
获得的“$lines”与 CSV 记录不同。每一个都是一行,所以 $lines[2]
指的是该行的第三个字符:
$lines = "https://www.google.com\n";
$lines[2] is just a "t".
在 CSV 记录中,您会
$lines = [ "A1", "B1", "C1", "D1" ]
and here, $lines[2] is "C1".
您应该过滤文本行以删除不需要的行
$outputFile = '../textFiles/websites.txt';
$remove = strval($_POST['link']);
$txt = array_filter(
file($outputFile),
function ($eachLine) use ($remove) {
return !str_contains($eachLine, $remove);
// or equivalently,
// return false === strpos($eachLine, $remove)
// In all cases, consider that if someone sends ".",
// you will remove ALL sites, since they'll all have a dot in their site name.
// So maybe is better
// return $remove !== trim($eachLine)
// (the "trim" is needed to get the carriage return at the end of line out of the comparison, which otherwise would always fail).
}
);
// Now you need to write the cleaned file
file_put_contents($outputFile, implode('', $txt));
如果您只想替换文件中的单词或句子,可以使用 str_replace
:
轻松完成
$file = '../textFiles/websites.txt';
$findText = $_POST['link'];
file_put_contents($file, str_replace($findText, '', file_get_contents($file)));
我想删除包含 $_POST['link']
它已经适用于 .csv 文件。此时,.txt 文件的代码没有任何作用。
我的php代码
//txt
$txt = file('../textFiles/websites.txt');
$fpTXT = fopen('../textFiles/websites.txt', 'w');
foreach ($txt as $lines) {
if (!str_contains($lines[2], strval($_POST['link']))) {
fwrite($fpTXT, $lines);
}
}
fclose($fpTXT);
带js的触发器
<!-- Delete-Function -->
<script>
async function deleteRequest(elem) {
$.ajax({
type: 'POST',
url: '/sites/deleting.php',
dataType: 'html',
data: {
'link': elem
}
});
location.reload();
};
</script>
</head>
<!-- Delete Icon -->
<?php $delBtn = "<td><button class='delete' onclick=\"deleteRequest(this.parentNode.parentNode.getElementsByTagName('td')[2].innerText)\"><i class='material-icons'></i></button></td>"; ?>
csv 代码(在 txt 代码上方)
//CSV
$csv = array_map('str_getcsv', file('../textFiles/websites.csv'));
$fpCSV = fopen('../textFiles/websites.csv', 'w');
foreach ($csv as $fields) {
if (!str_contains($fields[2], strval($_POST['link']))) {
fputcsv($fpCSV, $fields);
}
}
fclose($fpCSV);
.txt 文件中的 2 行
您从 file()
获得的“$lines”与 CSV 记录不同。每一个都是一行,所以 $lines[2]
指的是该行的第三个字符:
$lines = "https://www.google.com\n";
$lines[2] is just a "t".
在 CSV 记录中,您会
$lines = [ "A1", "B1", "C1", "D1" ]
and here, $lines[2] is "C1".
您应该过滤文本行以删除不需要的行
$outputFile = '../textFiles/websites.txt';
$remove = strval($_POST['link']);
$txt = array_filter(
file($outputFile),
function ($eachLine) use ($remove) {
return !str_contains($eachLine, $remove);
// or equivalently,
// return false === strpos($eachLine, $remove)
// In all cases, consider that if someone sends ".",
// you will remove ALL sites, since they'll all have a dot in their site name.
// So maybe is better
// return $remove !== trim($eachLine)
// (the "trim" is needed to get the carriage return at the end of line out of the comparison, which otherwise would always fail).
}
);
// Now you need to write the cleaned file
file_put_contents($outputFile, implode('', $txt));
如果您只想替换文件中的单词或句子,可以使用 str_replace
:
$file = '../textFiles/websites.txt';
$findText = $_POST['link'];
file_put_contents($file, str_replace($findText, '', file_get_contents($file)));