大量のデータを扱う必要があり、プラグイン「CSV Importer」を使ってみた。
2社のサーバーでテストしてみた。
・WebARENA SuiteX (以降、Wと記載)
・さくらインターネット スタンダード (以降、Sと記載)
Wでは日本語データはすべて落ちてしまい、たまたま入っていた半角数字の 10 だけが処理された。3千件超のデータの内、たった一つのデータしかインポートしなかった。
一方、Sでも同じ操作をしてみると、こちらは問題なく成功。3千件のデータも日本語も完璧にインポート完了。
さて、この違いは何だろう?
両サーバーのphp設定情報を調べてみたところ、mbstring の値に違いがあった。
[WebARENA SuiteX]
——————————————————
Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation enabled
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) version 3.7.1
mbstring extension makes use of “streamable kanji code filter and converter”, which is distributed under the GNU Lesser General Public License version 2.1.
Directive Local Value Master Value
mbstring.detect_order auto auto
mbstring.encoding_translation On On
mbstring.func_overload 0 0
mbstring.http_input auto auto
mbstring.http_output pass pass
mbstring.internal_encoding UTF-8 UTF-8
mbstring.language Japanese Japanese
mbstring.script_encoding no value no value
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value
——————————————————
[さくらインターネット スタンダード] ※正常に動作する方
——————————————————
Multibyte Support enabled
Multibyte string engine libmbfl
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) version 4.4.4
Multibyte regex (oniguruma) backtrack check On
mbstring extension makes use of “streamable kanji code filter and converter”, which is distributed under the GNU Lesser General Public License version 2.1.
Directive Local Value Master Value
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input pass pass
mbstring.http_output pass pass
mbstring.internal_encoding EUC-JP EUC-JP
mbstring.language Japanese Japanese
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value
——————————————————
WをSに合わせるように、次の内容の.htaccessファイルを設置した。
————————————
php_flag mbstring.encoding_translation OFF
php_value mbstring.http_input pass
php_value mbstring.http_output pass
————————————
mbstring.detect_orderの値をno valueで記述すると、エラー(500)が出るのでこれはやめておいた。
そのあと、WのWordPressの管理画面で、「ツール」-「CSV Importer」でファイルをアップするが、失敗。結果はそれまでと同じ。
その後、Sで成功したので、そこからデータをWordPressの「エクスポート」で取り出し、Wに「インポート」してみた。それはもちろん成功した。ただ、こんなことを毎回やってもいられない。
あれこれ調べて煮詰まった時に、ダブルクウォートで日本語の文字列を囲めばいいことがわかった。
早速、Wでそれを試したら、成功! 見事に日本語のCSVインポートデータが入った!
CSVファイルの中身はシンプルに書くと、こんな感じ。
——————————————–
csv_post_title,csv_post_post
あいうえ商会,東京都港区
——————————————–
文字列をダブルクウォートで囲うのでこうなる。
——————————————–
csv_post_title,csv_post_post
“あいうえ商会”,”東京都港区”
——————————————–
前がタイトル、後が本文として入る。
プラグイン「WP Multibyte Patch」の有効化 / 無効とは関係なく、この処理をしなければWの場合はうまくいかない。
他社のサーバーでもきっと遭遇する問題だろう。
補足として、アップロードファイルサイズの上限値も変更してみた。
—————————————————-
php_value upload_max_filesize 8M
—————————————————-
Wのデフォルト値の2MBでは不足だったので、増やしてみた。
Sの場合はデフォルトが5MBになっている。
最近のコメント