2009-09-08 4 views
3

Я написал сценарий, который печатает XML-файл на экране, но я хочу, чтобы он открыл диалоговое окно загрузки, чтобы я мог сохранить его как файл.PHP XML-Export как файл скачать

как я могу это сделать?

thnx!

сценарий:

<?php 
print '<?xml version="1.0" encoding="UTF-8" ?>'; 
print "\n <data>"; 
... 
print "\n </data>"; 
?> 
+1

Определенно не ответ на ваш вопрос, но я бы рекомендовал использовать некоторые библиотеки/класс для генерации XML вместо построения его «вручную» (например, SimpleXML - используется довольно часто в коде Drupal или DOMDocument, если у вас более сложные потребности). Это экономит массу работы. –

+0

@headkit: Если вы написали модуль для этого. Можете ли вы дать мне код. Если вы ответите мне, я дам по почте id. Спасибо – Cindrella

+0

не был создан модуль, извините. – headkit

ответ

4

попробуйте установить заголовки правильно:

<?php 
header('Content-Type: text/xml'); 
header('Content-Disposition: attachment; filename="example.xml"'); 
header('Content-Transfer-Encoding: binary'); 

print '<?xml version="1.0" encoding="UTF-8" ?>'; 
print "\n <data>"; 
... 
print "\n </data>"; 
?> 
+0

это мой любимый, но не работает. .- ( – headkit

+1

Возможно, вы попробуете это снова, поместив вызов ob_end_clean(); 'перед объявлениями заголовка. Из ваших тегов я предполагаю, что это происходит в контексте Drupal, а Drupal может вмешаться, уже установив некоторые заголовки заранее. Очистка выходного буфера может иметь значение. –

+0

Получаете ли вы какие-либо предупреждения о том, что заголовок уже отправлен? Посмотрите в свой Apache-журнал/var/log/apache2/или так далее. В этом случае вы можете попробовать предложение Хенрика. – stefita

3

Попробуйте использовать следующее, чтобы заставить браузер, чтобы показать «Сохранить как ...» Диалог: браузер показывает диалоговое окно «Сохранить как ...» для типов содержимого, которое не знает, как интерпретировать/отображать или когда оно указано в заголовках. Просто знайте правильные заголовки, и вы можете указать, чтобы загрузить его, имя файла по умолчанию, тип контента и как его следует кэшировать.

<?php 
$xml = '<?xml version="1.0" encoding="UTF-8" ?>'; 
$xml .= "\n <data>"; 

// Create the rest of your XML Data... 

$xml .= "\n </data>"; 
downloader($xml, 'yourFile.xml', 'application/xml'); 

Код функции:

<?php 
if(!function_exists('downloader')) 
{ 
    function downloader($data, $filename = true, $content = 'application/x-octet-stream') 
    { 
    // If headers have already been sent, there is no point for this function. 
    if(headers_sent()) return false; 
    // If $filename is set to true (or left as default), treat $data as a filepath. 
    if($filename === true) 
    { 
     if(!file_exists($data)) return false; 
     $data = file_get_contents($data); 
    } 
    if(strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== false) 
    { 
     header('Content-Disposition: attachment; filename="'.$filename.'"'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Content-Type: '.$content); 
     header('Pragma: public'); 
     header('Content-Length: '.strlen($data)); 
    } 
    else 
    { 
     header('Content-Disposition: attachment; filename="'.$filename.'"'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Content-Type: '.$content); 
     header('Expires: 0'); 
     header('Pragma: no-cache'); 
     header('Content-Length: '.strlen($data)); 
    } 
    // Send file to browser, and terminate script to prevent corruption of data. 
    exit($data); 
    } 
} 
Смежные вопросы