Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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中使用数组命令向文件中添加行_Php_Html_Arrays_File_Preg Replace - Fatal编程技术网

在php中使用数组命令向文件中添加行

在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

我正在尝试制作一个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('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?是的,每次使用代码时都会添加一行新行。请注意,这可能会产生重复。