Alpine Linux の php で CP932 な CSV をストリームフィルタを使って読む

<?php
$filter = urlencode('convert.iconv.cp932/utf-8');
$filename = urlencode('sjis.csv');
$fp = fopen("php://filter/read=$filter/resource=$filename", 'r');
// Warning: fopen(): unable to create or locate filter "convert.iconv.cp932/utf-8"
while ($csv = fgetcsv($fp)) {
    print_r($csv);
}

Alpine Linux の iconv だと cp932 がダメなようです。

shift_jis なら通りますが・・

<?php
$filter = urlencode('convert.iconv.shift_jis/utf-8');
$filename = urlencode('sjis.csv');
$fp = fopen("php://filter/read=$filter/resource=$filename", 'r');
while ($csv = fgetcsv($fp)) {
    // Warning: fgetcsv(): iconv stream filter ("shift_jis"=>"utf-8"): invalid multibyte sequence
    print_r($csv);
}

cp932 の CSV を読みたいのです。


それっぽいワードでぐぐるとと下記がでてきました。

https://github.com/docker-library/php/issues/240#issuecomment-305038173

次のようなワークアラウンドがあるようです。

RUN apk add --no-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing gnu-libiconv
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php