我正在尝试创建一个抓取脚本文件并在telnet设备上执行输出的函数。我有它的工作,但ob_get_clean似乎是在一个PHP结束括号后删除任何换行符(?>)。有谁遇到过这个问题?
public final function execScript($name, $args)
{
ob_start();
include("../apps/frontend/modules/device/scripts/" . $name . ".php");
$partial = ob_get_clean();
$commands = explode("\n", $partial);
foreach($commands as $command)
{
$output .= $this->telnet->exec($command);
}
return $output;
}
“脚本”
conf
int ethernet 1/<?php echo $args['port']; ?>
switchport allowed vlan add <?php echo $args['vlan_id']; ?> tagged
switchport native vlan <?php echo $args['vlan_id']; ?>
switchport allowed vlan remove 1
end
预期产出
conf
int ethernet 1/18
switchport allowed vlan add 100 tagged
switchport native vlan 100
switchport allowed vlan remove 1
end
实际输出
conf
int ethernet 1/18switchport allowed vlan add 100 tagged
switchport native vlan 100switchport allowed vlan remove 1
end
答案 0 :(得分:3)
关闭?>
代码后,将始终忽略一个换行符 - 使用输出缓冲不会改变任何内容。
作为参考,请参阅Instruction separation:
块的结束标记将包括立即尾随 换行如果有的话。
当PHP点击
?>
结束标记时,它只是开始输出 无论发现什么(紧接着紧接着的换行 - 请参阅 指令分离)
根据PHP手册中的这两句话(以及我自己的经验),在?>
之后丢失换行符,就像你一样,记录并预期行为 1
1。 即使出乎意料,第一次遇到它^^
答案 1 :(得分:2)
是的,PHP会这样做 - 它会在?&gt;
之后删除一个换行符这样做是因为在普通的PHP文件中,你用?&gt;关闭它?然后你有一个尾随的换行符,往往会弄乱。
在你的情况下,它没有帮助。
我会这样做:
conf
int ethernet 1/<?php echo $args['port'] . "\n";
?>switchport
我移动了结束?&gt;到下一行只是为了让你不依赖换行符。