WordPress の Contact Form 7 プラグインには添付ファイルを送れる機能がありますが、大きいサイズのファイルを添付とするとエラーが起きて送信できない場合があります。
そんな問題が起きたときに、ここを確認すれば解決するかも!というチェックポイントをまとめてみます。
Contact Form 7 の設定
まず何はともあれ Contact Form 7 自身の設定です。
何も指定していない場合、デフォルトで送信できるファイルサイズは 1MB(1048576 バイト)までという制限がかかっているので、まずそのチェックに引っかかっている可能性があります。
Contact Form 7 の編集画面にて、ファイルのアップロード用タグのオプションに「limit
」を追加することで、その制限値を指定することができます。
(例)limit にファイルサイズ上限を指定 [file your-file limit:1048576]
limit の指定は数字だけ書けばバイト単位、kb(キロバイト)、mb(メガバイト)の単位を指定することも可能です。
(例)それぞれファイルサイズ上限を 10MB に指定する場合 [file your-file limit:10240kb] [file your-file limit:10mb]
PHP の設定
次に Web サーバ側の PHP 設定の確認です。
PHP にはファイルアップロードに影響する設定項目がいくつかありますので、そのどれかの制限に引っかかっている可能性があります。
upload_max_filesize
1ファイルあたりの最大アップロードサイズです。
post_max_size
1度のフォーム送信で送ることができる POST データの最大サイズです。
注意点として、upload_max_filesize
は1ファイルあたり、post_max_size
は1リクエストあたりの制限なので、例えばアップロードするファイルが2つあるとしたら post_max_size
は upload_max_filesize
の2倍以上の値を少なくとも指定しないといけないことになります。
memory_limit
PHP スクリプトが実行される時のメモリ使用量の上限です。
max_execution_time
PHP スクリプトが強制終了されるまでの最大時間(秒)です。
max_input_time
スクリプトが POST、GET などの入力を パースする最大時間(秒)です。
ファイルサイズが大きい場合はその分アップロードする時間がかかりますので、この設定にも気を付けておきます。
max_file_uploads
1リクエストで同時にアップロードできるファイルの最大数です。
設定例
使っているサーバ環境によって設定できる方法は異なると思いますが、php.ini
や .htaccess
で設定する設定サンプルを記載しておきます。
まず、php.ini の場合です。
; メモリ使用量の上限 memory_limit = 256M ; POST データの最大サイズ post_max_size = 200M ; 1ファイルあたりの最大サイズ upload_max_filesize = 10M ; スクリプト終了までの最大時間(秒) php_value max_execution_time 600 ; 入力をパースするまでの最大時間(秒) php_value max_input_time 600 ; アップロードできるファイル最大数 php_value max_file_uploads = 20
続いて、.htaccess の場合です。
# メモリ使用量の上限 php_value memory_limit 256M # POST データの最大サイズ php_value post_max_size 200M # 1ファイルあたりの最大サイズ php_value upload_max_filesize 10M # スクリプト終了までの最大時間(秒) max_execution_time = 600 # 入力をパースするまでの最大時間(秒) max_input_time = 600 # アップロードできるファイル最大数 max_file_uploads = 20
SMTP サーバの設定
その他、なかなか気が付かないところで、SMTP サーバ(メールサーバ)によって添付ファイルのサイズ制限がかかっている場合があります。
例えば、Postfix を使っている場合です。
まず、コンソールから下記コマンドで添付ファイルの最大サイズを確認してみます。
$ postconf message_size_limit message_size_limit = 10240000
上記の場合、10MB の制限がかかっていることになるので、設定ファイルの /etc/postfix/main.cf
を編集して制限値を変更します。
$ sudo vi /etc/postfix/main.cf message_size_limit = 10240000 ↓ # 20MBに変更 message_size_limit = 20480000
変更した設定をリロードして反映させます。
$ sudo service postfix reload
まとめ
以上の設定を確認することで、たいていのケースは問題が解決されるかと思います。
ちなみにあまり大きなサイズの添付ファイルをメールで送るのは、相手によっては迷惑をかけたり、送信先のセキュリティ環境ではじかれたりする場合もあります。
添付ファイルは何MBまで可能にするか、といったそもそもの運用ルールに気を付けることも必要ですね。