Contact Form 7で大きいサイズの添付ファイルが送れないエラー発生時の確認ポイント

WordPress の Contact Form 7 プラグインには添付ファイルを送れる機能がありますが、大きいサイズのファイルを添付とするとエラーが起きて送信できない場合があります。

そんな問題が起きたときに、ここを確認すれば解決するかも!というチェックポイントをまとめてみます。

Contact Form 7 の設定

まず何はともあれ Contact Form 7 自身の設定です。

何も指定していない場合、デフォルトで送信できるファイルサイズは 1MB1048576 バイト)までという制限がかかっているので、まずそのチェックに引っかかっている可能性があります。

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_sizeupload_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まで可能にするか、といったそもそもの運用ルールに気を付けることも必要ですね。

この記事を書いた人

ko31

岩手県出身、群馬県在住のフリーランスWeb系エンジニアです。
Webシステム・アプリ、Webサービス、WordPress開発等を雑多にこなしています。バンカラ応援好きの振り飛車党。
PHP / WordPress / 高校野球 / 将棋 / WordPress / ブログ / 食べること / 二児の父親

>>もっと詳しいプロフィールはこちら

お仕事のご相談・お問い合わせ

当ブログの管理人は、Gosign(ゴーサイン)という屋号でフリーランス Web エンジニアとして活動しています。
ブログの掲載内容はもちろん、Web サイト制作や Web アプリケーション開発などのご相談・ご質問がありましたら、どうぞお気軽にお問い合わせください!

合わせて読みたい記事