やるきなし

2016/02/25 11:14 / php 7.0.3-9 (cli), Cannot load Zend OPcache - it was already loaded

Debian GNU/Linux sid でタイミング的には私の環境では php7.0-cli 7.0.3-3 -> 7.0.3-5 の upgrade 付近なのだが,それ以降

% php -v
Cannot load Zend OPcache - it was already loaded
PHP 7.0.3-9 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

みたいな感じで Cannot load Zend OPcache - it was already loaded という Warning が出るようになった.かつ cron から起動される /usr/lib/php/sessionclean でも同じ Warning を吐くので,いちいち root 宛にメールが届く.

原因は何らかの拍子に以下のように /etc/php/7.0/cli/conf.d/に 2つの opcache.ini が存在するようになってしまったため.

% ls -l /etc/php/7.0/cli/conf.d/*opcache*
lrwxrwxrwx 1 root root 35 Feb 18 13:13 /etc/php/7.0/cli/conf.d/10-opcache.ini -> /etc/php/mods-available/opcache.ini
lrwxrwxrwx 1 root root 35 Feb  9 10:12 /etc/php/7.0/cli/conf.d/20-opcache.ini -> /etc/php/mods-available/opcache.ini

/var/lib/dpkg/info/php7.0-cli.postinst は以下のように 20-opcache.ini を削除するように細工されているようだが,うまく削除できなかった模様.20-opcache.ini を削除すれば解決する.

[/var/lib/dpkg/info/php7.0-cli.postinst]
    if [ -n "$2" ] && dpkg --compare-versions "$2" lt "7.0.3-2~"; then
        rm -f /etc/php/7.0/cli/conf.d/20-opcache.ini;
    fi

もしくは以下で /etc/php/7.0/cli/conf.d/ を作りなおす.

# rm -rf /etc/php/7.0/cli/conf.d/
# mkdir /etc/php/7.0/cli/conf.d/
# /var/lib/dpkg/info/php7.0-cli.postinst configure