PHP ob_get_clean删除后面的换行符?>

时间:2011-07-19 21:51:17

标签: php

我正在尝试创建一个抓取脚本文件并在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

2 个答案:

答案 0 :(得分:3)

关闭?>代码后,将始终忽略一个换行符 - 使用输出缓冲不会改变任何内容。


作为参考,请参阅Instruction separation

  

块的结束标记将包括立即尾随   换行如果有的话。

Escaping from HTML

  

当PHP点击?>结束标记时,它只是开始输出   无论发现什么(紧接着紧接着的换行 - 请参阅   指令分离)


根据PHP手册中的这两句话(以及我自己的经验),在?>之后丢失换行符,就像你一样,记录并预期行为 1

1。 即使出乎意料,第一次遇到它^^

答案 1 :(得分:2)

是的,PHP会这样做 - 它会在?&gt;

之后删除一个换行符

这样做是因为在普通的PHP文件中,你用?&gt;关闭它?然后你有一个尾随的换行符,往往会弄乱。

在你的情况下,它没有帮助。

我会这样做:

conf
int ethernet 1/<?php echo $args['port'] . "\n";
?>switchport

我移动了结束?&gt;到下一行只是为了让你不依赖换行符。