記事

PHPでXMLファイルを強制的にダウンロードさせる

  • このエントリーをはてなブックマークに追加

CakePHPで作ったCMSからWordPressに移行する際にXMLファイルをダウンロードするとこでハマったのでメモ。
根本的に解決したとは言えませんが。。。

PHPでファイルを強制的にダウンロードさせようと思ったら、header関数がおなじみ。

header('Content-Disposition: attachment; filename=download.xml');

てな感じ。

ところが!MacのSafariだけ何故かダウンロード出来ない!「RSSリーダーが見つかりません」だのなんだの言って、RSSリーダーで開こうとしてファイルを保存してくれない。

で、確か同じサーバに入ってるWordPressのエクスポート機能では、ちゃんとXMLファイルをダウンロード出来たはず!と思い出して、WordPressのコアファイルを探ってみる。

wp-admin/export.phpとwp-admin/includes/export.php辺りを見てみる。

header( 'Content-Description: File Transfer' );
header( 'Content-Disposition: attachment; filename=' . $filename );
header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true );

こんな感じでheader()は指定されているものの、他に変わったところは見当たらない。。。なんで?

で、結局のところ、WordPressが出力するWXRファイルと同じように、以下のコメントを挿入してみた。

<!-- This is a WordPress eXtended RSS file generated by WordPress as an export of your site. -->
<!-- It contains information about your site's posts, pages, comments, categories, and other content. -->
<!-- You may use this file to transfer that content from one site to another. -->
<!-- This file is not intended to serve as a complete backup of your site. -->

<!-- To import this information into a WordPress site follow these steps: -->
<!-- 1. Log in to that site as an administrator. -->
<!-- 2. Go to Tools: Import in the WordPress admin panel. -->
<!-- 3. Install the "WordPress" importer from the list. -->
<!-- 4. Activate & Run Importer. -->
<!-- 5. Upload this file using the form provided on that page. -->
<!-- 6. You will first be asked to map the authors in this export file to users -->
<!--    on the site. For each author, you may choose to map to an -->
<!--    existing user on the site or to create a new user. -->
<!-- 7. WordPress will then import each of the posts, pages, comments, categories, etc. -->
<!--    contained in this file into your site. -->

<!-- generator="WordPress/3.8.3" created="2014-04-28 18:33" -->

よくわからないけど、これでダウンロード出来るようになった。
ちなみに、rss要素を別の要素に変えてもダウンロード出来る様になった。

基本的にSafariではRSSはRSSリーダーで開く仕様なのかな??
にしても、header()を無視するのはやめていただきたい!w

  • このエントリーをはてなブックマークに追加
2014年4月
« 6月   6月 »
 123456
78910111213
14151617181920
21222324252627
282930  

フォトライブラリー

コメントを残す

%d人のブロガーが「いいね」をつけました。