如何使用PHP heredoc输出Bash heredoc块

时间:2013-02-19 16:18:13

标签: php heredoc

我需要在网页上显示一个没有任何格式的bash脚本。

bash脚本使用标准的“here here”块。当我尝试使用PHP heredoc函数输出脚本时,它会在遇到'<<<'时切断输出子串。我认为PHP heredoc功能不需要转义。

如何正确输出此脚本?

<?php

$string = $_GET["string"];

$bashscript = <<<MYMARKER
<pre>

#!/bin/sh
rm /tmp/blue.sh
cat <<INSTALL > /tmp/blue.sh
#!/bin/sh
cd /tmp
mkdir output
cd output
cat <<EOF > interface.conf
remote $string
EOF
INSTALL

</pre>
MYMARKER;

echo $bashscript;

?>

我在页面上得到的输出是

#!/bin/sh
rm /tmp/blue.sh
cat < /tmp/blue.sh
#!/bin/sh
cd /tmp
mkdir output
cd output
cat < interface.conf
remote 
EOF
INSTALL

1 个答案:

答案 0 :(得分:3)

这是因为<INSTALL ><EOF >被解释为浏览器中的标签(虽然无法识别)。右键单击打开它 - &gt;查看来源,你会看到它。 只需移出<pre>并使用htmlspecialchars()即可正确显示:

$bashscript = <<<MYMARKER
... everything without the <pre> tags ...
MYMARKER;

echo '<pre>'.htmlspecialchars($bashscript).'</pre>';