php

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まで上限サイズを変更していますが、必要な容量に合わせて数値は変更してください。

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関数のエラーが発生しなくなります。

まとめ

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

拡張子.htmlでphpを動作させる

.htaccessの設定により拡張子.htmlファイルでphpを動作させることが可能です。
phpを動かしたい.htmlファイルと同じディレクトリ、または上層にある.htaccessに下記内容を記述してください。

AddHandler php5-script .php .html

以上の設定で、拡張子.htmlファイル内のphpが動作します。

上記の設定で動作しない場合

下記の設定を試してください。

設定方法①

AddType application/x-httpd-php .php .html

設定方法②

AddHandler application/x-httpd-php .php .html

設定方法③

AddHandler php-script .php .html 

おそらくphp5環境下だと一番上の方法で動作すると思います。
また、拡張子.htmでphpを動作させたい場合は、.html部分を.htmに変えるか、.htmlの後に追記してください。
当たり前ですが、.htaccessが有効になっていないと設定が反映されないので、忘れずに。

【補足】さくらのレンタルサーバの場合

上記は、さくらのVPSで設定する方法でしたが、さくらのレンタルサーバでは設定方法が異なります。
さくらインターネットでVPSとレンタルサーバの両方を使用されている方も多いと思いますので、補足として記載します。

まず、FTPからレンタルサーバにアクセスします。
共有ディレクトリの「/usr/local/php/●.●/bin(/home/rs/php/●.●/bin)」の中にある「php-cgi」を、FTPのバイナリ転送モードでダウンロードします。
(※●.●はPHPバージョン名。自分がレンタルサーバで使用している同じPHPバージョンからファイルをダウンロードします。)

ダウンロードした「php-cgi」は、設定したい環境のドキュメントルートにバイナリ転送モードでアップロードし、ファイル名を「php-cgi」から「php.cgi」にリネームします。また、パーミション(属性)を705または755に設定します。

次に、「php.cgi」を設置したドキュメントルートにある「.htaccess」に下記内容を追記します。(.htaccessがない場合は新規作成する)

Action myphp-script /php.cgi
AddHandler myphp-script .php .html

以上の設定で、さくらのレンタルサーバで拡張子.htmlをphpとして動作させることができます。
気をつける点としては、FTPでダウンロード・アップロードする際に、転送モードをバイナリモードにすることです。

【参考サイト】
.htaccessで、拡張子.htmlのままPHPを実行する方法 | 海外SEO情報ブログ