Googleのモジュールであるpagespeedや、格安の独自SSL、1日の通信量目安70GBといった、レンタルサーバー業界で常にTOPを走っている(と個人的には思っています)エックスサーバーで、PHP7が利用できるようになりました。
php7でメールフォームが動かない
そこで意気揚々とphp7に変更したら、メールフォームが動きません。
フォームの内容を受け取って、メールを送信する部分のファイルが500エラーを返します。
form.php → mail.php → thanks.php のmail.phpが500エラ-
エラーログをダウンロードしてみると(エックスサ-バ-は簡単にエラーログがダウンロード出来ます)、下記の様なエラーが返ってきていました。
[Sat Dec 19 11:30:27 2015] [error] [client XXXXXXXX] Premature end of script headers: mail.php, referer: https://sample.com/contact/form.php
上記だけだと分かりませんが、このようなエラーが出るのは、下記のいずれかが原因とのことです。
①ファイルパーミッション
②パス情報と環境
③そもそものプログラムが原因
①と②はphp5の時は問題無く動いており、php7に変更しただけなので除外。
③に関しては、php7で使用できない関数も使っていないので困りました。
mail関数のみのフォームは動いており、mb_send_mail関数が入ったフォームがエラーを出していることに気づきました。
そこで、mb_send_mail関数を、mail関数に置き換えた所、見事動きました。
他のサーバーで試してもmb_send_mailが動かなかったので、もしかするとphp7自体の不具合かも知れませんが、
エックスサーバーサポートデスクに、php7でmb_send_mailが利用できない旨を問合せました。
すると、30分もかからずに返答をいただけました。
「mb_send_mailは問題なく使用できます。頂いた内容に関しては、技術スタッフが調査をして原因がわかったらご連絡します。」とのことでした。
mb_send_mailは多く使われている関数なので、原因がわかると良いです。
何はともあれ、エックスサーバーの対応は早くて素敵です。
質問などあればお気軽に!