2015年2月28日土曜日

PHP5.4におけるhtmlspecialcharsの動作

こんばんは。
文章を書くのが苦手なので、練習するようにします。
今日の記事はPHP5.4以降におけるhtmlspecialcharsの動作です。 PHPの5.3までの動作と違いがありました。
でも一番言いたい事は、確認ってだいじだねです。

管理しているサイトのお問い合わせフォームの動作がおかしいと連絡があり対応したのですが、このときこの事を知りました。

現象

・送信者、内容などの入力項目が空欄のままお問い合わせメールを受信する。

現象の確認

早速現象を確認しようとローカル環境でお問い合わせフォームを動作させてみた。
すると、入力した内容が確認画面で表示されない。たしかにおかしい。

ソースの確認

ソースを確認すると一枚のファイルにPHPをべた書きで、しかも文字コードがSJISだったのに驚く。いまどきと思うが、結構以前から運用されていたサイトらしいので、こういうこともあるんですね。

お問い合わせの項目のソースを確認すると$_POSTに入っている項目を変数に代入して、htmlspecialcharsをあてて、代入し直してprintしていた。ざっくりこんな感じ

$name = $_POST['name'];
$name = htmlspecialchars($name, ENT_QUOTES);
print $name;

原因をツメル

echo $_POST['name'];
で、なんなくnameが表示された。とりあえずデータ渡って来ている。
htmlspecialcharsをあてた後に表示がさあれないことに気がついた。

htmlspecialcharsの仕様確認

とりあえずこちらで確認。
http://php.net/manual/ja/function.htmlspecialchars.php

phpのバージョンによって、第三引数のエンコーディングのデフォルト値が違う事が書かれていいたが釈然としない。しばらくググるとこちらのサイトにたどり着く
http://blog.tokumaru.org/2011/11/php54htmlspecialchars.html

htmlspecialcharsの第三引数を指定していないと、マルチバイト文字が表示されないことがあるとのこと。これですね。

htmlspecialcharsに第三引数を設定してなんなく修正完了。

根本的な原因を追求

htmlspecialcharsが悪さしたのは分かるが、いままで運用していたのになぜ急にこんな現象がでたのか?

サイトを運用していたサーバーのリプレースが行われ、PHPのバージョンも最新のバージョンがインストールされていた。
リプレース後にきちんとサイトの動作確認をしていなかったのですね。これが一番の原因でした。

まとめ

・PHPのバージョンが変わると、何かが起きる。 ・きちんとテストをしましょう。

2015年1月23日金曜日

[mod_rewrite] クエリーを条件にリダイレクトさせる

あるサイトの商品ページにお問い合わせフォームを追加することになったので、 そのページをhttpsで遷移するようにして、 またそれに伴いhttpでアクセスしたユーザーをhttpsにリダイレクトすることにした。 そのページを表すクエリーを条件にリダイレクトしようとしたけど、 クエリが取得できてないようで暫く悩みました。 webをうろうろしているとクエリーは %{QUERY_STRING} に入っていることを知った。 RewriteCondで条件を付けて解決。
 
    RewriteEngine on
    RewriteCond %{HTTPS} on
    RewriteCond %{QUERY_STRING} page_name
    RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

2013年6月30日日曜日

startssl

先日とあるサーバーのApacehを再起動したらhttpsで接続できなくなってかなりあせりました。 調べたらApache 2.0では $ apachectl startssl で起動する必要があるんですね。 https://httpd.apache.org/docs/2.2/ja/upgrading.html

2013年4月7日日曜日

macにmod_pythonがインストールできない

以下のようなエラーが出てmacにmod_pythonがインストールでずに途方にくれて今日で二日。 hombrewでもソースからでもインストールできない。
 
libtool: compile: specify a tag with `--tag'

apxs:Error: Command failed with rc=65536
ググるとこの手の記事がわんさか出てきていろいと試した。。 ・config_vars.mkを編集 ・./configure LIBTOOL='/usr/bin/libtool --tag=CC' ・make CC='cc' LIBTOOL_TAG='--tag=CC' どうしたら良いか分かりません(TT

2013年1月3日木曜日

Macのphpにmcryptを入れる

去年末Macを購入し、ボチボチ開発環境を整えています。 

phpにmcryptを入れるにハマりました。 というより自分の未熟さを痛感。 

こいつ一発で入るものだと思っていました。
   brew install mcrypt

これだけでは駄目で、phpizeを使うんですね。 

こちらを参考にしてうまくいきました。 感謝です。 http://atikoro.wordpress.com/2011/03/30/macosx-10-6%E3%81%AEphp%E3%81%ABmycrypt%E3%82%92%E8%BF%BD%E5%8A%A0/

2012年9月6日木曜日

Postfix の設定でハマった:Maildir形式とMbox形式

昨日Postfix&Dovecotでバーチャルメールボックスの設定を行っていたのですが、 Postfix の設定でハマってました(w

 一通り設定が終わって送受信を試したら、 ・送信は出来るが受信が出来ない 状態でした。 これでしばらく設定ファイルを見直し、でも問題ないように感じた。 エラーログを見ると
cannot open file: Is a directory
が吐き出されていた。 メールボックスの権限を確認しても問題なし。
散々時間を注ぎ込んで調べても分からん。

O氏に助けを求めたら「Maildir形式なのにMbox形式になってるんじゃない?」
と助言を頂いた。

早速を/etc/postfix/vmailbox確認。
test@hogehoge.com        hogehoge.com/test/Maildir
となっていた。

調べると、Postfix はメールボックスのパスの末尾を
  • "/"で終えると Maildir 形式、
  • "/"無しで終えると mbox 形式
で保存するようです。

早速末尾に/を入れてた。
test@hogehoge.com        hogehoge.com/test/Maildir/
そしてpostfixを再起動。

すると、今までテストで送ったメールをスルスルと受信できるようになった。
くぅ~、泣けてくる・・・

2012年9月3日月曜日

Redmineイントール後、アクセスするとエラー

VPSにRedmineを入れてみました。
インストール、設定を終えて、ブラウザでRebmineへアクセスすると下記のようなエラーが出た。

syntax error on line 10, col 2: ` encoding: utf8'

こういうの見ると、胃が痛くなる・・・

調べると、同じような症状でこまっている人がRedmine forumで質問している方がいた。
http://www.redmine.org/boards/2/topics/2154

ここには「database.yml内のパスワード設定の空白文字が原因だと思うよ」とあった。

で早速database.ymlを確認するとこうなってた。

  development:
  adapter: mysql
  database: databasename
  host: localhost
  username: databaseuser
  password:****

passwordの:と*****の間に空白が無かった。
ここに空白は作ってやったら無事に動いた。