WordPressのファイルアップロード上限サイズの変更

WordPressにオリジナルテーマをアップロードしようとした際、下記のようなメッセージが表示されてインストールができない。
「本当に実行していいですか? もう一度お試しください。」

何故なのか調べてみると、php.iniで設定されているアップロードファイルの上限サイズを超えてしまったようです。
たしか、以前のWordPressで同じようにアップロードファイルの上限サイズを超えた場合には、下記のメッセージだったはずですが表示変更されたのでしょうか。
「アップロードしたファイルはphp.iniで定義されたupload_max_filesizeを超過しています。」

解決方法は、php.iniで記述されている「upload_max_filesize」の設定を変更します。
まず、php.iniがどこにあるか探すため、findコマンドでphp.iniを検索します。

[root@ ~]# find / -name php.ini

次に、php.iniを開いて「File Uploads」の項目にある「upload_max_filesize」の設定を変更します。
初期設定では、「upload_max_filesize = 2M」と記述してありますので、その行頭に;を追加してコメントアウトします。
その次の行に「upload_max_filesize = 10M」を新たに追加します。

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
;upload_max_filesize = 2M
upload_max_filesize = 10M

変更完了後、php.iniを上書き保存し、WEBサーバーを再起動させます。

[root@ ~]# service httpd restart

以上で10Mまでのファイルをアップロードできます。
今回は10Mまで上限サイズを変更していますが、必要な容量に合わせて数値は変更してください。

うるう秒挿入に際する注意喚起

2015年6月1日、さくらインターネット株式会社より「2015年7月1日の「うるう秒」挿入に際する注意喚起について」という発表がありました。概要は、下記のとおりです。

独立行政法人 情報通信研究機構より、2015年7月1日の「うるう秒」挿入について下記
のお知らせが発表されております。

▼「うるう秒」挿入のお知らせ (独立行政法人 情報通信研究機構)
http://www.nict.go.jp/press/2015/01/16-1.html

2012年7月1日に実施された「うるう秒」挿入の際、弊社で運用するサーバー及び、お客
様ご利用のサーバーにおいて、影響を及ぼす異常動作を確認いたしました。その際の、異
常動作の詳細は、下記のURLをご参照ください。

▼「うるう秒」挿入実施に伴うサービスへの影響に関するご案内(2012年7月4日)
http://www.sakura.ad.jp/news/sakurainfo/newsentry.php?id=655

2015年7月1日に実施される「うるう秒」挿入についても、同様の影響などが懸念されて
おります。弊社では、「うるう秒」挿入に際してその影響範囲を事前に調査し、必要な対
策を実施いたします。お客様におかれましても、ご利用のOSへの影響をご確認いただき、
必要に応じて対策を実施いただきますようお願いいたします。

なお、お客様にご利用いただいている仮想サーバーで、「うるう秒」挿入に起因する負
荷上昇と見られる事象が確認され他の仮想サーバーへの影響が懸念された場合には、弊社
の判断でリソースの制限や仮想サーバーの再起動を実施させていただく場合がございます
ことご了承ください。

「うるう秒」とは

そもそも「うるう秒」ってなに?という方も多いはず。

「うるう秒」は、現行の協定世界時 (UTC) において、世界時のUT1との差を調整するために追加もしくは削除される秒である。この現行方式のUTCは1972年に始まった。2012年までに実施された計25回の閏秒は、いずれも1秒追加による調整であった。

簡単にいうと、様々な理由により世界全体の時間と地球の自転にズレが生じるから1秒ほど調整するということらしいです。

「うるう秒」挿入で起きること

「うるう秒」挿入後、ネットワークを利用したコンピュータの時刻合わせに使われている「NTPサービス」などに対し、日本標準時通報サービスから「うるう秒」挿入後の正しい日本標準時を通報されます。
この日本標準時が通報された際、さまざまなシステムにおいてトラブル等が発生する懸念があるのです。
2012年7月1日に実施された「うるう秒」挿入の際、さくらインターネット株式会社の一部のサービスでは、CPU負荷の上昇などの影響があったようです。

まとめ

この件に関して、さくらインターネット株式会社では、事前に対策、トラブルが発生した場合の対応をしてくれるので大丈夫だとは思いますが、ユーザー側も念のため、利用しているサーバーや動かしているアプリケーションなどに影響がないか確認したほうが良いでしょう。

PHP5.1.0以降で発生するDATE関数エラーについて

PHPには、日時を取得するDATE関数というものがあります。
このDATE関数の簡単な使い方として、日時を取得して、指定した日付文字列で返すというものです。
例えば、

<?php echo date('Y'); ?>

とすると、4桁の数字で年が出力されます。(例:2015)
よくWebサイトのコピーライト部分に使用されており、年が変わる度にコピーライト部分の編集をする必要がなくなるので、とても有り難い関数です。

そのDATE関数を使っているWebサイトのApacheエラーログを確認したところ、下記のようなエラーが記録されていました。

[日付] [error] [client 接続元IPアドレス] PHP Warning:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in /var/www/html/ファイル名.php on line 88

原因としては、PHP5(PHP5.1.0以降)から仕様変更が行われたようで、デフォルトタイムゾーンを設定せずDATE関数を使用するとエラーが発生するようです。
重大なエラーではありませんが、Apacheのエラーログに大量に記録されたり、間違った日付を取得してしまう可能性があるため、解決するのが一番。そもそもエラーをそのままにしておくのは、良いことではありませんので。

このDATE関数のエラー解決方法は、
「PHPファイル内にdate_default_timezone_set関数を記述する方法」と、
「php.iniにdate.timezoneを設定する方法」の二通りがあります。

PHPファイル内にdate_default_timezone_set関数を設定する方法

とても簡単な方法ですが、DATE関数を使用するPHPファイル内に下記の通り記述します。

date_default_timezone_set('Asia/Tokyo');

これでDATE関数エラーは発生しなくなります。

php.iniにdate.timezoneを設定する方法

php.iniにタイムゾーンを設定することで、date_default_timezone_set関数を使わなくても、DATE関数エラーを解決することができます。

まずは、php.iniの場所を確認します。
php -i でphpinfo()と同じようにPHP情報を閲覧することができます。
また、ファイル内から指定した文字列を検索するgrepコマンドを組み合わせることで、ファイル内の必要な部分のみ表示させることができます。
では、php.iniの場所を確認するので下記のように入力します。

[root@ ~]# php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
PHP Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in Unknown on line 0

php.iniの場所が /etc/php.ini にあると確認できました。
次に、php.iniのタイムゾーン設定がどうなっているのか確認します。

[root@ ~]# php -i | grep timezone
PHP Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in Unknown on line 0
Default timezone => Asia/Tokyo
date.timezone => no value => no value

「date.timezone => no value => no value」となっていますので、date.timezoneにタイムゾーンの設定がされていないということが確認できました。
それでは、php.iniの中にあるdate.timezoneの設定を行いましょう。
まずは、php.iniを開きます。

[root@ ~]# vi /etc/php.ini

次にphp.iniの中から、下記の項目を探します。

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
;date.timezone =

「;date.timezone =」の下の行に、「date.timezone = Asia/Tokyo」と入力します。

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
;date.timezone =
date.timezone = Asia/Tokyo

php.iniの編集は、以上で終了です。編集を終了して、ファイルを上書き保存してください。
変更内容に問題ないか、チェックします。Syntax OKと表示されれば問題ありません。
また、Apacheを再起動させます。

[root@ ~]# service httpd configtest
Syntax OK
[root@ ~]# service httpd restart

以上で、DATE関数のエラーが発生しなくなります。

まとめ

簡単な解決方法ですが、参考になれば幸いです。