Alpine Linux 上のPHPでiconvがエラーになるので対策しました。

Docker

AlpineベースのDockerコンテナ上で、phpからmailparseを使用した際に、以下のようなPHP Notice が表示されたので、対策してみました。

PHP Notice:  iconv(): Wrong charset, conversion from `Shift_JIS' to `UTF-8//TRANSLIT//IGNORE' is not allowed in <プログラムのパス>

どうもAlpine Linux 標準パッケージに含まれるiconvに不具合があるようです。

仕方ないので、ソースからインストールして置き換えてやることにします。Dockerfileを以下のように作り直しました。

FROM alpine:3.8
MAINTAINER Takashi Hashimoto <hashimoto@bagooon.com>
 
# Install packages
RUN apk --no-cache add \
	php7 \
	php7-fpm \
	php7-opcache \
	php7-mysqli \
	php7-pdo_mysql \
	php7-json \
	php7-openssl \
	php7-curl \
	php7-zlib \
	php7-xml \
	php7-simplexml \
	php7-phar \
	php7-intl \
	php7-dom \
	php7-xmlreader \
	php7-ctype \
	php7-mbstring \
	php7-session \
	php7-gd \
	php7-imagick \
	php7-mailparse \
	php7-iconv \
	nginx \
	supervisor \
	curl \
	python3 \
	composer \
# ↓ここから追加
    && apk add --no-cache --virtual .build-deps \
        make \
        gcc \
        g++ \
    && curl -SL http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz | tar -xz -C ~/ \
    && rm /usr/bin/iconv \
    && mv ~/libiconv-1.15 ~/libiconv \
    && ~/libiconv/configure --prefix=/usr/bin \
    && make \
    && make install \
    && rm -Rf ~/libiconv \
    && apk del .build-deps
 
ENV LD_PRELOAD /usr/bin/lib/preloadable_libiconv.so
# ↑ここまで

# Add application
RUN mkdir -p /var/www/html
WORKDIR /var/www/html
COPY html/ /var/www/html/
 
EXPOSE 80 443
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

これで無事に解決しました。

コメント

タイトルとURLをコピーしました