Php dom xml 파일을 만들고 헤더가 이미 전송 될 때 파일을 서버에 쓰지 않고 파일 저장 링크/프롬프트를 만듭니다.

StackOverflow https://stackoverflow.com/questions/202305

  •  03-07-2019
  •  | 
  •  

문제

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을 활성화하면 헤더를 보내는 옵션이있을 수 있습니다.

http://us.php.net/manual/en/function.headers-Sent.php

나에게도 똑같은 일이 일어났습니다. 그러나 나는 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 ();

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top