電子書籍の厳選無料作品が豊富!

はじめまして。cakephpで制作しております。

csvファイルをダウンロードしようとしており、以下のようなコードを使用しておりますが、期待するデータが上手くダウンロードできません。
ファイルのパスは/file/list/csv/hoge/hoge.csv です。

$result = $this->_createCSV($mode, $auction_title, $data);
$file_url = "/" . $result;

$file = basename($file_url);

//$this->set("loading", 1);
//$this->set("file_path", $result);
header('Content-Type: application/x-csv');
header('Content-Disposition: attachment; filename="'. $file .'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($file));

readfile($file_url);

生成したcsvファイルを直接見てみると正常に値が入っているのですが、ダウンロードすると
pre class="cake-debug">
<a href='javascript:void(0);' onclick='document.getElementById("CakeStackTrace1").style.display = (document.getElementById("CakeStackTrace1").style.display == "none" ? "" : "none")'><b>Warning</b> (512)</a>: <span style = "color:Red;text-align:left"><b>SQL Error:</b> 1054: Unknown column 'EntryMember.user_id' in 'field list'</span> [<b>CORE\cake\libs\model\datasources\dbo_source.php</b>, line <b>525</b>]
</pre>
<div id="CakeStackTrace1" class="cake-stack-trace" style="display: none;"><a href='javascript:void(0);' onclick='document.getElementById("CakeErrorCode1").style.display = (document.getElementById("CakeErrorCode1").style.display == "none" ? "" : "none")'>Code</a> | <a href='javascript:void(0);' onclick='document.getElementById("CakeErrorContext1").style.display = (document.getElementById("CakeErrorContext1").style.display == "none" ? "" : "none")'>Context</a><pre id="CakeErrorContext1" class="cake-context" style="display: none;">$sql="SELECT `EntryMember`.`id`, `EntryMember`.`mail`, `EntryMember`.`temp_url`, `EntryMember`.`created`, `EntryMember`.`modified`, `EntryMember`.`user_id` FROM `entry_members` AS `EntryMember` WHERE `EntryMember`.`user_id` = (76) "
$error="1054: Unknown column 'EntryMember.user_id' in 'field list'"
$out=null</pre><div id="CakeErrorCode1" class="cake-code-dump" style="display: none;"><pre><code><span style="color: #000000">$out=null;</span></code>
<code><span style="color: #000000">if($error){</span></code>
<span class="・・・・・
のようなコードがぎっしり書き込まれた状態になります。
ファイルパスの問題か文字コードの問題だと思うのですが、どのように対処してよいか万策つきております。

どなたかご教示いただけますよう宜しくお願い致します。

A 回答 (4件)

#3です。



根本的な所なのですが、通常CSVをダウンロードする際
ヘッダを設定し、readfile($file_url);などでファイルの中身を
標準出力すれば、そのファイルの中身がダウンロードファイルに
書かれています。

今回、サーバー上のファイルとダウンロードしたファイルが
違うという事なので、別物なのではないかと考えています。

ヘッダー部を全てコメントし、画面上にファイルの中身を
表示すればどうなりますか?

//header(...

ついでに
print $file_url . "<br>\n";

とか入れて、変数の中身の確認もした方がいいかもしれません。

あとついでに
>ダウンロードするのにファイルの文字コードとか関係あるのでしょうか。
>因みに、使用している文字コードはUTF-8でCSVファイルに書き込む時もUTF-8です。

CSVファイルをWindows上でExcel等で読まれる場合はSJISに変換して書き込んでください。
ExcelがUTF-8を認識しないので・・・
    • good
    • 0

生成したcsvファイルとダウンロードするファイルは


本当に一緒でしょうか?

ダウンロードしたファイルの中に
SQL Error:1054: Unknown column 'EntryMember.user_id' in 'field list'
CORE\cake\libs\model\datasources\dbo_source.php, line 525
という記述があるので、生成時のデータ取得時にエラーになっているはずです。

一旦/file/list/csv/hoge/hoge.csvを削除し
もう一度生成して/file/list/csv/hoge/hoge.csvが存在するか
ご確認ください。

また、field list?にEntryMember.user_idが含まれていないようですので
追加するか取得内容から外すかして生成できるかの確認も
した方がいいかもしれません。
    • good
    • 0
この回答へのお礼

回答していただきありがとうございます。

SQL Error:1054: Unknown column 'EntryMember.user_id' in 'field list'については今回csvファイルを生成する際にデータは使用していません。
ただ、モデルで$hasManyをしているためEntryMemberのフィールドが無いから出ているのだと思っていますが、とりあえず使っていないので無視してました。これが影響しているのでしょうか。

お礼日時:2009/11/06 10:44

cakePHPがデバッグ情報を出力しているようなので、これをオフにすればよいのでは。

設定できるはずです。
これだけではダメだった気がするのですが思い出せません。
参考までに。
    • good
    • 0
この回答へのお礼

ご回答していただきありがとうございます。

debugを0にしてダウンロードしてみたところ、htmlソースが書き込まれた状態です。期待する値は含まれていませんでした。

ちなみに、ダウンロードボタンを押した時にデータをDBから読み込んでcsvを生成してダウンロード処理をしています。
生成したファイルを直接開いてみると期待する値ではありますが、文字化けしている状態なんです。
そのファイルをダウンロードしたところ上記のソースが書き込まれています。

お礼日時:2009/11/06 10:50

まずは・・・



file_exists($file_url)

するところから
    • good
    • 0
この回答へのお礼

回答していただきありがとうございます。
file_exists($file_url)をしてみたところ、falseが返ってました。

$_SERVER['DOCUMENT_ROOT'] . "/file/list/csv/hoge/hoge.csv"で
返り値をtrueにしてダウンロードしてみたんですが、ファイルの内容は
ブラウザで表示されている内容が全て書き込まれている状態です。

ダウンロードするのにファイルの文字コードとか関係あるのでしょうか。
因みに、使用している文字コードはUTF-8でCSVファイルに書き込む時もUTF-8です。

お礼日時:2009/11/06 10:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!