LoginSignup
0
1

More than 5 years have passed since last update.

blockinfileとPHP7の組み合わせに注意

Posted at

TL;DR

PHP7 からは、/etc/php.ini 等の設定ファイルで '#' から始まるコメントを受け付けなくなりました。blockinfile で設定を変える場合は、マーカーを明示しましょう。

Ansible Playbook で blockinfile を使う

CentOS 6/7 上で php71 を使う環境を作るにあたり、ansible で remi / webtatic を切り替えてプロビジョニングできるような playbook を作ろうとしています。

php-fpm から読み込まれる www.conf に日本語設定を追加しようと、以下のように設定しました。ansible-2.3 から使えるようになった、blockinfile ディレクティブを使っています。

roles/php-fpm/tasks/main.yml
---
- name: roles/php-fpm/tasks/main.yml
  command: echo
(略)
- name: php-fpm.d/www.conf - add settings for use in Japan
  blockinfile:
    dest: "{{ PHP_INI_DIR }}/php-fpm.d/www.conf"
    insertafter:  '^;php_value[opcache.file_cache]'
    block: |
      ; Default values for use in Japan.
      php_value[date.timezone] = {{ TIME_ZONE }}
      php_value[mbstring.language] = Japanese
  become: yes
  notify: restart {{ PHP_FPM_SERVICE }}

これにより、/etc/php-fpm.d/www.conf の末尾に以下のブロックが追加されます。

$ tail -5 /etc/php-fpm.d/www.conf
# BEGIN ANSIBLE MANAGED BLOCK
; Default values for use in Japan.
php_value[date.timezone] = Asia/Tokyo
php_value[mbstring.language] = Japanese
# END ANSIBLE MANAGED BLOCK

エラー発生

ところが、この後 restart php71-php-fpm でエラーでコケます。

RUNNING HANDLER [php-fpm : restart php71-php-fpm] ******************************
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Unable to restart service php71-php-fpm: Job for php71-php-fpm.service failed because the control process exited with error code. See \"systemctl status php71-php-fpm.service\" and \"journalctl -xe\" for details.\n"}

原因は、どうも php-fpm(というか php)が、 '#' から始まるコメントを許していないらしいこと。'#' で始まる2行を取るとうまくいきます。

PHP マニュアルの設定ファイルに書いてありました。

7.0.0 ハッシュ記号 (#) をコメントとみなさないようになりました。

解決策

playbook で開始/終了マーカーを明示するようにしたらうまくいきました。

    marker: "; {mark} ANSIBLE MANAGED BLOCK"

これで流したファイルは、以下のようになり、ます。

$ sudo tail -5 /etc/php-fpm.d/www.conf
; BEGIN ANSIBLE MANAGED BLOCK
; Default values for use in Japan.
php_value[date.timezone] = Asia/Tokyo
php_value[mbstring.language] = Japanese
; END ANSIBLE MANAGED BLOCK
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1