2

「Proof」という JavaScript 文字列を含むファイルを強制的にダウンロードしようとしています。PHP スクリプトからアクションをトリガーする隠しフォームを作成しました。window.location.href を使用しない理由は、変数 Proof が長く、get メソッドがそれを処理できないためです。

// ボタンをクリックすると保存

$("#save").click(function () {
    var Proof = $("#main").html();
    var url = '/download-to-file.php';
    //send request
    jQuery('<form action="'+ url +'" method="post">'+
    '<input type="hidden" name="Proof" value="'+ Proof +'" />'+
    '</form>').appendTo('body').submit().remove();

 });

PHPコード:

<?php
$Proof = $_POST["Proof"];
$proof = stripslashes($Proof);

$file = 'savedproof.txt';


file_put_contents($file, $proof);
header('Content-disposition: attachment; filename="'.$file.'"');
header("Content-Type: text/txt");
header("Content-Transfer-Encoding: binary");
header('Content-length: '.filesize($file));  
header('Accept-Ranges: bytes');
header('Content-Description: File Transfer');

readfile($file);
?>

ダウンロード ダイアログが表示されますが、ファイルが空です。「test」のような小さな文字列でも試してみましたが、まだ空だったので、非表示のフォームの値が機能していないと推測しています。

ありがとう

4

1 に答える 1

3

file_put_contents失敗しているのではないかと思いますが、技術的には、すでに $_POST にあるため、データをファイルに書き込む必要はありません。

コードを次のように変更してみて、動作するかどうかを確認してください。

<?php
$Proof = stripslashes($_POST["Proof"])

header('Content-disposition: attachment; filename="savedproof.txt"');
header("Content-Type: text/html; charset=utf-8");
header('Content-length: '.strlen($Proof));  
header('Accept-Ranges: bytes');
header('Content-Description: File Transfer');

echo $Proof;
于 2012-12-08T23:25:22.833 に答える