2016/06/20 13:29:19

Dokcerの公式wordpressコンテナのphp.iniの場所


Warning: Attempt to read property "post_excerpt" on null in /home/kpkyvkzp/public_html/unskilled.site/wp-content/themes/unskilled2/content-header-eyecatch.php on line 5
目次(クリックするとジャンプします)
  • 1:wordpressコンテナのphp.ini
  • 2:php.iniの用意
  • 2.1:雛形の違い
  • 2.2:コンテナにphp.iniを入れる
  • 3:補足・ハマったポイント
  • 4:まとめ

wordpressコンテナのphp.ini

Dokcerの公式wordpressコンテナではphp.iniは最初からは存在せず、使うなら自分で用意する必要があります。

しかしながら、php.iniを1から作る必要はありません。雛形が用意されています。1から作ったら日が暮れてしまいますよね。

雛形はphpがインストールされた場所に入っているはずです。

php.iniの用意

wordpressコンテナではphpは/usr/src/phpにインストールされています。

このディレクトリに

php.ini-development
php.ini-production

という2つの雛形が入っています。名前からわかるようにphp.ini-developmentは開発時用に推奨されるもの、php.ini-productionは本番時に推奨されるもののようです。

雛形の違い

どう違うのがdiffコマンドで比べてみました。

diff php.ini-development php.ini-production

86c86
< ; This is php.ini-development INI file.
---
> ; This is php.ini-production INI file.
449c449
< error_reporting = E_ALL
---
> error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
466c466
< display_errors = On
---
> display_errors = Off
477c477
< display_startup_errors = On
---
> display_startup_errors = Off
521c521
< track_errors = On
---
> track_errors = Off
1244c1244
< mysqlnd.collect_memory_statistics = On
---
> mysqlnd.collect_memory_statistics = Off

主にエラー関係の設定が違うようですね。

設定項目 意味 development production
error_reporting エラー出力レベル E_ALL E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors エラー出力 On Off
display_startup_errors PHPの起動時エラー表示 On Off
track_errors $php_errormsgへの代入 On Off
mysqlnd.collect_memory_statistics メモリ統計情報の収集 On Off

php.ini-developmentでは開発時のデバック用途のため、エラーを表示したりトレースしたりできるようになっています。

ただエラー情報の外部公開はなにかと危険です。思わぬところから攻撃の緒を与えてしまうかもしれません。

本番公開時にはエラー情報を表示させないphp.ini-productionを使った方が良いと思います。

コンテナにphp.iniを入れる

wordpressコンテナでphp.iniを使いたい場合はdockerfileの書き換えするのもいいですが、dokcer cpコマンドでコンテナから雛形を引き抜き、ホスト側で編集して、再度docker cpコマンドで所定の位置に入れる方法が一時的用途としては楽です。

コンテナの中に/bin/bashで入ってみて確認しましたが、、公式のwordpressコンテナのphpのローディングディレクトリは/usr/local/etc/php/になっているかと思います。

root@97c64239e1e9:/# php -r 'phpinfo();' | grep php.ini
Configuration File (php.ini) Path => /usr/local/etc/php

ホストで編集したphp.iniをここにぶち込んでコンテナを再起動するとphp.iniが読み込まれるはずです。

補足・ハマったポイント

wordpressで画像なり記事のxmlなりをアップロード(インポート)する際に、php.iniを入れていない場合は初期値が2MBなので、少し大きめなファイルはアップロードできない可能性が出てきます。

php.iniで上限容量を指定してあげる必要が出てくるかもしれません。ちなみに上限容量の設定項目は

post_max_size 
upload_max_filesize

意味は以下です。

設定項目 意味 初期値
upload_max_filesize アップロード上限容量 2MB
post_max_size POSTデータの上限容量 8MB

ファイルアップロードは2つの項目で制限されています。upload_max_filesizeはまんまファイルの容量の上限、post_max_sizeは一回のセッションでPOSTデータとして受け取れる上限です。

upload_max_filesizeを大きくする場合、post_max_sizeの制限を越してしまうとpost_max_sizeの制限に引っかかります。

upload_max_filesize10MBにしても、post_max_size8MBに引っかかるということですね。

ですので、このupload_max_filesizeを変更する場合はpost_max_sizeupload_max_filesizeより少し大きめにしておくことをオススメします。

指定の方法は、単位はbyteBは省略です。以下の様にしています。

//10MBの指定
upload_max_filesize = 10M
post_max_size        = 12M

//1GBの指定
upload_max_filesize = 1000M
post_max_size        = 1050M

まとめ

  • wordpressコンテナではphp.iniは初期状態では用意されていない
  • しかし雛形が開発用・本番用の2種存在する
  • 違いはエラー関係の表示が主
  • docker cpコマンドを使うとコンテナ・ホスト間のファイルのやり取りが楽
  • アップロードファイルの上限容量はupload_max_filesizeとpost_max_sizeで変更できる