用php强制下载文件的最佳方法?

时间:2015-12-12 01:13:24

标签: php xml kml domdocument

我已经阅读了很多关于使用php强行下载的内容,但没有一个真正回答我的问题。

我的PHP代码读取与PHP文件位于同一目录中的XML文件作为新的DOMDocument。然后它根据用户输入更改XML文件。然后我希望它强制下载已更改的XML文件作为KML文件。我怎么做?这是我得到的最接近的:

$xml = new DOMDocument;
$xml->preserveWhiteSpace = false;
$file = 'master.xml';
$file = realpath($file);
$xml->Load($file);

header('Content-Disposition: attachment;filename=output.kml');
header('Content-Type: application/vnd.google-earth.kml+xml');
$xml->save('output.kml');
readfile('output.kml');

但没有任何反应。没有文件保存在任何地方,也没有下载文件。

1 个答案:

答案 0 :(得分:1)

考虑分割XML文件创建和文件下载,并使用file_put_contents() saveXML()将DOMDocument保存为外部文件。

...    
file_put_contents('output.kml', $xml->saveXML());    
$local_file = 'output.kml';
$download_file = 'download.kml';

if (file_exists($local_file)) {

    header('Content-Type: application/vnd.google-earth.kml+xml');    
    header('Content-Disposition: attachment;filename='.$download_file);
    header('Content-Length: '.filesize($local_file));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    ob_clean();
    flush();
    readfile($local_file);
    exit;

}