まず記事内でPHPを使えるようにしておく。
当ブログでは『Exec-PHP』を使用。
因みに余談だが、Exec-PHPは記事内でfunctionを作るということは出来ない。(『/feed/』エラー)
別ファイルで作成して、wp-config.phpや記事内で『require_once』して呼び出すなら使える。
なので『今回だけ』または『記事内だけで完結』を求める人向けに配列1個にまとめておいた。
かぶらないとは思うけど、仮に今後wordpress定数と被った場合は配列名を修正するだけで済むしね!
今回はsjis-winのcsvを読む。読んだファイルはコチラ。
excelでファイルを作成したという想定。
utf-8でcsvを作ることはなかなかないけど、その場合はmb_convert_encoding変換が不要。
$use['file']は、読み込む対象ファイルのURLかパス。
『home_url()』で「サイトのアドレス(URL)」。最後『/』。
『site_url()』で「WordPressのアドレス(URL)」。
『ABSPATH』はインストールdirectory。最後『/』はない。
ロックかける形式と単純形式、両方URL指定でもdirectory指定でも使える。
個人的にはdirectory指定というかpath指定の方がオススメ。
単純形式
完全に読み込み専用のファイル等、同時に書き換えられる状態が発生しないならこっちのが処理少なくていい。
$use = array( 'file' => site_url().'/item/csv/sjis.csv', 'csv' => array(), 'fp' => tmpfile(), ); $use['data'] = file_get_contents($use['file']); $use['data'] = mb_convert_encoding($use['data'], 'UTF-8', 'sjis-win'); fwrite($use['fp'], $use['data']); rewind($use['fp']); while (($use['data'] = fgetcsv($use['fp'], 0, ",")) !== FALSE) $use['csv'][] = $use['data']; fclose($use['fp']);
参考:文字化けせずにCSVファイルを読み込み、配列に変換する | PHP Archive
前はもっとめんどくさいことしてたんだけど、こんな簡単な方法があったから次からこっち使う。
ロックかける形式
同時に書き換えられていることも想定している。
$use = array( 'file' => ABSPATH.'item/csv/sjis.csv', 'csv' => array(), 'fp' => tmpfile(), ); $use['data'] = file_get_contents($use['file']); $use['data'] = mb_convert_encoding($use['data'], 'UTF-8', 'sjis-win'); if(@fwrite($use['fp'], $use['data'])){ if (flock($use['fp'], LOCK_EX)){ rewind($use['fp']); while (($use['data'] = fgetcsv($use['fp'], 0, ",")) !== FALSE) $use['csv'][] = $use['data']; flock($use['fp'], LOCK_UN); } fclose($use['fp']); }
処理結果
結果をprint_rしている。両方の結果は同じ。
Array ( )
公開:2014/12/25 @ 12:09
更新:2017/3/15 @ 15:56
コメント