HOME > よくある質問
様々な要因が考えられますが、まずは問題を切り分けるため、以下のことをご確認ください。
※2024/02/16追記
Gmail宛のメールが届かないという報告を多数いただいています。
Gmailのスパム対策が強化されたためと思われます。
対策などを以下ページにまとめていますのでご参照ください。
フォームから送信されたメールが迷惑メール扱いされる場合の対策
まずは配布中のものをダウンロードし、mail.phpで管理者のメールアドレスに1つのアドレスのみを設定し、一緒になっているcontact.htmlとともに同階層にアップロードし、送信してみて下さい。GmailなどのWebメールサービスを使用している場合には迷惑メールフォルダも確認ください。
※Gmailで他のメールアドレスを受信する設定にしている場合、30分~1時間ほど受信が遅れます。(これはGmail側の仕様になります)2013/9現在
■管理者のメールアドレスを2つ以上設定していませんか?
管理者のメールアドレスが2つ以上設定されている場合で送信先がGmailの場合にGmail側へのメールが届かない(迷惑メールにもなっていない)ことを確認しています。そのため管理者のメールアドレスはできる限り設置サイトのドメインと同じものにして、1つのみ設定して下さい。
■迷惑メールフォルダに入っていませんか?
Gmailやその他Webメールなどの場合、迷惑メールに入ってしまうことがありますのでご確認下さい。ただ、これはPHP側ではどうしようもありませんので、フィルタなどを設定の上対応下さい。
■設定したメールアドレスは本当に間違いないですか?
一度他のアドレス、またはGmailなどの無料メールアドレスを取得して送信テストしてみてください。
■mail.phpを開いたエディタはなんでしょうか?
メモ帳は厳禁です。ファイルが壊れます。推奨はTeraPadです。無料で使えるフリーソフトですので、ダウンロードしてインストールしてください。初めは特に設定などをいじらずデフォルトの状態でお使いください。もちろんその他のエディタやDWでも基本的にはまったく問題ありません。
■mail.phpの編集の際に必要な文字列等を削除されたりしていませんか?
mail.php内上部にも記載しておりますが、ダブルクーテーション「"」やシングルクォーテーション「'」、セミコロン「;」など、これらを削除されると動作しなくなりますので設定される際には注意下さい。
■サーバーはPHPが動作しますか?(ほとんどのレンタルサーバーでは問題ありません)
※CPIサーバーはデフォルトでは動きません(CPIについてはこちらの一番下を参考下さい)
サーバーのマニュアル等に掲載されているかと思いますのでご確認ください。
また、PHP4.3~PHP5.5(5.5以上でも基本的には問題無いかと思います)の環境で動作します。(ほとんどのレンタルサーバーでは問題無いです)
また、Sendmail機能を使っています(こちらもレンタルサーバーではほぼ問題無いです ※ただしWindowsサーバーの場合にはSendmail機能が無いことがほとんどなので使用できないとお考え下さい。一般的なレンタルサーバーはUNIX/LINUX系ですので問題ありません)
無料サーバーの場合、これらは無いことがほとんどですので基本的には動作しないと考えて下さい。
PHPが動くことを謳っている無料サーバーもありますが、実際には動かなかったという報告を複数いただいてます。
これを気にレンタルサーバーを借りてみてはいかがでしょうか。それほど高いものではありません。むしろ今の時代かなり安いです。無料サーバーであれこれ時間を無駄に使うことを考えると結果としてレンタルサーバーのほうが安いとも考えています。
参考URL:http://www.php-factory.net/server.php
■サーバーにアップロードしていますか?
ご自身のパソコン上ではそのままではメール送信はもちろんPHP自体動作しませんので、必ずサーバーにアップしてからテストしてください。
※XAMPP環境を入れてもメールの送信には別途特別な設定が必要です。
■ロリポップのコロリポプランでPHPバージョンが5.2の場合には動作しなかったとの報告がありました。
PHP5.3にすれば動作したとのことなのでお試し下さい。サーバー管理画面にて変更可能です。エックスサーバーのPHP5.2では動作しております。基本的にはそのようなことは無いはずではありますが。
■サーバーの試用期間中などはメール送信できないなどの制限がある場合もあります。※サーバーマニュアルやサーバー会社にご確認下さい。
■エックスサーバーを契約したのにメールが届かない。
エックスサーバーは無料お試し期間が10日ありますが、お試し期間中はメールの送受信ができません。入金後に送受信できるようになります。
■設置サーバーがスパムのブラックリストに登録されている
特にロリポップ系(ヘテムル含む)でこの現象を多く確認しています。ある日突然メールが届かなくなった場合はこれも疑ってみて下さい。
対策方法も含め詳しくは以下記事を参考にして下さい。
https://www.php-factory.net/cms/detail.php?id=4
■BIGLOBE(オフィスホームページサービス)の場合にはデフォルトでは送信できません
以下を参考に対応下さい。
https://www.php-factory.net/cms/detail.php?id=9
■その他以下ページのサーバーをお使いの場合には問題が出やすいです。
https://www.php-factory.net/cms/detail.php?id=6
■Google Apps(G Suite)をお使いの場合にはサーバーによってはそのメールアドレスでは受信できないようです。
転送設定や他のアドレスをご使用いただくなどで対応下さい。
(さくらサーバーで確認済)これはさくらサーバーの場合、送信先のアドレスが設置サイトのドメインと同じドメインのメールアドレスに設定している場合、
さくらサーバー上のメールサーバーを読みに行ってしまうため、送信先が見つからず送信に失敗するためと考えられます。
この場合、さくらサーバー側でもメールアドレスを作成すれば解決しますが、今度はGoogle Apps(G Suite)側に届かない状態になってしまうと思われますので根本的な解決は困難ではあります。(転送するなどしかありません)
■Return-Path(-f オプション)を指定しないと送信できない環境があります。(特にpostfixなど)
mail.phpのメール送信処理部分を以下のようにしてみて下さい。(ファイル内検索すれば見つかります)
mail($to,$subject,$adminBody,$header);
↓以下のように末尾に-f オプション(,'-f'. $to)を追記して下さい。
mail($to,$subject,$adminBody,$header,'-f'. $to);
上記記述のすぐ下あたりに自動返信メール用の記述もありますので忘れず同じように修正下さい。
mail($post_mail,$re_subject,$userBody,$reheader);
↓上記と全く同じです。
mail($post_mail,$re_subject,$userBody,$reheader,'-f'. $to);
まず大前提としまして、PHPは動作したりしなかったりという不安定なことはサーバー障害を除き絶対にありません。常に要求された処理を必ず実行します。
要するに少なくとも一度以上正常に受信できているのであれば、プログラム側は問題ないとすることができます。
※ただ、PHP側ではメールが実際に届いたかどうかまでは判断できません。一方的に送信しているだけです。
この場合、メールが届かないほとんどの理由はPHPから送信された後の工程で発生していると考えられます。
具体的には受信するメールソフト側、メールサーバー、プロバイダなどです。
ただ、経験上、メールサーバー、プロバイダの影響である可能性は低いです。
これらがもし原因だとすると、そもそも一度も送信に成功しないでしょう。
(ただしメールサーバー、プロバイダでスパム判定などで弾かれている場合には、そのロジックが分からないため絶対ではありません。)
またGmailやYahooメールなどのWebメールサービスの場合、スパムと判断される可能性もあります。こちらもそのロジックは分かりませんので、対処のしようがありません。出来る限り独自ドメインなどのメールアドレスを使用されることをおすすめします。
デフォルトの機能ではBCC送信も可能ですので、他のアドレスをBCCに設定しておくなども有効です。
問題の切り分けにもなります。
また有料版にはなりますが、CSV保存版であればメール送信とは完全に別処理でメールの送信内容と同じ内容がCSVファイルに保存されますので、
仮にメールが受信できていなくてもCSVファイルを見ることで問い合わせ内容は確認できます。
※CSVファイルには必ず保存されますので問い合わせの漏れは防げます。(CSVファイルはエクセルなどで開けます)
CSV保存版のメールフォームプログラムは以下ページになります。
http://www.php-factory.net/mail/03.php
根本的な解決とはなりませんが、最悪の事態は回避できますし、メールは届かないけどCSVには保存されているという場合、
受信側の問題だということになり、問題の切り分けができます。
また管理者宛のメールの送信元はユーザーのメールアドレスが設定されますが、
これを固定のアドレスにすることで解決できるかもしれません。
mail.phpの以下の箇所
$header="From: $post_mail\n";
↓以下のように修正してみて下さい。
$header="From: $to\n";
これで自分自身が送信元になります。
申し訳ありませんが、Windowsサーバーの場合はSendmail機能が無いことがほとんどのため、対応しておりません。LINUX系サーバーにてご利用下さい。
※一般的なレンタルサーバーはほぼLINUX(UNIX)系なので問題ありません。
特に理由が無ければWindowsサーバーを新規で借りないことを強くおすすめします。
そもそもWindowsサーバー自体少ないですが・・・。無駄な時間を大量に費やすことになる可能性があります・・・^^;。
さくらサーバの共有SSLにて確認していますが、さくらの共有サーバーの共有SSLは https://secure○○.sakura.ne.jp/○○○○.○○/のようになっています。
mail.phpのaction属性の値には現在実行中のファイルパスが自動で入るように($_SERVER['SCRIPT_NAME']で)設定していますので、本来「/○○○○.○○/mail.php」が指定されることを想定しますが、なぜかさくらの場合には、「/mail.php」が指定されてしまい、結果「You don't have permission to access」が表示されてしまい送信できないという現象が起きています。
これは「https://secure○○.sakura.ne.jp/mail.php」が指定されてことと同じになり、そこにはファイルが存在しないための結果です。
この場合、mail.phpの254行目付近の
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="POST">
を
<form action="mail.php" method="POST">
として下さい。これで解決するはずです。
その他のサーバーでは特に現在確認、報告等はありませんが、もしその他のサーバーでも同様の現象が起きた場合には、以上のことをお試し下さい。また、その旨ご連絡いただけると大変ありがたいです。
通常のURLではそのようなことは起きません。また共有SSLもさくらのような仕様となっているところは少ないと考えられます。
その他さくらサーバで確認されていること
通知先メールアドレスが2つ以上あるとエラー(Internal Server Error)になることが確認されています。
この場合、他のアドレスはBccに設定するなどで回避可能です。
また、フォーム設置先のドメインのメールアドレスをGoogle Appsで作成、管理している場合、そのメールアドレスでは受信できないようです。
※ドメインと同じメールアドレスの場合、サーバー側が自サーバー内のDNSを探しに行ってしまうためと推測されます。
この場合の対処法は分かりませんので、申し訳ございませんが他のアドレスに設定されるか、サーバー側でもメールアドレスを作成するなどでご対応下さい。
あとはファイル自体がUTF-8の場合、
BOM有りで保存してしまったなどが考えられます。
これは主にPHPファイル内に余計な文字列や空白スペースなどが入り込んでしまったことが原因である可能性が高いです。問題を切り分けるため、まずはデフォルトの状態で送信先アドレスのみを変更の上でお試し下さい。
デフォルトの状態でOKであれば、作業時に何らかの問題が発生したと推察することができます。
具体的な原因としましては、リダイレクト処理など、PHPの「header」系の関数はその前に文字列(空白や改行も含む)があってはならないルールが有ります。そのため余計な文字列があるとエラーが発生します。
デフォルトではもちろんそのようなことはありませんので、作業時に誤って入り込んでしまったと考えられます。
その他余計な文字列の混入の他にUTF-8の場合、BOMありで保存してしまった可能性もあります。
PHPファイルは必ずBOM無しで保存する必要があります。
(BOM有りで保存してしまった場合、必ず不具合が出ます)
BOMの確認、変更方法についてはこちらをご参考下さい。
問題を切り分けるため以下ご確認いただければと思います。
1,さくらサーバーの場合、2つ以上の送信先を設定するとエラー(Internal Server Error)となることが確認されています。
※実際には送信元アドレス(from)が2つ以上だとエラー(Internal Server Error)になります。
この場合、2つ目以降のメールアドレスはBCCに設定いただくなどでご対応下さい。
※BCC機能はデフォルトの機能として付いております。
※BCCであれば複数でも問題ありません。
尚、当方で把握しているのはさくらサーバーのみですが、他のサーバーでもあり得る可能性はあります。
2,送信先に設定している2つ以上のメールアドレスすべてをそれぞれ1つだけにした場合にはいずれにも正常に届くのかどうかを確認して下さい。
※受信側の問題かどうか、及びメールアドレスが間違っていないかどうかの確認。
3,根本的な部分ですが、メールアドレスの設定方法が間違っていないかどうか
ファイル内のコメントでも説明しておりますが、以下のように設定する必要があります。
$to = "aaa@abc.jp,bbb@abc.jp";
※単にカンマで区切るだけではあります。
以上のことを確認してみて下さい。
以下のページにまとめましたのでご参考ください。
フォームから送信されたメールが迷惑メール扱いされる場合の対策
最新版のプログラムではすでに修正済ですので、2020/05/08以降にダウンロードされたプログラムは無関係です。
【原因】
PHPのバージョンが7.4以降の場合、get_magic_quotes_gpc()関数が非推奨となったため、環境によってはDeprecatedエラーが表示される場合があります。
※追記:PHP8以降では廃止になったため、Fatal errorが表示されると思います。
【解決方法】
mail.phpをエディタソフトなどで開いて「get_magic_quotes_gpc()」の文字をファイル内検索して下さい。
フリー版の場合は2箇所、有料版の全機能搭載版の場合は4箇所あります。
以下のような記述です。
if(get_magic_quotes_gpc()) { $out = stripslashes($out); }
あとはその行を1行まるっと削除するだけです。削除しても機能には影響ありません。
または先頭にスラッシュ2つ「//」を付けてコメントアウトして下さい。
例 //if(get_magic_quotes_gpc()) ・・・・・
これでエラー表示が消えるはずですので確認して下さい。
get_magic_quotes_gpc()関数はmagic_quotes_gpcという設定がONかどうかチェックするためのものですが、
「magic_quotes_gpc」自体はPHP5.4で完全廃止されたため、本来は不要な記述ですが、古いバージョンでの利用も考慮し念の為に残していました。
ですので、PHP5以上であれば不要な機能なので削除して構わないのです。
フォームページ側のhtmlファイルの文字コードとメールフォームプログラムの文字コードが同じかどうか確認してみて下さい。htmlファイル側の文字コードはソース上の以下metaタグにて指定されているはずです。(以下の場合はUTF-8です。※大文字小文字は関係ありません)
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
上記が問題ない場合、サーバー側で強制的に文字コードを変換されている可能性があります。
以下ページにまとめておりますので参考の上、対処下さい。
https://www.php-factory.net/cms/detail.php?id=6
確認画面で項目名の箇所が空欄になってしまう、または必須設定した項目を入力したにも関わらず、「○○が未選択です」(本来入力欄の場合には「未入力です」と出ます)と出る場合には、2通り考えられます。
1つは単純にメールフォーム側の文字コードとプログラムの文字コードが間違っている。
この場合にはフォーム側の文字コードと同じ文字コードのファイルをダウンロードください。
2つ目はフォーム側文字コード、及びmail.php側の文字コードは間違いないにも関わらず同様の現象が発生する場合です。これはサーバー側で強制的に文字コードを変換されている可能性があります。
以下ページにまとめておりますので参考の上、対処下さい。
https://www.php-factory.net/cms/detail.php?id=6
サーバーにアップロードしていますか?
ご自身のパソコン上ではそのままではメール送信はもちろんPHP自体動作しませんので、必ずサーバーにアップしてからテストしてください。
※XAMPP環境を入れてもメールの送信には別途特別な設定が必要です。
ご利用のサーバーでPHPが動作しないことが考えられます。
無料サーバーでもPHPが使えることを謳っているところもありますが、それでも正常に動かないことを複数確認しておりますので、無料サーバーの場合は動かないと考えたほうが良いかもしれません。その他もろもろも含め、トータルで考えると有料のレンタルサーバーを借りた方が結局は無料サーバーよりも安く済むと考えています。(もちろんもろもろの事情があるのかもしれませんが・・・)
サーバー移転によってサイトのURLをどうしても変更出来ない場合には、プログラムのみレンタルサーバーにアップする方法が有効です。フォームページ側とメールフォームプログラムは同一サーバーにある必要はありませんので。action属性で絶対パスを指定すればいいだけです。
デフォルトではjavascriptにてhistorybackを行なっておりますので、ブラウザの「戻る」と同じ挙動となります。
古いFirefox(バージョン2系)などではブラウザの戻るにてデータがクリアされてしまうということがありましたが、
現在のメジャーなブラウザ(Firefox、Chrome、Safari及びIEなど)では「戻る」だけではデータはクリアされないことを確認していますので基本的には問題ないと考えられます。
※ただし、すべてのブラウザでの保証は出来かねます。
ただ、稀に必須チェックをJavascriptの特殊なライブラリなどを使って行うとデータがクリアされることがあります。(adobeのspryで確認済)
他のJSにて行うか、必須項目はPHP側でチェックを行うようにするとそのようなことは起きないかと思います。
※必須項目はmail.phpにて設定可能です。
またPHPのセッション機能などを使用している場合もクリアされることがあります。
その場合、session_start()の前に「session_cache_limiter('none');」を記述することで対処可能です。
尚、どうしても改善しない場合で完全に対応する方法としては、「戻る」を押した際にはフォームデータを再度POSTし、フォームページ側の各項目にデータを反映するという結構重めな処理が必要になります。
そのためフォームページ側もカスタマイズする必要があり、この場合には別途カスタマイズとして承ります。ただ、上記でもご説明しましたが、ほとんどのブラウザでは問題ないと考えておりますので、費用対効果を考慮の上でご検討ください。
追記:以下ページで解決方法と対策版のファイルを配布していますので、必要に応じてご利用下さい。
http://www.php-factory.net/trivia/15.php
まず項目数に上限はありません。すべて自動で取得、送信します。
(実際には容量の問題、POST数の上限もあるため無制限ではありませんが現実的には気にせずOKなレベルです)
原因は主に以下2パターン考えられます。
1,name属性の値が重複している。
フォームページのname属性の値を確認ください。特に項目数が多くなるほどそういったミスが起きやすいです。
name属性の値は name="○○" の○○の部分です。これはページ内で重複しての使用はできません。重複した場合、後のもののみが確認画面で表示され、送信されます。
2,チェックボックス、ラジオボタンの場合は、1つ以上チェックされていないと項目自体送信されません。
そのため、予めどれかをチェック済(checked)としておくか、隠し要素(ダミー要素)を埋め込んでおくということが考えられます。
隠し要素(ダミー要素)の記述例(赤字が追加する要素です)
<input type="hidden" name="性別" />
<input type="radio" name="性別" value="男" />男
<input type="radio" name="性別" value="女" />女
このようにtype="hidden"の隠し要素を直前に記述しておくことで未選択の場合でも項目が送信されます。
チェックされた場合には、そちらが優先(上書き)されますので問題ありません。
Shift_JISはPHPと相性が悪く、特に「表」、「申」、「ソ」、「ダ」などがname属性の値に含まれている場合、誤変換されたり、サーバの設定によっては円マーク(¥)が付与されることがあります。
特に誤変換はプログラム側では対応できませんので、出来る限りShift_JIS版以外を推奨します。
※これはテスト時にすぐに分かるものなので、テスト時に問題が無ければ以降も問題ありません。(起こったり起こらなかったりということは基本的にありませんし、name属性の値はそれほど頻繁に変更するもので無いと思いますので)
申し訳ございませんが、中国語やその他の言語には対応しておりません。
多言語対応版を配布しておりますので、そちらでお試し下さい。
http://www.php-factory.net/mail/multi01.php
機種依存文字などは基本的には使用不可になります。たとえば㈱(かっこ株)や①(丸1)、その他特殊な記号や特殊な漢字などは変換できずに「?」と表示されます。これはPHPプログラム上どうしようもありませんのでご了承下さい。SJIS-WINで送信する方法もありますが、Windowsに限定されるなどの理由から実装はしておりません。
ただ、一般的な機種依存文字に限りますが、以下方法にて機種依存文字を変換することで表示可能です。
必要に応じてご対応下さい。
※ただし、機種依存文字の状態で送信できるものではありませんのでご了承下さい。
■機種依存文字の変換処理追加の方法について
機種依存文字を確認画面表示時に表示可能な文字列に変換する方法です。以下手順にて修正下さい。
1,mail.phpの以下記述箇所を探して下さい(1箇所のみですので検索してみてください)
※「確認画面の入力内容出力用関数」の箇所にあります。
$key = h($key);
2,この下に以下すべてをコピペ下さい。(スペース的な都合で複数行に改行されていますが、実際は4行です。)
※全選択→コピペでOKです。
以上、これだけです。
これで確認画面表示時に「変換前の文字」が「変換後の文字」に変換され、送信メール内でも変換された状態で送信されます。(たとえば「㈱」の場合、「(株)」に変換されます。)
ただし、あくまでも上記で設定している機種依存文字のみが対象となります。
その他必要に応じてご自身で追加いただくなどでご対応下さい。
※変換前の文字と変換後の文字の順番は合わせる必要があります。
また必ずテスト送信を行って下さい。何らかの問題が発生した場合にはすぐに元に戻して下さい。
デフォルトではセキュリティを考慮し、また余計なトラブルを防止するため送信メールの内容についてもエスケープ(サニタイズ)を実施しています。
※本来は不要と思われますが、万が一html形式でメールを表示してしまった場合などを想定しています。
そのため主に英語での入力時にあることですが、
クォーテーションや&マークなどがエスケープ(サニタイズ)されてしまいますので、これを回避したい場合は以下の方法で可能です。
ただ、日本語以外のフォームの場合には基本的には多言語対応版を使用されたほうが良いです。
※多言語対応版のほうは送信されるメールではエスケープ(サニタイズ)処理を実施していません。
mail.phpの以下の箇所
※「送信メールにPOSTデータをセットする関数」の箇所です。
※1箇所しかありませんのでファイル内検索(Ctrl+F)で見つかります。
h()を削除するだけです。
基本的にはPHPファイルの場合、パーミッションの設定は必要ないサーバーが多いですが、
サーバーによってはパーミッションの設定が必要な場合があります。
詳しくはサーバーのマニュアル等をご確認ください。
たまにご質問を受けますが、 一般的なレンタルサーバーの場合、PHPはSendmailパスの設定等は基本的に必要ありません。 基本的にはすでに設定済みになっています。 ※CGI(perl)などでは必要ですが
そのままでは動きませんので解説ページを参考に修正をお願いします。
送信ボタンに画像を指定しているとそのように表示されてしまいます。自動ですべての項目を取得、表示、送信を行う仕様となっておりますため、こちらはしょうがないのですが、input type="image" ではなく、通常のinput type="submit" とし、CSSで背景画像として指定すると解決可能です。CSSでの修正が難しい場合にはカスタマイズとして1件2,000円にて対応いたします。
プログラム側でタイムゾーンは特に設定しておりませんので、設置サーバーの設定が適用されます。これは様々な環境での使用を考慮し、そのようにしております。ただ、サーバーによってはデフォルトで指定されていない、または海外サーバーのため、海外のタイムゾーンになってしまっていることがあります。
その場合には以下の1行をmail.phpの上部付近に追記して下さい。
(「必須設定 必ず設定してください」の上あたりでOKです)
上記は日本時間を使用する場合です。日本以外の場合には適宜設定ください。ただし指定できる書式('Asia/Tokyo'部分)は決まっていますので適当に設定してもダメです。海外の場合は検索して確認ください。また、自分は東京じゃなくて北海道だからと「'Asia/Hokkaido'」としてもダメですよ。。。日本は上記だけです。日本は地域によって時差はありませんよね。これでもエラー等が出る場合には遠慮無くお問い合わせください。
結論から申しますとぷららホームページサーバーでは動作しません。以下のようなエラーが出るはずです。Fatal error: Call to undefined function mb_convert_encoding() in ○○○
これは「mb_convert_encoding」関数がないよーというエラーで、
及び
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings.
も出ます。これはタイムゾーンが設定されてませんよーのエラーになります。タイムゾーンは解決可能ですが、上記mb_convert_encoding関数はどうしようもありません。そのため、ぷららでは使用不可です。ぷららにも問い合わせましたが、正式に回答をいただいてますのでご参考まで
--------------------------------------------------------
恐れながら、弊社ユーザーCGIサーバーは「mb_convert_encoding」の関数に対応をしておりません。
また、現時点で今後対応の予定はございません。
ご要望に沿えず申し訳ございませんが、ご利用可能な範囲にてユーザー
CGIをご利用くださいますよう、お願い申し上げます。
--------------------------------------------------------
mb_convert_encoding関数は文字コードを変換する関数ですが、メールフォームにかぎらずPHPプログラムでは非常に良く使われるメジャーな関数です。
Yahoo、ぷららに限らずプロバイダ系全般に言えますが、制限や特別な設定が必要だったりとトラブルが非常に多いです。
本職では無いのでしょうがない部分もありますが、プロバイダ系は基本的には動作しないものとお考えください。
なのでホームページサーバーとしては極力使うべきではありません。(と断言できます(笑)もう、ちょっと怒ってますw)
たくさんの不具合報告をいただいています。
メール本文内にURLやhtmlタグのようなものがありませんか?
それらはスパムメール(迷惑メール)の可能性が高いです。メールフォームを使用しても100%スパムを防ぐことは非常に困難です。経験上数日に1通程度など、それほど多く届くようなことは経験がありませんが、あまりにも多い場合には、必須項目を設定する、リファラチェックを「On」にするなどで減らせる可能性があります。またはメールアドレスの2重チェック版でも減らせる可能性があります。
それでも減らない場合で業務に支障が出るような状態であれば一度ご相談下さい。トークンによる認証機能や最悪の場合、ランダムな文字列を表示し、その文字列を入力させるいわゆるキャプチャ認証なども実装可能です。ただし、この場合、お問い合わせユーザーに若干ながら手間を与えてしまうことになるのでCV率に影響する可能性もあります。最後の切り札的な実装と考えるのが良いと思います。
また、こちらは有償のカスタマイズとして対応しますのでご了承下さい。現在まではそこまで深刻な状況は報告されていません。
その他迷惑メールに対してできることを以下にまとめましたのでご参考下さい。
http://www.php-factory.net/trivia/09.php
htmlタグ類はエスケープ処理を行っていますので、テキストでそのままタグが表示されるだけですのでscriptタグなどが有効になることはありません。また、メールはテキスト形式で送信されますので、その他のコードが埋め込まれたとしてもそのまま文字列として表示されるだけです。もちろんすべての環境で100%の安全を保証するものではありませんが、基本的にはそのようなリスクはほとんど無いと考えています。ただ、URLに関してはほとんどのメールソフトでは自動的にリンク設定がされてしまうのでクリックできてしまいます。分からないURLなどはクリックしないことを強くおすすめします。
ご使用に際してはあくまでもご自身の責任、判断にてお願い致します。
もちろんSSLページでの使用も可能です。あくまでもSSLはサーバー側の問題になります。PHP側は特に関係がございません。https経由でアクセスすればSSL経由で表示できます。プログラム側でhttp通信を伴うパスなどは含んでおりませんのでエラー表示も起きません。SSLの導入法などについてはこちらでは対応できませんので、ご自身で別途契約等を行って下さい。
formタグに以下属性を追加してみてください。
data-ajax="false"
あえてこれを行う人間の意図は分かりませんが(笑)、また解決したい場合のみですが、以下Javascriptをmail.phpの確認画面用HTML部のhead部分にコピペすれば対応可能です。
※ただし、戻るボタンをありえないほど素早く連打すると戻れてしまうことがあります・・・wのでご了承下さい。
<script type="text/javascript"> window.onunload = function(){}; history.forward(); </script>
ブラウザの「戻る」を完全に無効化することはできません。こちらはあくまでも戻るボタンで戻った際にページを逆に戻すという処理で実現しています。
~IE10、Firefox、Chromeにて確認していますが、すべてのブラウザが対応しているかについては分かり兼ねますので完璧な方法とは言えませんが、とりあえずはこれで十分かと思います。
確実に再送信を防ぐにはPHP側でトークンなどを利用した処理が必要になります。どうしてもこちらが必要な場合にはカスタマイズにて承ることは可能ですのでご相談下さい。
可能性として考えられるのはmail.phpをUTF-8のBOMありで保存してしまったなどがあります。必ずBOM無しで保存下さい。TeraPadの場合にはUTF-8NがBOM無しです。BOMについての詳細や変更方法については以下を参考下さい。
UTF-8使用時の注意点(BOMあり、無し)
チェックボックスはその他のname属性の値と異なり、後ろに[]がつきますが、mail.phpにて必須項目に設定する箇所では[]を取った文字列で指定下さい。
PHP側で処理する関係でname属性の値に半角スペースは使用できません。
要するに「name="名前 フリガナ"」は不可ということです。全角スペースの「name="名前 フリガナ"」はOKです。
日本語、ローマ字、全角スペース、ハイフン、アンダーバー(_)などは使用可能です。ただし、機種依存文字(㈱や①)、特殊記号、その他の言語などは使用不可です。基本的にはこのプログラムは管理者、及びユーザーが日本人であることを想定しております。
英語は可能ですが、エラーメッセージ、自動返信メールの文言等も変更する必要があります。また外国語環境での受信確認は行っておりません。(JISの文字コードで送信するため外国語環境のパソコンでは正常に受信できない可能性もあります)メール自体をUTF-8で送信する外国語に対応した多言語対応版も手元にはありますが、動作確認ができないため、配布はしておりませんが、ご自身の責任において使用いただくことを条件に無償で提供しますのでご相談下さい。
※追記) 多言語対応版も配布を開始しました。
以下ページにまとめましたのでご参考下さい。
http://www.php-factory.net/trivia/15.php
送信ボタンや戻るボタンに「input type="image"」を使用すると確認画面や送信メール内に「x」、「y」と座標が表示されてしまいます。
そのためボタンに画像を使用したい場合にはCSSにて背景画像として指定することで対応下さい。
参考までに記述例を掲載します。
もちろん外部CSSでもOKです。分かりやすいようあえてタグに直接書いています。幅や高さ、マージン、画像のパスなどは状況に合わせて変更ください。
mail.phpの以下の箇所(1箇所しかありませんので探して(検索)みてください)
$adminBody = mailToAdmin($_POST,$subject,$mailFooterDsp,$mailSignature,$encode,$confirmDsp);
赤字で示した「$mailSignature」を以下のように「""」(ダブルクォーテーション2つ)に変更して下さい。
$adminBody = mailToAdmin($_POST,$subject,$mailFooterDsp,"",$encode,$confirmDsp);
これだけでOKです。
以下ページで説明しておりますのでご参考下さい。
送信ボタンの連続クリック(連打)による多重送信を回避(防止)する
以下の記述でフォーム側の特定の項目の内容を出力することができます。
$_POST['フォーム側のname属性の値']
「フォーム側のname属性の値」とは
name="○○" の○○部分です。
たとえばフォーム側のname属性の値が「名前」であれば
$_POST['名前']
とすれば入力された名前が出力されます。
これを利用します。
mail.phpの件名の設定箇所で以下のように記述することで実現できます。
例
$subject = "【".@$_POST['名前']."】 ホームページのお問い合わせ";
この場合たとえば名前に「佐藤太郎」と入力されたら、
【佐藤太郎】 ホームページのお問い合わせ
という件名になります。
前後のドット「.」はPHP上の連結を意味します。(必須です)
先頭の@マークは万が一未選択であった場合でもNoticeエラーが出ないためのものです。
動作には影響しません。
記述がもし間違っていれば確認画面すら表示されませんので、動作確認ですぐに気付けます。
逆に正常に動作し、件名にも反映されていればOKということですね。
デフォルトではmail.phpで設定した管理者のメールアドレスがお問い合わせフォームのメール送信先、及びユーザー宛の自動返信メールの送信元アドレスとなっております。
これをユーザー宛の自動返信メールの送信元アドレスのみ変更したい場合です。
mail.php内の以下の記述を探して下さい。
※フリー版のデフォルトですと200行目付近です。(1箇所しかないのでファイル内検索すればOKです)
$reheader = userHeader($refrom_name,$to,$encode);
↓以下のように設定するだけです。
$reheader = userHeader($refrom_name,'abcde@test.jp',$encode);
$toの部分を送信元としたいメールアドレスに変更するだけです。
'abcde@test.jp'
のようにメールアドレスは必ずクォーテーションで囲んで下さい。(でないと即エラーとなります)
これで自動返信メールの送信元アドレスはここで設定したメールアドレスとなります。
※送信元アドレス(from)、及び返信先アドレス(Reply)ともこちらのアドレスが反映されます。
尚、お問合わせのメールは今までどおり管理者用のメールアドレスに送信されます。
必ず送信テスト実施して問題のないことを確認してください。
※注意 2021/10/26のアップデートにて管理者宛メールの送信元アドレスもmail.phpの送信元アドレス($from)で設定したメールアドレスになるように改修したため、2021/10/26以降にダウンロードしたものはこの修正は不要です。$fromで設定すればOKです。
管理者宛のメールはデフォルトではユーザーのメールアドレスが送信元アドレスとして設定されます。
これを特定のメールアドレスに変更する方法です。
たとえば迷惑メールに振り分けられる場合などの対策として考えられます。
修正方法
mail.phpの以下の記述を探して下さい。一箇所しかありませんのでファイル内検索すればすぐに見つかります。
$header="From: $post_mail\n";
↓以下のように変更するだけです。
$header="From: abcde@sample.jp\n";
$post_mailの部分を送信元としたいメールアドレスに変更するだけです。
これで管理者宛のメールの送信元アドレスがここで設定したアドレスとなります。
これをやっても返信先(reply)はユーザーのメールアドレスになりますので、運用上の影響はありません。
尚、「管理者宛のメールで差出人を送信者のメールアドレスにする」の設定箇所が
$userMail = 1;
となっている必要があります。
さすがにやるとは思いますが、
修正を行ったら必ず送信テストなどで問題がないことを確認して下さい。
送信メールの内容はデフォルトでは以下のようになっています。
【 お名前 】 佐藤太郎
【 電話番号 】 ●●-●●●●-●●●●
【 メールアドレス 】 ●●●●@●●.jp
これをたとえば以下のようにしたい場合や
【 お名前 】 佐藤太郎
【 電話番号 】 ●●-●●●●-●●●●
【 メールアドレス 】 ●●●●@●●.jp
以下のようにしたい場合ですね。
【 お名前 】
佐藤太郎
【 電話番号 】
●●-●●●●-●●●●
【 メールアドレス 】
●●●●@●●.jp
修正方法
mail.phpをエディタソフトなどで開き、以下の記述(関数)を探して下さい。
「送信メールにPOSTデータをセットする関数」
その関数内の以下の記述を探して下さい。
※mail.php内で一箇所しかありませんので、ファイル内検索すればすぐに見つかります。
$resArray .= "【 ".$key." 】 ".$out."\n";
"\n"がメール内での改行を意味しますので、これを追加することで実現できます。これだけです。
変更例1.
$resArray .= "【 ".$key." 】 ".$out."\n\n";
とした場合は以下となります。
──────────────────────
【 お名前 】 佐藤太郎
【 電話番号 】 ●●-●●●●-●●●●
【 メールアドレス 】 ●●●●@●●.jp
──────────────────────
変更例2.
$resArray .= "【 ".$key." 】 \n".$out."\n\n";
とした場合は以下となります。
──────────────────────
【 お名前 】
佐藤太郎
【 電話番号 】
●●-●●●●-●●●●
【 メールアドレス 】
●●●●@●●.jp
──────────────────────
尚、項目名を囲んでいる【と】も自由に変更いただけます。
例 ■お名前 など。
修正を行なったら必ずテスト送信を実施して問題のないことを確認して下さい。
PHPはhtmlなどと異なり、1文字でも記述ミスがあると動作しません。(エラーや画面真っ白など)
※そのためテスト送信ですぐに気付けます。
以上です。
スパムやいやがらせ、営業メールなどを防止したい場合などに有効です。
以下手順で導入できます。
1,mail.phpの適当な箇所(送信先設定などの上部あたりでOKです)に以下をコピペ下さい。
2,「お問い合わせ内容」の箇所を対象としたい項目のname属性の値に変更して下さい。(2箇所あるので注意!)
3,「250」の箇所が上限としたい文字数です。自由に設定下さい。(この場合、251文字以上でエラー表示となる)
4,もしUTF-8版以外を使用している場合は「UTF-8」の箇所をお使いの文字コードに変更下さい。
以上です。
日本語(全角)でも半角文字でも1文字は1文字としてカウントされます。改行は無視されます。(単純に文字数だけをカウントします)
必ずテスト送信を実施して問題のないことを確認して下さい。(上限を超えた場合の挙動も確認下さい)
結論から言ってしまうと可能です。ただこの質問への回答は性質上、とても難しいです。
どのように導入するのかにもよりますし、
人によっても出来る、出来ないがあるためです。(WPも含めたその方のスキルにも依存します)
そのため、「出来ることは出来るが、あなたが出来るかどうかまでは分からない」という回答になってしまいます。
実際にWordPressに組み込んでらっしゃる方は実際にいます。
テーマファイルに組み込んで運用されています。
ただ、最も手っ取り早いことはWordPressとは切り離して設置することです。
あえてWordPressに無理に組み込む必要はないとも思っています。
WordPressのディレクトリとは別に1つのディレクトリを作成し、そこにフォーム関連のファイルを設置すればOKです。
既存のサイトデザインを反映したい場合はWordPress側のページ(どこでもOK)のソースをまるっとコピペすればOKです。
WordPressは基本的にソース内のパスが絶対パスとなっているため設置場所(階層)を問いません。
ただこの場合、当然WordPressのテーマを編集してもフォーム側には反映されません。
それでは困る場合はWordPress側のテーマと連携させます。
方法は至って簡単です。
フォームのファイル内の最上部に以下の1行を追加すればOKです。
これでそのファイル内でWordPressタグ(テンプレートタグ)などが使えるようになります。
<?php require('../wp/wp-blog-header.php');?>
※パスは状況に応じて適宜変更下さい。(wp-blog-header.phpを読み込めばいいだけです)
※ファイルの拡張子は.phpとして下さい。(でないとPHPが動作しません)
あとは普通に「get_header();」とかを記述すればヘッダーなどを読み込めます。
個人的にはWordPressのテーマ側に直接組み込むよりも、
このほうが合理的かつ安全だと思っています。
※WP側に問題が起きた際にフォームも巻き添えを食らう可能性もありますからね。
(お問い合わせフォームなどはそれほど重要だと思いますので)
配布版のデフォルトで付いている機能で対応可能です。
name属性の値を以下のようにするだけです。
※後ろに[][ 様]をつけるだけです。
例
name="お名前[][ 様]"
name="ふりがな[][ 様]"
これで末尾に「様」が付きます。
mail.phpの以下の記述を探して下さい。1箇所しかありませんのでファイル内検索で見つかります。
if(isset($arr[$dsp_name])) $userBody = h($arr[$dsp_name]). " 様\n";
↓以下のように変更して下さい。
if(isset($arr[$dsp_name])) $userBody = 'Dear '.h($arr[$dsp_name])."\n";
これで「Dear ●●」と表示されます。
ソースコードの修正が必要になります。
以下に修正内容を記しますので試してみて下さい。
修正はあくまでもご自身の責任において行ってください。
また必ずテスト送信を行って下さい。
mail.php内以下の箇所
350行目付近にある(行数はプログラムのバージョンなどにより異なりますので以下文言で探して下さい)
//送信メールにPOSTデータをセットする関数
を探して下さい。
この関数の中の以下の箇所
if($out != "confirm_submit" && $key != "httpReferer") { を以下に if($out != "confirm_submit" && $key != "httpReferer" && $out != ''){
これで入力があった内容のみ送信されます。
mail.phpの389行目付近以下の関数の箇所(行数はプログラムのバージョンなどにより異なりますので以下文言で探して下さい)
//確認画面の入力内容出力用関数
この関数の中の以下の箇所
を以下のように上下に「//これを追加」の行を追記して下さい。(上下に1行ずつ追加してます)
これだけです。
万が一なんらかの不具合があった場合にはすぐに戻して下さい。
記述が間違っている可能性があります。一字一句間違わないようご注意下さい。
※尚、旧バージョンの場合には該当行がありませんので、2014/1/26以降配布のプログラムのみ対象となります。
【重要】2021/10/26以降にダウンロードいただいたもの(ver2.0.1以降)が対象です。それ以前のバージョンの場合はここの内容は無効です。
まず、2021/10/26のアップデートで管理者宛のメールの送信元アドレス(From)が固定のメールアドレス(mail.php内で設定している送信元メールアドレス($from="●●"))となるように改修しました。
※それまでは管理者宛メールの送信元(From)はユーザーが入力したメールアドレスとなっていました。
改修した理由はユーザーが入力したメールアドレスを送信元にしてしまうと、 「なりすまし」と判定されて メールが届かないケースが出てきたためです。 昨今はスパムに対して非常に厳しくなってきております。
ユーザーのメールアドレスを送信元にすることは、 ユーザーのメールサーバーを経由しているわけではないので、 完全に「なりすまし」なのです。
実際には特に問題ないケースが多いのですが、 メールが届かないということは確実に回避しなければならないため、 アップデートにてそのように改修しました。
利便性は若干損なわれますが、 メールが届かないよりはいいよね? という判断です。
ご理解の程お願い申し上げます。
尚、送信元(From)は固定のメールアドレスになりますが、返信先(Reply)はユーザーのメールアドレスになるので、
返信作業には影響ありません。
まずはこういったことを前提として、
その上でどうしても以前のバージョンの仕様のように送信元(From)をユーザーのメールアドレスとしたいという場合は以下の方法で可能です。
※トラブル防止のためにもクライアントのフォームで実施する場合は事前にクライアントにそういったリスクがあることを伝えたほうが無難です。
■管理者宛メールの送信元をユーザーのメールアドレスにする手順
mail.phpの以下の記述を探して下さい。1箇所しかないのでファイル内検索をすればすぐに見つかります。
$header="From: $from\n";
これを以下のように変更するだけです。
※$fromを$post_mailとするだけです。
$header="From: $post_mail\n";
これで完了です。念のためテスト送信を実施して反映されていることを確認して下さい。
ログインにはPHPの「セッション(session)」機能を使用しています。
設置サーバーでPHPの「セッション(session)」機能が有効で無い場合、本プログラムは使用不可になります。
ただ、一般的なレンタルサーバーであればまず問題とはなりません。
Yahoo(ジオシティーズ)サーバーの場合にはそのままでは使用できません。
以下ページに説明がありますのでご参考の上作業ください。
ログイン(セッション)機能使用について
※2015/6/2追記
ソフトバンクサーバーでも同様の現象が確認されました。
http://www.php-factory.net/blog/?id=76841556c809fe7fa9
まず、サーバー上のupimgフォルダを開いて見て下さい。そこでFTPソフトの「更新」を押してみて、デフォルトでindx.htmlがありますが、それ以外に.jpgなどの画像ファイルがあるかどうか確認下さい。
ある場合には単純に表示側のimgタグのパスが間違っていることが考えられます。設置によって階層構造を変えている場合に発生しやすいです。できれば配布している階層そのままで設置してみて下さい。
そこに画像ファイルが無い場合は画像がアップされていないということです。考えられることはupimgフォルダのパーミッションが間違っている(基本的にはその場合管理画面で警告が出ます)、または、サーバーのphp.iniの設定でアップロードファイルの容量制限に引っかかっている、GDライブラリがインストールされていないなどが考えられます。プログラム側で5MBに設定しても、サーバー側の設定が2MBの場合はサーバー側の設定が優先されます。特にさくらサーバーのデフォルトは2MBだったと思います。
サーバーの容量制限については以下ページで解説してますのでご確認、必要に応じて設定変更してください。
サーバーのphp.iniによるアップロードファイルの最大容量の確認と容量制限の変更
PHPのGDライブラリですが、これはPHP4.3以降標準でインストールされていますので、ほとんどのサーバーでは問題無いはずです。
ただ、サーバーによっては、デフォルトで「Off」になっている可能性もあります。
以下ページを参考に現在のphp.iniの設定を表示させ、
サーバーのphp.iniの設定確認方法
「gd」でページ内を検索してみてください。「GD Support」などがあれば動いていることになります。
逆に「gd」自体見つからない場合には「有効」にする必要があります。
php.iniの設定で
;extension=php_gd2.dll
部分の先頭のセミコロンを削除してapacheを再起動すればOKです。
php.iniの設定、変更手順などはサーバーによって違います。詳しくはマニュアル、または無いような意地悪なサーバーなら直接サーバーに問い合わせてみて下さい。
「GD」を有効にしたいのですが・・・と質問すれば回答してくれるかと思います。
バックアップ機能、またはメールでの添付機能をオンにしていれば、バックアップ機能の場合はファイル名を見て最新の日付のもの「例 Backup_20131002024103.dat(この場合2013年10月2日2時41分3秒ということ」、メール添付の場合はそのままのファイル名で単純に同じ場所(data/)に「news.dat」のファイル名で置けばOKです。その場合、念のためパーミッションを確認下さい。666等書き込み可能である必要があります。ただし、バックアップは新規投稿時のみ作成、または送信されます。もし新規投稿後にクライアント等が「編集」、「削除」などを行っていると、その変更内容は先祖返り(デグる)する可能性がありますので、必要に応じてクライアントに説明、確認等を行うのが良いかもしれません。
バックアップ、メール添付も行っていなかった場合には申し訳ありませんがデータの復旧は不可能となります。
念のためサーバー会社に問い合わせてみてもいいかもしれません。バックアップを取っている可能性があるかもしれません。
サーバー障害によるデータ全損失の場合にはメール添付機能を使用していないと当然復旧は不可となります。
この場合も念のためサーバー会社にお問い合わせください。
結論から申しますとぷららホームページサーバーでは動作しません。以下のようなエラーが出るはずです。Fatal error: Call to undefined function mb_convert_encoding() in ○○○
これは「mb_convert_encoding」関数がないよーというエラーで、
及び
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings.
も出ます。これはタイムゾーンが設定されてませんよーのエラーになります。タイムゾーンは解決可能ですが、上記mb_convert_encoding関数はどうしようもありません。そのため、ぷららでは使用不可です。ぷららにも問い合わせましたが、正式に回答をいただいてますのでご参考まで
--------------------------------------------------------
恐れながら、弊社ユーザーCGIサーバーは「mb_convert_encoding」の関数に対応をしておりません。
また、現時点で今後対応の予定はございません。
ご要望に沿えず申し訳ございませんが、ご利用可能な範囲にてユーザー
CGIをご利用くださいますよう、お願い申し上げます。
--------------------------------------------------------
mb_convert_encoding関数は文字コードを変換する関数ですが、メールフォームにかぎらずPHPプログラムでは非常に良く使われるメジャーな関数です。
Yahoo、ぷららに限らずプロバイダ系全般に言えますが、制限や特別な設定が必要だったりとトラブルが非常に多いです。
本職では無いのでしょうがない部分もありますが、プロバイダ系は基本的には動作しないものとお考えください。
なのでホームページサーバーとしては極力使うべきではありません。(と断言できます(笑)もう、ちょっと怒ってますw)
たくさんの不具合報告をいただいています。
修正アップデートを行いました。配布しているものはすでに修正済ですが、すでに導入済みのものに反映するには以下をご参考下さい。アップデート方法
IEの場合、本文入力箇所のアイコンの「戻る」ボタン、「進む」ボタンが効きません。それほど運用に影響が出るものではないかと思いますが、どうしても必要な場合にはIE以外のブラウザをご使用下さい。
admin.phpの365行目付近以下の箇所で「#comment」を適当にリネームして下さい。
$(function() {
$("#comment").cleditor({
このままだとtextareaの縦、横が狭いので、textareaタグ2箇所にcols属性とrows属性を追加して下さい。
※textareaタグは2箇所あります
例 <textarea name="comment" id="comment" cols="70" rows="15">
※数値はご自由に
管理画面で登録ボタンを押すとエラー表示される場合があります。これは主にロリポップの新機能「WAF機能」による可能性が高いです。以下ページを参考にこの機能をOFFにしてみてください。
ロリポップの新機能「WAF機能」をOFFにする
ログインには「セッション」機能を使用しています。
Yahooサーバーの場合にはそのままでは使用できません。
以下ページに説明がありますのでご参考の上作業ください。
ログイン(セッション)機能使用について
まず、サーバー上のupimgフォルダを開いて見て下さい。そこでFTPソフトの「更新」を押してみて、デフォルトでindx.htmlがありますが、それ以外に.jpgなどの画像ファイルがあるかどうか確認下さい。
ある場合には単純に表示側のimgタグのパスが間違っていることが考えられます。設置によって階層構造を変えている場合に発生しやすいです。できれば配布している階層そのままで設置してみて下さい。
そこに画像ファイルが無い場合は画像がアップされていないということです。考えられることはupimgフォルダのパーミッションが間違っている(基本的にはその場合管理画面で警告が出ます)、または、サーバーのphp.iniの設定でアップロードファイルの容量制限に引っかかっている、GDライブラリがインストールされていないなどが考えられます。プログラム側で5MBに設定しても、サーバー側の設定が2MBの場合はサーバー側の設定が優先されます。特にさくらサーバーのデフォルトは2MBだったと思います。
サーバーの容量制限については以下ページで解説してますのでご確認、必要に応じて設定変更してください。
サーバーのphp.iniによるアップロードファイルの最大容量の確認と容量制限の変更
PHPのGDライブラリですが、これはPHP4.3以降標準でインストールされていますので、ほとんどのサーバーでは問題無いはずです。
ただ、サーバーによっては、デフォルトで「Off」になっている可能性もあります。
以下ページを参考に現在のphp.iniの設定を表示させ、
サーバーのphp.iniの設定確認方法
「gd」でページ内を検索してみてください。「GD Support」などがあれば動いていることになります。
逆に「gd」自体見つからない場合には「有効」にする必要があります。
php.iniの設定で
;extension=php_gd2.dll
部分の先頭のセミコロンを削除してapacheを再起動すればOKです。
php.iniの設定、変更手順などはサーバーによって違います。詳しくはマニュアル、または無いような意地悪なサーバーなら直接サーバーに問い合わせてみて下さい。
「GD」を有効にしたいのですが・・・と質問すれば回答してくれるかと思います。
プログラム側でタイムゾーンは特に設定しておりませんので、設置サーバーの設定が適用されます。これは様々な環境での使用を考慮し、そのようにしております。ただ、サーバーによってはデフォルトで指定されていない、または海外サーバーのため、海外のタイムゾーンになってしまっていることがあります。
その場合には以下の1行をmail.phpの上部付近に追記して下さい。
(「必須設定 必ず設定してください」の上あたりでOKです)
上記は日本時間を使用する場合です。日本以外の場合には適宜設定ください。ただし指定できる書式('Asia/Tokyo'部分)は決まっていますので適当に設定してもダメです。海外の場合は検索して確認ください。また、自分は東京じゃなくて北海道だからと「'Asia/Hokkaido'」としてもダメですよ。。。日本は上記だけです。日本は地域によって時差はありませんよね。これでもエラー等が出る場合には遠慮無くお問い合わせください。
結論から申しますとぷららホームページサーバーでは動作しません。以下のようなエラーが出るはずです。Fatal error: Call to undefined function mb_convert_encoding() in ○○○
これは「mb_convert_encoding」関数がないよーというエラーで、
及び
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings.
も出ます。これはタイムゾーンが設定されてませんよーのエラーになります。タイムゾーンは解決可能ですが、上記mb_convert_encoding関数はどうしようもありません。そのため、ぷららでは使用不可です。ぷららにも問い合わせましたが、正式に回答をいただいてますのでご参考まで
--------------------------------------------------------
恐れながら、弊社ユーザーCGIサーバーは「mb_convert_encoding」の関数に対応をしておりません。
また、現時点で今後対応の予定はございません。
ご要望に沿えず申し訳ございませんが、ご利用可能な範囲にてユーザー
CGIをご利用くださいますよう、お願い申し上げます。
--------------------------------------------------------
mb_convert_encoding関数は文字コードを変換する関数ですが、メールフォームにかぎらずPHPプログラムでは非常に良く使われるメジャーな関数です。
Yahoo、ぷららに限らずプロバイダ系全般に言えますが、制限や特別な設定が必要だったりとトラブルが非常に多いです。
本職では無いのでしょうがない部分もありますが、プロバイダ系は基本的には動作しないものとお考えください。
なのでホームページサーバーとしては極力使うべきではありません。(と断言できます(笑)もう、ちょっと怒ってますw)
たくさんの不具合報告をいただいています。
アップデートで修正しましたので、あらためてダウンロードいただくか、設置中のものに反映されたい場合には最新版をダウンロードの上でgallery/admin.phpのみ差替えて下さい。
詳しい原因は分かりませんが、写真の内部情報に何らかの問題がある場合に、意図しない回転を行う場合が稀にあるようです。
※保存時の問題であるのか、ソフト等で縮小した際に発生したものかは分かりません。
可能であれば元写真(大きいままの写真)を登録いただくか、解決しない場合には、またiPhoneで撮った写真を登録することが無いのであれば回転機能自体をOFFにすることで解決可能かもしれません。
■回転機能を解除する方法
admin.phpの72行目付近以下の箇所(1箇所しかありません)
$exif_datas = exif_read_data($_FILES['upfile']['tmp_name']);
こちらの先頭にスラッシュを2つ付けてコメントアウトしてください。(無効化するということです)
//$exif_datas = exif_read_data($_FILES['upfile']['tmp_name']);
これだけです。
こちらにてお試し下さい。
2023/01/06のアップデートで改善しております。
■修正方法
function.phpの169行目の以下の箇所を探してください。
if (@get_magic_quotes_gpc()) $str = @stripslashes($str);
これを行ごとまるっと削除してください。
これだけです。これはPHP8以降で廃止になった関数です。
iframeの場合には、高さが自動で調整されるようなものではないため、微妙な高さ調整は難しいのが現状です。
その場合、ファイルにPHPのソースコードを直接埋め込むことで解決可能です。詳細は上記「既存のサイトの任意のページに直接埋め込みたい場合」を参考下さい。
記憶が定かではありませんが、たしかiframeの高さを内容に応じて調整してくれるJavascriptがあった気がします。
営業日カレンダー(Calendar01、Calendar02、Calendar03)の場合
表示するファイル内の
「▼▼▼ 任意のページに埋め込んで表示させたい場合(iframeを使わない)はここからコピペ ▼▼▼」
から
「 ▲▲▲コピペここまで▲▲▲」
までをまるっとコピーし、そのまま「 ▲▲▲コピペここまで▲▲▲」の下にまるっと貼り付けし、
1,貼り付けた側の「require_once('config.php');」の1行を削除下さい。(2重で読み込むとエラーとなります)
2,貼り付けた側の「scheduleCalendarPc($ym,$timeStamp,$copyright);」という記述を以下のように修正下さい。(コピペでOKです)※作業は一字一句間違わないよう慎重に行って下さい。
これでこれは当月と翌月が表示されるようになります。レイアウトや見た目は自由に調整下さい。
カレンダーフォームの場合(【CalendarForm01】)
まず表示用のファイル内(pc.phpなど)の以下の箇所をまるっとコピペ下さい。
<!-- ▼以下休業日、定休日テキスト箇所。すべて削除してしまってオリジナルでももちろんOKです▼ -->
から
<?php Uqa4h78r();}//著作権表記リンク無断削除禁止(削除すると全機能、または一部機能が失われます)?>
ここまでをコピーし、そのままその下にコピペ下さい。
その上で貼り付けた方の「scheduleCalenderPc($ym,$timeStamp,$copyright);」を以下にまるっと書き換えて下さい。(コピペでOKです)
翌々月(2ヶ月後)を表示したい場合には、「+1」とある2箇所を+2にすればOKです。3ヶ月後などそれ以降は同じルールでOKです。
翌月、前月のリンクをCSSで非表示にする(必要に応じて)
必要に応じてカレンダー内に表示されている翌月、前月のリンクをCSSで非表示に。
2014/11/25以降にプログラムをダウンロードされた方でこの症状が出る場合には、PHPのバージョンの問題が考えられます。祝日自動取得はPHP5.2以上である必要があります。PHP5.2以上にバージョンアップされるか、設定ファイルで自動取得をOFFにして下さい。
レスポンシブ化されているページの場合、基本的には表形式、またはリスト形式のどちらかを固定で選ぶ必要がありますが、
メディアクエリを利用することでそういったことが可能ではあります。
考え方としては、
iframeタグを2つ記述して、PC用、スマホ用を読み込んでおいて、
それぞれのiframeタグにid属性を付けておいて、
CSSで表示、非表示を切り替えるだけですね。
例
<iframe src="calendar/" width="100%" height="450" frameborder="0" scrolling="auto" id="pc"></iframe>
<iframe src="calendar/sp.php" width="100%" height="450" frameborder="0" scrolling="auto" id="sp"></iframe>
あとはCSSでdisplay:noneで制御すればOKですね。
メディアクエリについてご存知ない場合はご自身で調べてみて下さい。
/* CSS例 */ #pc{ display:block; } #sp{ display:none; } @media screen and (max-width:572px) { /* 画面サイズが572px以下はここを読み込む */ #pc{ display:none; } #sp{ display:block; } }
以上です。
設定ファイルで管理画面側の表示月数を設定可能となっていますが、複数月を一括で更新する仕様上、管理画面側の表示月数を増やすほど、1ページあたりのPOST数(項目数)も増えていきます。
ここで問題となるのがPHP5.3以降で導入されたphp.iniの「max_input_vars」で、これはPOST数の上限値です。
この「max_input_vars」はデフォルトで1000に設定されています。
そのため管理画面側の表示月数を増やしていくとこの上限値1000を超えてしまうため、
更新が反映されない状況になります。
プログラムごとに異なりますが、表示月数をおおよそ以下の値に設定すると上限値を上回ってしまう可能性が高いです。
【Calendar01】= 基本的には問題となりません。(少なくとも2~3年程度まではOKです)
【Calendar02】= おおよそ14ヶ月以上
【Calendar03】= おおよそ7ヶ月以上
そのためこの表示月数以下としていただく必要がございます。
どうしてもこの表示月数以上に設定されたい場合はサーバーのphp.iniの設定値を変更する必要があります。
サーバーのphp.iniの設定値を変更する方法については以下ページで説明しておりますのでご参考下さい。
残念ながら祝日自動取得はGoogleのサービスを利用する性質上、100%正確ではありません。
また2020年は特にイレギュラーな年であり、天皇誕生日の追加やオリンピックに合わせて祝日が多数変更されていますが、自動取得では反映されないようです。
そのため祝日用のデータファイルを直接編集することで対応いただくしか手がありません。
2020年の祝日データファイルは以下の場所にあります。
data/2020_holiday.dat
※「2020」の箇所がその年の祝日データファイルということです。(2021=2021年の祝日データファイル)
「2020_holiday.dat」をエディタソフトなどで開いていただき、
1行ごとに祝日が記述されていますので、
実際の祝日などを参考に日付を直接修正して下さい。
|HOME|事業概要|ご利用規約|運営者プロフィール|カスタマイズ・設置代行・お問い合わせ|有料サポート|プライバシーポリシー|
Copyright PHP工房. All Rights Reserved