0

我有一个 PHP 文件。我想阅读该文件中编写的 PHP 代码。我正在执行的脚本在文件“test.php”中。

<?php
$test = file_get_contents('test.php');
echo '<pre>'.$test.'</pre>';
?>

浏览器窗口中的输出是:

'.$test.'

'; ?>

对文件的另一个测试:

<!DOCTYPE html>
<html>
<head>
  <title>Canvas Home</title>

  <link rel="shortcut icon" href="http://localhost/collaborate/icons/collaborate.ico">
<?php
    echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheets/".basename(__FILE__,'.php').".css\">";
    echo "<script type=\"text/javascript\" src=\"js/".basename(__FILE__,'.php').".js\"></script>";
?>
  <link rel="stylesheet" type="text/css" href="stylesheets/navs.css">
</head>

<body>
  <div></div>
</body>

</html>

给出了输出:

"; echo ""; ?> 

有人可以解释一下第一个文件中发生了什么吗?我希望返回的字符串被简单地回显。

同样在第二个文件中,第一个简单的 HTML 部分被回显,因此被解释为 HTML,可以理解。但那会发生什么呢?为什么会显示 echo 命令本身?

我基本上想实现读取任何脚本文件的源而不是执行它,我希望它显示在浏览器窗口中。

4

2 回答 2

4

由于您将原始 PHP 代码输出到浏览器,因此浏览器正在尝试呈现<?php为 HTML 标记。您可能希望通过 htmlspecial 字符运行代码,以便 PHP 代码中的任何 HTML 元字符都被编码发送,然后不被浏览器呈现。例如

$code = file_get_contents('script.php');
echo '<pre>', htmlspecialchars($code), '</pre>';

请注意,您的浏览器在输出方面对您撒谎,尤其是在您使用 PHP 和/或 HTML 时。请记住,浏览器的工作是渲染html,以及任何看起来像 HTML 的东西,包括 PHP 标记。如果你在浏览器中看到奇怪的输出,总是做一个“查看源代码”来查看页面的原始“代码”——你可能会在那里看到你的 PHP 和 html 代码,通过就好了。

于 2013-07-08T15:10:29.240 回答
0

正如 Mark B 所指出的,您的浏览器正试图将文件解释为 HTML 代码。一个干净的解决方案是让浏览器将响应正文解释为纯文本,如下所示:

<?php
header('Content-Type: text/plain');
echo file_get_contents(__FILE__);
exit;

注意:在 PHP__FILE__中总是指当前文件。

于 2013-07-08T15:15:57.250 回答