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の:と*****の間に空白が無かった。
ここに空白は作ってやったら無事に動いた。

2012年8月26日日曜日

RSA生成でハマった

先週から、VPSを借りてLinuxサーバーの構築を始めました。
サーバー構築は初心者で分からないことだらけです。
「VPS 設定」 とかで検索すると設定の方法を書いている多くのブロガーに助けられています。


で、本題ですが、鍵を使ったSSH接続の設定が上手く行きませんでした。
手順どうりやっても、Teratermを使ってサーバーへ接続しようとすると、なぜか認証できない。

なんどやり直してもだめ。
OS再インストールして、手順どおりやってもだめ。


原因は、Teratermで発行する鍵に問題がありました。
鍵を生成するとき、「パスフレーズ」とは別に、「コメント」というフィールドがあって、そこにデフォルトで文字列が入っていました。

当初、このデフォルトの「コメント」を残して鍵を生成していたのですが、
試しにこの「コメント」を削除して、鍵を生成し、
この鍵を使ったら、サーバーへアクセスできるようになった。
これだけで、そうとうな時間を注ぎ込んでしまった(TT



この「コメント」が鍵生成にどのような意味をもたらすもの中は、わかりません。

もしかしたら「コメント」付きの鍵を受け付ける設定なんかサーバー側にあるのでしょうか?
これもわかりません。

2012年8月21日火曜日

uniqid() --- ユニークな ID を生成する

PHP5年以上さわってましたが、恥ずかしながら、uniqid() という関数を先ほど知りました。
PHP3からあったんですね(TT 

microtime()を使って自分で関数作ってました。
たぶん、中では同じようなことをやってるんだと思いますが。

 う~ん、勉強不足ですね。

2012年8月9日木曜日

2012年8月7日火曜日

Smartyで配列のダンプを表示

Smartyで配列のダンプを表示のに debug_print_var 修正子があることを知りました。
phpのprint_r的に使えて便利です。

{$hoge|@debug_print_var}

2012年4月19日木曜日

「携帯各社の絵文字デザイン統一」されるらしい

ドコモ、KDDI、沖縄セルラー電話、イー・アクセスの携帯で使用している絵文字が統一されるようですね。
この辺で差別化してさらなる価値をつけるのはもう難しいでしょうしね。

それにしても、絵文字はドコモ軸になるようです。
個人的にはauの絵文字デザインが好きですが。

http://japan.cnet.com/mobile/35016355/

2012年4月2日月曜日

sendmail.exeの設定で泥沼

Windowsローカルに開発環境を整えてました。

sendmail.exeをゴニョゴニョ設定完了してメール送信用のPHPスクリプトを走らせ、エラーもでず送信完了。
スムーズに行ったと思ったらメールが送信できていない。
まてど暮らせど受信できず。
でも、エラーはでない。
意地になって、さんざん調べ、設定ファイルをグリグリいろいろ試したが上手く行かなかったorz

それで、sendamane.exeを使うことに。
設定しはじめて、ほんの数分で送信完了。

結構ショックです。
結局、sendmail.exeの何が悪かったのか分からず、
sendmail.exeを使うことに意地になって時間を無駄にしてしまった。

2012年3月6日火曜日

Smarty バージョンアップでエラー

Smarty-2.6.26からSmarty-3.1.7にバージョンアップしたら下記のエラーが出て冷や汗。

Uncaught exception 'SmartyException' with message 'PHP5 requires you to call __construct() instead of Smarty()


拡張セットアップのクラス定義で __construct を使用するようで、


 $this->Smarty();


 parent::__construct();

に変更します。


clear_all_cache も clearAllCache へ変更必要ありなんですね。


それと、smarty3になって、
ホワイトスペースに囲まれたデリミタは、Smartyのタグとして扱わないです。

これは便利ですね。Javascript、cssが扱いやすくなります。

始めマース!

自分自身の備忘録としてブログをはじめようと思います。

それと、調べ物をして数多くの備忘録のブログに助けられているので、
このブログが誰かの助けになれば嬉しいです。

備忘録の合間に生活のなかでのちょっとつぶやきと共に
写真も挿入したいですね。

それでは、ブログ開始!