0

ユーザーが次のフォームを送信したときに.txtファイルを書き直してダウンロードしようとしていますが、最後のハードルで問題が発生しています。

<form id="saveFile" action="index.php?download" method="POST" onsubmit="return false;">
    <input type="submit" name="backupFile" id="backupFile" value="Save a file" />
    <input type="hidden" name="textFile" id="textFile" />
</form>

送信ボタンが押されると、次の(簡略化された)コードを含むjQuery関数を実行しています-実際に保存しているコードを取り出して、単純な文字列に置き換えました。これにより、「非表示」入力タイプが設定され、フォームが送信されます。

$("#textFile").val('This is the text I will be saving');
document.forms['saveJSON'].submit();

フォームが送信されると、次のPHPコードが実行されます。

<?php 
if (isset($_GET['download'])) {

    $textData = $_POST["textFile"];
    $newTextData = str_replace("\\","",$textData);
    $myFile = "php/data.txt";
    $fh = fopen($myFile, 'w') or die("can't open file");
    fwrite($fh, $newTextData);
    fclose($fh);

    header("Cache-Control: public");
    header("Content-Description: File Download");
    header("Content-Disposition: attachment; filename='".basename($myFile)."'");
    header("Content-Type: application/force-download");
    header("Content-Transfer-Encoding: binary");
    readfile($myFile);
}
?>

fclose($ fh);まで コードの行は実際には正常に機能します。.txtファイルは、必要な新しいコンテンツで更新され、ファイルがダウンロードされます。ただし、ダウンロードしたファイルを開くと、.txtファイルのテキストとWebページ(index.php)の多くのコンテンツが含まれています。

たとえば、ファイルは次のようになります

「これは私が保存するテキストです

これは私のウェブサイトのh1です

残りのコンテンツが続きます」

誰かがこれを引き起こしている可能性があることを知っていますか?

4

1 に答える 1

2

まず、Harkeが言ったように、ダウンロードの提供のみを処理するスクリプトにリダイレクト(またはリンク)すると、簡単に回避できます。

ファイルを読み取る前に出力バッファをクリーンアップし、ファイルを読み取った後にスクリプトを終了します

ob_clean();
    flush();
    readfile($file);
    exit;
于 2012-10-15T09:00:06.230 に答える