1

タイトルがややこしくて申し訳ありませんが、これは私の問題です
。PHP を使用して .html ファイルのソースをエコーする必要があります。PHP include(); を使用してみました。ファイルの拡張子は .html.txt でしたが、.html のように表示されました。「example.com/file.html.txt」などのファイルに直接アクセスすると、通常の .txt として表示されます。
これは、ファイルを表示するために使用している PHP コードです。

<div>
<?php
include "../head.php";
$path = $_GET["p"];
?>
<div style="position:absolute; top:90px; padding-left:5px; padding-right:10px;">

<?php
echo "<code>";
include("files/".$path);
echo "</code>";
?>

</div>

私が理解できることを願っています!:) よろしくお願いします!

4

5 に答える 5

6

を使用せずinclude()、ファイルの内容を読み取り、代わりに出力します (エスケープすることを忘れないでください)。

あなたの場合$pathはユーザー入力です。機密情報にアクセスできないようにする必要があります。を使用basename($path);すると、ディレクトリ トラバーサルが不可能になります。

<code>
<?php
    // $path = basename($path);
    $html = file_get_contents("files/".$path);
    echo htmlspecialchars($html);
?>
</code>
于 2012-05-21T23:25:28.603 に答える
4

HTML タグを html ファイルに出力する場合は、htmlspecialchars()特殊文字をエスケープするために使用します。

于 2012-05-21T23:22:36.937 に答える
4

textarea内にラップすることをお勧めします。シンプルかつ迅速。

echo "<textarea>";
include "/filename.txt";
echo "</textarea>";

非常に単純なものを探していると、明らかなことを見落としてしまうことがあります。:o)

于 2012-05-21T23:32:18.333 に答える
2

ブラウザーで html ソースを表示できるようにしたい場合は、関数 htmlentities() などを使用して実行するのが最善の方法です。トリッキーな部分は、インクルードのファイルの内容を文字列に取得して、それを実行できるようにすることです。これには、ob_start() と ob_get_clean() を使用します。これらは基本的に出力バッファを開始し、出力バッファの内容を取得して処理してエコーできるようにします。

<div>
<?php
include "../head.php";
$path = $_GET["p"];
?>
<div style="position:absolute; top:90px; padding-left:5px; padding-right:10px;">

<?php
echo "<code>";
ob_start();
include("files/".$path);
echo htmlentities(ob_get_clean());
echo "</code>";
?>

</div>
于 2012-05-21T23:25:34.820 に答える
1

インクルードは安全ではありません。ファイルに PHP コードが含まれている場合は、それが実行されます。むしろこれを使用する必要があります:

echo htmlspecialchars(file_get_contents('yourfile.html'));
于 2012-05-21T23:26:48.057 に答える