WordPress での CSV 出力について

はじめに

最近、Plugin Check というプラグインチームが作成したプラグインで自分のプラグインをチェックしているのですが、以下の様な警告が出てきます。

json_encode を、wp_json_encode にしなさい」というのと、「fopenfclosefputcsv などの php のファイルシステムは使用せずに、WP_Filesystem を使用しなさい」というのが主です。

Plugin Check は WordPress.org のツールで、プラグインがディレクトリの要件を満たし、様々なベストプラク…
作者: WordPress Performance Team and Plugin Review Team
(13) 最終更新: 2週間 前
1,000以上サイトで有効化中 検証済み: 6.6.2
ダウンロード: リリース: 2011-09-04

WP_Filesystem に関しては、テーマなどで、file_get_contentsfile_put_contents などの代わりに使用するように推奨していたようですが、プラグインに関しても推奨するようになってきたのかという感じです。しかし、必ずしもすべてこの通りにしなければならないというものでもないようで、その辺りの事が、FAQ に書かれています。実際、上記の非推奨のものを使用していてトラブルになったおぼえはありません。

自分の場合には、CSV 出力関連ですが、WP_Filesystem には、fputcsv の代替えのものがありません。file_put_contents の代替えのものはあるのですがコードが煩雑になり遠回りになってしまいます。そこで、SplFileObject クラス を使用してみたところ、Plugin Check に怒られなく?なりました。

コード

$csvs は、CSV にするための配列とします。$csv_file は、フルパスを含むファイル名です。フィルターに関しては無くても動作しますが、Windows の Excel で直接開きたい場合には、必要です。

fputcsv を用いたコード

$f = fopen( $csv_file, 'w' );
stream_filter_prepend( $f, 'convert.iconv.utf-8/cp932//TRANSLIT' );
if ( $f ) {
	foreach ( $csvs as $line ) {
		fputcsv( $f, $line );
	}
}
fclose( $f );

SplFileObject クラスを用いたコード

$filter = urlencode( 'convert.iconv.utf-8/cp932//TRANSLIT' );
$file = new SplFileObject( 'php://filter/write=' . $filter . '/resource=' . $csv_file, 'a' );
foreach ( $csvs as $line ) {
	$file->fputcsv( $line );
}
$file = null;

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください