質問
-
ライト
無料サーバーからライトへの引っ越し -
本文:
ご教授願います。無料サーバー上では、Mysqlのデータをcsvファイルでダウンロードするphpプログラムで、下記部分は問題なく動いていました。--
if(touch($file_path)){
$file = new SplFileObject($file_path, "w");
$stmt = $pdo->query($export_sql);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$row = mb_convert_encoding($row,'SJIS-win','UTF-8');
$file->fputcsv($row);
}
$pdo = null;
}
--しかしライトサーバに引っ越しすると動かなくなりました。printとかでとりあえずcsvファイルをダウンロードするphpは作れたのですが、大変不便です。ライトのphpバージョン、php.iniを無料サーバーに合わせたりしたのですが、うまくいきませんでした。解決方法がありましたらよろしくお願い致します。 - 緊急度:急ぎ投稿者:hmoriさん投稿時間:2024/10/11 09:29
回答 No.13096
この回答がベストアンサーです
ファイルができるが、データが1件も出力されないのなら
「$row = mb_convert_encoding($row,'SJIS-win','UTF-8');」
の部分を削除してみては?
■
動作検証したプログラム
<?php
$dsn ="mysql:dbname=DB名;host=ホスト名";
$dbuser ="ユーザー名";
$dbpassword ="パスワード";
$file_path = "test01.csv";
$export_sql = "select * from wp_options";
$pdo = new PDO($dsn, $dbuser, $dbpassword);
if(touch($file_path)){
$file = new SplFileObject($file_path, "w");
$stmt = $pdo->query($export_sql);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
//$row = mb_convert_encoding($row,'SJIS-win','UTF-8');
$file->fputcsv($row);
}
$pdo = null;
}
Wordpressのテーブルから、データをファイルに書き出します。
「$row = mb_convert_encoding($row,'SJIS-win','UTF-8');」があると
1件も出力されませんでした。
この部分を削除すると、全件出力されました。
ただし、出力されたファイルの文字コードは、UTF-8です。
出力する文字列をSJISにしたいなら、何らかの処理を加えないとだめだろうけど、
原因は、mb_convert_encodingあたりだということがはっきりすると思う。
■
実際、どの部分が悪いのは、地道に調べない限り、わからないと思うけど?
質問者からのコメント
コメントいただきありがとうございます。
>■実際、どの部分が悪いのは、地道に調べない限り、わからないと思うけど?
というコメントに、やっぱ地道にだなということで、地道に調べたところ原因は、質問で書いたところではなく
header('Content-Length:' .filesize($file_path));
の行を削除したら動きました。お騒がせしました。
ネットの情報だと元のままで良いような?無料サーバではなぜ動く?
とにかく動いているので、ありがとうございました。