役に立つかもしれないBlogお問い合わせトップITIT技術・規格プログラミングPHPPEAR::HTML_QuickForm_Controllerをmod_rewrite環境で利用する場合の注意点PEAR::HTML_QuickForm_Controllerをmod_rewrite環境で利用する場合の注意点ちょっとマニアックなテーマですが...。PEARで便利なパッケージにHTML_QuickForm_Controllerがあります。お問い合わせなどのフォームを入力画面~確認画面~完了画面までの流れを簡単に作ってくれるパッケージですね。このパッケージを.htaccessなどを利用してmod_rewriteでURL書き換えを行なう際にハマってしまう落とし穴があるので、その注意点と解決法をお話します。mod_rewriteで書き換えると、PHP_SELFも変わる.htaccessで例えばお問い合わせフォームをカテゴリー別に用意しているように見せかけるとしましょう。[L,QSA]#QSAは「クエリーをそのまま付加する」というオプションです。このように記述して「http://colori.jp/inquiry/trouble/」にアクセスしたとしましょう。すると、$_SERVER[‘PHP_SELF’」の値がどうなるかというと、「/inquery/trouble/」ではなく「/inquiry/form.php」になってしまうのです!HTML_QuickForm_ControllerはPHP_SELFで勝手にリダイレクトするさて、この仕様のままHTML_QuickForm_Controllerを使うとどうなるでしょう?実は、HTML_QuickForm_Controllerは、フォームの内容をチェックしたあと、OKであればPHP_SELFに「_qf_confirm_display=true」というクエリを付加してリダイレクトしてしまうのです。そのため、こちらとしては「http://colori.jp/inquiry/trouble/?_qf_confirm_display=true」を確認画面にしたかったにも関わらず「http://colori.jp/inquiry/form.php?_qf_confirm_display=true」がURL欄に表示されてしまうのです。すればいい?解決策は、$_SERVER[‘PHP_SELF’]をform.phpの中で、しかもHTML_QuickForm_Controllerに利用される前に書き換えてしまうことです。今回のように、mod_rewrite書き換え時にカテゴリー名を「category」というクエリに設定した場合だと、次のような処理を最初のほうに書いておくことで解決することができます。{print('パラメーターが不正です。');exit;}PEARなどのライブラリやフレームワークを利用すると、このようにブラックボックス化されたところで思わぬエラーに遭遇することがありますので、注意しましょうね。フォームの送信先を好きなURLに設定したい場合はこちらの記事もどうぞ!「PEAR::HTML_QuickForm_Controllerで途中で送信先URLを変更する方法(action)」このページをシェアするあわせて読みたい他サーバー環境からFTPでPEAR環境を移行する方法PEAR::HTTP_OAuthをインストールするPEAR::HTML_QuickForm_Controllerで途中で送信先URLを変更する方法(action)PEARのアップグレード(upgrade)に失敗したが、なんとか解決した記録。コメントをキャンセルメールアドレスが公開されることはありません。Webサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。田舎に生まれ育ち東京へ。技術はDTPデザインからプログラミングまで、インフラはCD-ROM全盛からクラウドサーバーまで、いろいろなビジネスを作り、関わってきました(知見を生かして専門学校の講師も3年ほど)。今ではAWSで月間100万PVを超えるサービスを制作・運営しながらさらなるノウハウを蓄積中。このサイトではビジネスをITコンサルタント視点で考え、感じた知見や経験が世の中のお役に立てば、という視点で無料記事として公開しています。最近は機械学習による仕事の効率化を研究中。reserved.代表者のライフハックブログ。