2012-02-12 3 views
4

적절한 구문은 무엇입니까?가변 PHP 다운로드 헤더 파일 이름?

header('Content-Disposition: attachment; filename="{$_SESSION['name']} . '.txt'); 

이 파일은 "소스보기"(HTML 포맷하지 있지만 올바른 줄 바꿈을 포함) 생각 만 제대로하면, 작동합니다.

<?php 
header("Content-type: text/html"); 
session_start(); 
    if(file_exists("chat") && filesize("chat") > 0){ 
     $handle = fopen("chat", "r"); 
     $contents = fread($handle, filesize("chat")); 
     fclose($handle); 
     ob_start(); 
$download = strip_tags($contents, '<br>'); 
$processed = preg_replace('#<br\s*/?>#i', "\n", $download); 
echo $processed; 
$var = ob_get_clean(); 
echo $var; 
    } 
?> 

$_SESSION['name'] 변수는 guest_158512 같은 것입니다 그리고 당신은 내가 저장하기 위해 노력하고있어 페이지의 소스를 볼 경우, 모든 줄 바꿈이 있습니다. 현재 페이지를 적절한 구문으로 guest_158512.txt으로 저장하려면 어떻게합니까?

+0

'filename = "{$ _ SESSION [ 'name']}. '.txt'''''를 닫으시겠습니까? – Cheery

답변

6

여기서 작은 따옴표를 사용하려고하면 문제가 발생합니다. 작은 따옴표는 PHP에서 변수를 보간하지 않습니다.

문자열을 올바르게 종료하지 못했습니다. 작은 따옴표를 더 많이 사용했기 때문일 수 있습니다. 시도 :

header('Content-Disposition: attachment; filename="'.$_SESSION['name'].'.txt"'); 

Kolink도 points out 당신이 일반 텍스트가 아닌 HTML 파일을 제공하는 Content-Type: text/plain를 사용한다고.

+0

게시 한 모든 사람에게 감사드립니다. 이제 파일의 이름이 올바르게 지정되고 올바르게 저장됩니다. 메모장에서 파일을 열면 아무 것도 저장되지 않습니다. 그러나 MS Word, Dreamweaver 또는 다른 "응용 프로그램"으로 열면 해당 줄이 그대로 유지됩니다. 나는 그것을 어떻게 풀어야할지 모르겠다. 수정 : \ r \ n 대신 \ n? – ionFish

+0

@mesh 유닉스 라인 엔딩 ('\ n')은 메모장에 의해 처리되지 않습니다. 윈도우 라인 엔딩 ('\ r \ n')이 필요합니다. – Borealid

+0

이미 독자적으로 작동하고 있습니다.하지만 향후 사용자를 위해 여기에 문서화되어 있어도 좋습니다. – ionFish

0

끝났습니다. 작은 따옴표를 사용하여 다음을 수행 할 수 있습니다

header('Content-Disposition: attachment; filename="' . $_SESSION['name'] . '.txt"'); 
+0

파일 이름의 경우 따옴표 (공백 문자 포함)를 공백으로 두는 것이 좋습니다. 그냥 경우 :) – Cheery

+0

좋은 지적, Cheery. – Josh

1
header("Content-Disposition: attachment; filename=\"".$_SESSION['name'].".txt\""); 
header("Content-Type: text/plain"); 

을 나중에 참조를 들어, 따옴표가 심하게 일치하지 않는 것을 보여줄 것 같은 ++ 메모장과 같은 적절한 코드 편집기를 사용하여.