在php中使用数组命令向文件中添加行
我正在尝试制作一个php脚本,将IP添加到防火墙。我不完全确定我做错了什么。我正在尝试将在php中使用数组命令向文件中添加行,php,html,arrays,file,preg-replace,Php,Html,Arrays,File,Preg Replace,我正在尝试制作一个php脚本,将IP添加到防火墙。我不完全确定我做错了什么。我正在尝试将$ip插入iptables上数据的第12行,然后将其写入iptables2。有没有其他方法可以让我这样做,或者这是最简单的方法 <?php //Firewall string $ip = "-A INPUT -s " . $_SERVER['SERVER_ADDR'] . " -j ACCEPT" . "\n"; //Turn file into array $file = file('iptable
$ip
插入iptables
上数据的第12行,然后将其写入iptables2
。有没有其他方法可以让我这样做,或者这是最简单的方法
<?php
//Firewall string
$ip = "-A INPUT -s " . $_SERVER['SERVER_ADDR'] . " -j ACCEPT" . "\n";
//Turn file into array
$file = file('iptables');
//Insert string into array
$res = array_splice($file, 12, 0, $ip);
//Write to another file
file_put_contents("iptables2", $res);
//Display new file
$iptables2 = file("iptables2");
echo "<ul>";
foreach($iptables2 as $s => $r) {
echo "<li>" . $s . "=>" . $r . "</li>";
}
echo "</ul>";
?>
第12行是
#远程电话
,我想在第12行之后插入-A INPUT-s XXX.XXX.XXX-j ACCEPT
。这可以通过使用正则表达式查找和替换#远程操作员
来完成。因此,您不必知道字符串出现的行
$ipTables= '*filter
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p udp --match multiport --dports 10000:20000 -j ACCEPT
# Port 5060
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
# Remote Operators
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
# Remote Phones
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
# Port 3306 - Mysql from Known Sources
-A INPUT -p tcp -m tcp -s 127.0.0.1 --dport 3306 -j ACCEPT
# Reject The Rest
-A INPUT -p tcp -m tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -m udp -j REJECT
COMMIT';
$search = '# Remote Operators';
$ip = '-A INPUT -s YYY.YYY.YYY.YYY -j ACCEPT';
echo preg_replace('/^' . $search . '.*/m', "$search\n$ip", $ipTables);
你可以在网站上看到一个活生生的例子
在您的情况下,您可以从文件中读取
$ipTables
的内容。这可以通过使用正则表达式查找和替换#远程操作员来完成。因此,您不必知道字符串出现的行
$ipTables= '*filter
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p udp --match multiport --dports 10000:20000 -j ACCEPT
# Port 5060
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
# Remote Operators
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
# Remote Phones
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
# Port 3306 - Mysql from Known Sources
-A INPUT -p tcp -m tcp -s 127.0.0.1 --dport 3306 -j ACCEPT
# Reject The Rest
-A INPUT -p tcp -m tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -m udp -j REJECT
COMMIT';
$search = '# Remote Operators';
$ip = '-A INPUT -s YYY.YYY.YYY.YYY -j ACCEPT';
echo preg_replace('/^' . $search . '.*/m', "$search\n$ip", $ipTables);
你可以在网站上看到一个活生生的例子
在您的情况下,您可以从文件中读取$ipTables
的内容。只需确保您只运行了一次此脚本:)但是如果我想多次使用它并在#Remote Phones
之后添加多个条目,该怎么办?我认为没有问题,只要尝试在IP表中不包含重复的条目,你的代码看起来很干净:)只要确保你只运行了一次这个脚本:)但是如果我想多次使用它并在#Remote Phones
之后添加多个条目呢?我认为没有问题,只要尽量不要在IP表中有重复的条目,您的代码看起来很干净:)这个可以工作多次还是只工作一次?换句话说,如果我在#远程电话
之后添加XXX.YYY.XXX.YYY
,我是否能够在#远程电话
之后再次添加其他IP?是的,每次使用代码时都会添加一行新行。请注意,这可能会产生重复。此项工作多次,还是使用此项工作一次?换句话说,如果我在#远程电话
之后添加XXX.YYY.XXX.YYY
,我是否能够在#远程电话
之后再次添加其他IP?是的,每次使用代码时都会添加一行新行。请注意,这可能会产生重复。