質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

5153閲覧

WordPressでCSVファイルを正しく出力させたい

yk2200

総合スコア12

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/06/21 04:42

WordPressにて下記のPHPコードでCSVファイルをブラウザで出力すると、
244行にもなるタグなどを含むCSVファイルが出力されてしまいます。
求めている内容だけ出力されないのは、なぜでしょうか。
よろしくお願いいたします。

<PHPコード>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

<?php header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="test.csv"'); // do not cache the file header('Pragma: no-cache'); header('Expires: 0'); $data = Array( 0 => 'あいうえお', 1 => 'かきくけこ', 2 => 'さしすせそ', 3 => 'たちつてと' ); $fp=fopen("php://output","w"); foreach ($data as $a){ fputs($fp,$a."\n"); } fclose($fp); ?>

<出力されたCSV fileの冒頭>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

<!DOCTYPE html> <html lang="en-US" class="no-js"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="profile" href="http://gmpg.org/xfn/11"> ・ ・ ・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

上記コードは、どういったファイル名で、どこに保存し、どういったurlでアクセスされてますか?

こちらの環境で、上記コードをpage-test.phpに「テーマ内」に保存して、
固定ページからtestというタイトルの固定ページを作成(ページのリンクは、http://hogehoge.com/test)語、
http://hogehoge.com/testにアクセスしたら、ご希望の.csvファイルがダウンロードされました。

投稿2017/06/27 01:25

yukikp

総合スコア797

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yk2200

2017/06/27 06:52

ご回答ありがとうございます。test1.phpというファイル名で、上記のPHPコードのみをテーマ内に保存し、[myphp file='test1']というショートコードを使って、固定ページ(hogehoget.com/test)からダウンロードしました。こちらの環境では、HTMLが目的の内容の前にいっしょに出力されてしまっています。こちらではtwentysixteenというテーマを使用しています。 ちなみに、固定ページにphpファイルをどのように適用されたのでしょうか。 こちらは、テーマ内のfunctions.phpに、phpファイルをインクルードできるように設定しています。 phpファイルのインクルードの方法に問題があるのでしょうか。
yk2200

2017/06/27 09:31

ファイル名をtest1.phpからpage-test1.phpに代え、ページ名もhogehoge.com/testにしたところ、CSVファイルを問題なくダウンロードすることができました。ページデザインは無くなってしまいましたが、CSV出力ができるようになり、すっきりしました。ありがとうございました。
yukikp

2017/06/27 11:45

回答遅くなりました。 > 固定ページにphpファイルをどのように適用されたのでしょうか。 WordPressでは、page-xxx.phpというファイルをテーマ内に入れておくと、固定ページでパーマリンクがhttp://homehome.com/xxxにアクセスがあった時、自動的にそのファイルが読み込まれるようになっています。 > テーマ内のfunctions.phpに、phpファイルをインクルードできるように設定しています。 この一文からおそらく以下の事が原因だと思われます。 header()生の HTTP ヘッダを送信する場合、header()が読み込まれる前に、 何かが画面に出力されるとエラーとなります。 functions.phpでincludeしているとのことですが、この場合、includeしたファイルのheader()が、HTTPヘッダを出力する前に、他の部分(header.php)でHTTPヘッダを出力してしまいます。 そのため、yk2200さんの場合では、エラーが表示されてしまったのだろうと思われます。
guest

0

fgetcsvで表示できました。

PHP

1$handler = fopen(get_stylesheet_directory_uri() ."/test.csv", "r"); 2 3while($line = fgetcsv($handler)){ 4 5 var_dump($line); 6} 7fclose($f);

投稿2017/06/26 07:03

madone99

総合スコア1855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yk2200

2017/06/27 06:56

ご回答ありがとうございます。今回は、Wordpressサイト内に表示した情報をCSVファイルで正しくダウンロードする方法に関してでございます。こちらの環境では、目的の内容とともにHTMLのコードもともにCSVファイル内で出力されてしまっている状況でございます。
madone99

2017/06/27 08:01

なるほど、失礼いたしました。
yk2200

2017/06/27 09:40

いえいえ、ありがとうございました。以下の方法で、本件、解決できました。 ファイル名をtest1.phpからpage-test1.phpに代え、ページ名もhogehoge.com/testにしたところ、CSVファイルを問題なくダウンロードすることができました。ページデザインは無くなってしまいましたが、CSV出力ができるようになり、すっきりしました。 [myphp file='test1']のコードでphpファイルを適用するのではなく、phpファイルをカスタムページとして、’page-xxx.php'の形でテーマ内に直接、保存することがポイントでした。
guest

0

htmlの内容はどのようになっていますか?
ヘッダの感じだとエラーのように思います。
また、このPHPにより画面(VIEW)が表示されていないかも含めてご確認ください。

このPHPでは画面出力するわけではないので閉じの?>は不要に思います。
下記を試してみてください。

fclose($fp); exit(0); //追加

投稿2017/06/23 05:28

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yk2200

2017/06/26 06:23

ご回答ありがとうございます。 ご提案頂いた内容で試してみましたが、結果は同じでした。 HTMLの内容は、ワードプレステーマのホーム画面のHeadやBodyなどです。 出力されたCSVファイルの最後の部分に、出力したい内容も出ているのですが。。。
m.ts10806

2017/06/26 07:02

ちなみにPHPコードはどのファイルでどのタイミングで書いていますか? WordpressのHTML出力が入ってきてしまうようなタイミングかどうかの切り分けをしたいです。
yk2200

2017/06/26 07:13

test1.phpというファイル名で上記のPHPコードのみを記入し、[myphp file='test1']というショートコードと使って、固定ページリンク(.../test)に表示しています。おっしゃる通り、実際はページ画面は表示されないで、ファイルのみダウンロードされる形です。
yk2200

2017/06/26 08:06

色々なご提案ありがとうございます。 PHPファイル2行目に ob_clean(); と入れてみましたが結果は同じで、HTMLタグを省くことはできませんでした。
m.ts10806

2017/06/26 08:22

ちなみに、CSVに実際に出力したい内容はどのようなものですか?
m.ts10806

2017/06/26 08:25

あとはob_end_clean()の方を試してみるか、 fopenの「php://output」の部分をcsvのパスにするとかでしょうかね・・ Wordpress側が何か掴んでるのは間違いなさそうです。
kei344

2017/06/26 10:19

To: mts10806さん WordPressがheaderを出力する前にフックを使って処理する必要があるので、質問者の提示しているコード&やり方では無理が有ると思います。WordPressの関係しない決まった出力ならWordPressで処理しないほうが簡単なような気がします。
m.ts10806

2017/06/26 21:15

なるほど。確かにそうですね。
yk2200

2017/06/27 07:05

コメントいただき、ありがとうございます。CSVに出力したい内容は、wpカスタムテーブル内データの一部と固定数字いくつかになります。 wordpress内データと連動しているため、できればwordpressサイト内で処理したいのですが、mySQLから直接データを出して、ほかのサイトで処理する方法なども検討してみます。
yk2200

2017/06/27 09:38

ファイル名をtest1.phpからpage-test1.phpに代え、ページ名もhogehoge.com/testにしたところ、CSVファイルを問題なくダウンロードすることができました。ページデザインは無くなってしまいましたが、CSV出力ができるようになり、すっきりしました。 皆様のご指摘どおり、wordpressの仕様上の問題でした。[myphp file='test1']のコードでphpファイルを適用するのではなく、phpファイルをカスタムページとして、’page-xxx.php'の形でテーマ内に直接、保存することがポイントでした。色々と教えて頂き、ありがとうございました。
m.ts10806

2017/06/27 23:53

何はともあれ解決したようでよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問