Php dom xml 파일을 만들고 헤더가 이미 전송 될 때 파일을 서버에 쓰지 않고 파일 저장 링크/프롬프트를 만듭니다.
문제
PHP Dom XML 조각을 만들어 다음과 같은 문자열로 저장했습니다.
<?php
// create a new XML document
$doc = new DomDocument('1.0');
...
...
...
$xmldata = $doc->saveXML();
?>
이제 헤더를 사용하여 파일 다운로드 프롬프트를 보낼 수 없으며 파일을 서버에 쓸 수 없거나 파일이 그 위에 놓여있는 것을 원하지 않습니다.
이 파일 저장 링크 또는 다운로드 프롬프트와 같은 것이 좋습니다. 어떻게해야하나요?
해결책
CMS 프레임 워크 내에서 작업 중이며 코드가있는 위치 이전에 콘텐츠가 출력되는 것을 막을 수 없다는 의견을 알 수 있습니다.
작업중인 스크립트가 이미 콘텐츠를 출력 한 경우 (제어를 넘어서) 하나의 스크립트로 만 달성하려는 작업을 수행 할 수 없습니다.
스크립트는 "다음 컨텐츠는 HTML입니다"라는 헤더를 보낼 수 있으며 HTML을 출력하거나 "다음 내용은 XML이며 첨부 파일이며 특정 파일 이름이 있습니다"라고 말하는 헤더를 보냅니다. 당신은 둘 다 할 수 없습니다.
XML 파일을 다운로드하기 위해 별도의 스크립트 링크가 포함 된 HTML을 출력하거나 파일 다운로드 및 HTML을 출력 할 수 있습니다.
따라서 수정중인 CMS 스크립트의 출력에 다운로드 링크를 추가 한 다음 별도의 스크립트로 다운로드를 처리해야합니다.
나는 도움이 될 일이있는 예를 만들었다. 이 예제에는 다운로드 링크가 포함 된 간단한 HTML 문서와 다운로드를 처리하는 PHP 스크립트가 포함되어 있습니다.
아래 코드를 보거나 라이브 예.
HTML (외부 보풀 제거, 반드시 유효하지 않음)
<html>
<head>
<title>XML Download Example</title>
</head>
<body>
<a href="download.php">Download XML example</a>
</body>
</html>
PHP
<?php
// Populate XML document
$doc = new DomDocument();
// ... various modifications to the document are made
// Output headers
header('Content-type: "text/xml"; charset="utf8"');
header('Content-disposition: attachment; filename="example.xml"');
// Output content
echo $doc->saveXML();
?>
두 번째 스크립트를 통해 다운로드를 완전히 처리 할 수없는 경우 (아마도 관련 데이터에 액세스 할 수 없음) 문제를 다시 생각해야합니다.
다른 팁
php.ini에서 output_buffering을 활성화하면 헤더를 보내는 옵션이있을 수 있습니다.
나에게도 똑같은 일이 일어났습니다. 그러나 나는 XML dom을 사용하지 않습니다. XML을 구문 분석하기 위해 SimpleXML을 사용합니다.
$ xml = 새로운 SimplexMlelement ( "u003Croot>u003C/root> ");
내 견해에 양식을 통해 제공되는 데이터에 따라 생성 될 사용자 정의 XML을 제공하고 싶습니다. 양식을 제출할 때 XML을 원하는 이름으로 다운로드하여 얻습니다.
헤더 ( 'content-type : "text/xml"; charset = "utf8"');
헤더 ( 'content-disposition : 첨부 파일; filename = "'. $ _ post [ 'filename']. '. xml"');
echo $ xml-> asxml ();