『ネットオウルユーザーコミュニティ』の提供に伴い、『Q&A掲示板』は2025年3月31日正午をもって提供を終了します。[関連ニュース]

メンバーメニュー

ようこそ、ゲストさん

トップ > カテゴリ一覧 > 各種プラン > 無料サーバーからライトへの引っ越し

質問

  • ライト

    無料サーバーからライトへの引っ越し
  • 本文:

    ご教授願います。無料サーバー上では、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あたりだということがはっきりすると思う。



    実際、どの部分が悪いのは、地道に調べない限り、わからないと思うけど?








  • 投稿者:k-tanさん 投稿時間:2024/10/12 04:47
質問者からのコメント

コメントいただきありがとうございます。

>■実際、どの部分が悪いのは、地道に調べない限り、わからないと思うけど?

というコメントに、やっぱ地道にだなということで、地道に調べたところ原因は、質問で書いたところではなく
header('Content-Length:' .filesize($file_path));
の行を削除したら動きました。お騒がせしました。
ネットの情報だと元のままで良いような?無料サーバではなぜ動く?
とにかく動いているので、ありがとうございました。