str_replace没有找到字符串并像它应该的那样替换。
这是回显输出的$data字符串
eth0 192.168.1.1/24 u/u Local eth0.51 192.168.5.1/24 u/u Dev 1 eth1 x.x.x.x/24 u/u Internet eth2 192.168.2.1/24 u/D Local 2 lo 127.0.0.1/8 u/u ::1/128 tun35 192.168.4.222/24 u/u
这是我的代码
$ssh = new Net_SSH2("$routerip");
if (!$ssh->login("$username", "$password")) {
return $radioip["error"] ='router error';
}
$data = $ssh->exec("/opt/vyatta/bin/vyatta-op-cmd-wrapper show interfaces");
$string = 'eth';
$datastart = strpos($data,$string);
$datastart = $datastart -1;
$pattern ='lo 127.0.0.1/8 u/u ::1/128';
$replace = '';
echo "$pattern";
$data = substr($data,$datastart);
$data = str_replace($pattern,$replace, $data);
echo "$data";
编辑
这是在 substr 之前$data
的 Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 192.168.1.1/24 u/u Local eth0.51 192.168.5.1/24 u/u Dev 1 eth1 x.x.x.x/24 u/u Internet eth2 192.168.2.1/24 u/D Local 2 lo 127.0.0.1/8 u/u ::1/128 tun35 192.168.4.222/24 u/u
问题出在内
$datastart = $datastart -1;
如果 $datastart
为 0(在您的情况下为 true,因为 eth
在字符串的开头),则$datastart -1;
使$datastart
等于 -1
。
这会影响$data = substr($data,$datastart);
,因为负偏移量将$data
字符串更改为 u
.你肯定没有你的$pattern
.
我认为最简单的方法是检查$datastart
是否小于 0 并将其设置为零:
$datastart = strpos($data,$string);
if ($datastart < 0) {
$datastart = 0;
}