2012-12-08 5 views
2

강제로 '증명'이라는 자바 스크립트 문자열로 파일을 다운로드하려고합니다. 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'와 같은 더 작은 문자열로 시도했지만 여전히 비어있어 숨겨진 양식의 가치가 작동하지 않는다고 추측하고 있습니다.

감사

+0

당신이 당신의 로그 파일에 오류를 얻고있다? – pregmatch

+0

파일을 덮어 쓸 권한이 있습니까? 또한 .. $ Proof variabile은 비어 있지 않습니까? 출력이 양식에서 가져온 것이면 파일을 덮어 쓸 필요가 있습니까? –

+0

변수가 비어 있지 않습니다. alert (Proof)로 선택했는데 html 코드가 포함되어 있습니다. 쓰기 권한에 대해서는 아래 제안을 시도했지만 작동하지 않아 다운로드 대화가 나타나지 않았습니다. 나는 단순히 사용자가 웹 사이트의 주요 div를 텍스트 파일로 다운로드하도록하고있다. 이 메인 div는 사용자가 동적으로 생성했습니다. 그는 원할 경우 나중에로드 할 수 있습니다. –

답변

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; 
+0

나는 당신의 코드를 시험해 보았고 빈 페이지가있는 .../download-to-file.php로 리다이렉트했다. 콘솔 오류가있다 : "HTML 문서의 문자 인코딩이 선언되지 않았다. 문서에 US-ASCII 범위를 벗어나는 문자가 포함되어 있으면 문서가 일부 브라우저 구성에서 깨진 텍스트로 렌더링됩니다. 페이지의 문자 인코딩은 문서 또는 전송 프로토콜에서 선언해야합니다. @ ..../download-to -file.php " –

+0

내가 가지고있는 content-transfer-encoding 헤더를 제거했습니다. 도움이되는지 확인하십시오. 증명 HTML이나 일반 텍스트입니까? html의 경우'Content-Type : text/html; charset = UTF-8'을 content-type 헤더로 사용합니다. – drew010

+0

감사합니다. 추가 헤더와 content-type을 추가했을 때 작동했습니다. 그러나 인용문에는 문제가 있지만 해결해야 할 부분이 있습니다. 적어도 파일에 내용이 있습니다. 다시 한번 감사드립니다. –

관련 문제