スキップしてメイン コンテンツに移動

投稿

VMware Player を CentOS 6.3 へインストール

仮想マシンの起動時に Could not open /dev/vmmon: No such file or directory. こんなエラーが出たら $ mv /usr/lib/vmware/modules/binary /usr/lib/vmware/modules/binary.old $ vmware-modconfig --console --install-all --appname="VMware Player" --icon="vmware-player" ってやるといいみたい。 2012/08/24 追記 上のとおりやっても、だめだった。俺の知識では、インストールできなかった。

データが保存されればいいという問題ではない

何かを勘違いしていた前任者がいた。 例によって、既に退職している。 入力された値をhtmlentities()を通し、 その結果をデータベースへ登録していた。 お陰で、他のシステムへデータ連携する仕組みを構築する際、 要らぬ変換を噛ます必要が生じた。 面倒くさいのなんのって。 というわけで、 入力値を表示したりデータベースへ登録する際は、 こんな感じで使おうよ。 <? // 文字エンコードは UTF-8 の前提 // $linkは、適切なDBLINKとする // 入力値の取得 $input_value = isset($_POST['input']) ? $_POST['input'] : ''; // INSERT文(MySQLの場合) $sql = "INSERT INTO TABLE (`val`) VALUES ('".mysql_real_escape_string($input_value, $link)."')"; // HTML出力 echo htmlentities($input_value, ENT_QUOTES, 'UTF-8', false); ?>

HTMLエンティティ

久しぶりの記事更新。 UTF-8,Shift_JIS,EUC-JPで次のコードを実行したら、それぞれ結果が異なった。 <!DOCTYPE html> <html> <head> <meta charset="それぞれのcharset"> <title>HTMLエンティティ</title> </head> <body> <form method="post"> <?php $val = isset($_POST['val']) ? $_POST['val'] : ''; ?> <p>入力値:<input type="text" name="val"  value="<?=htmlentities($val, ENT_QUOTES, 'それぞれのcharset', false)?>" /></p> <p><input type="submit" value="GO" /></p> <?php echo "ポスト:{$val}"; // XSS脆弱性があるので注意。 ?> </body> </html> で、それぞれのエンコードの結果はこれ。 ■chrome ・UTF-8 入力値:© // ソースを表示すると、&copy; ポスト:© // ソースを表示すると、© ・Shift_JIS 入力値:© // ソースを表示すると、&#169; ポスト:© // ソースを表示すると、&#169; ・EUC-JP 入力値:© // ソースを表示すると、© ポスト:© // ソースを表示すると、© ■IE ・UTF-8 入力値:© // ソースを表示...

PHPが遅いと思ったら

順不同に書いていく。 1.framework 使っているframework、社内独自のものも含め、大きすぎないか? 2.セッションファイルが削除される確率を下げる session.gc_probability = 1 session.gc_divisor = 1000 この例だと、1 / 1000 (0.1%) の確立で ( = 1000回に1回の割合で) 削除処理が走る。 3.逆引きはするな HostnameLookups Off httpd.confでオフってあるよね?

ab(apache bench)コマンド

ab(apache bench)コマンドは、apacheに付属している標準ツール。 ベンチマーク対象のホスト(webサイト)の性能測定ができる。 ■コマンド例 例:同時接続数 100 リクエスト総数 1000 対象URL http://www.hoge.jp/ # ab -c 100 -n 1000 http://www.hoge.jp/ これは、http://www.hoge.jp/に対して、同時100接続をリクエスト総数1000になるまで(同時接続100を10回)アクセスするということになる。 テストサイトなどでベーシック認証が必要なサイトに対しては、次のような感じになる。 # ab -c 100 -n 1000 -A user:password http://test.hoge.local/ ■GET URLエンコードしたクエリストリングを付けるだけなので、簡単。 http://test.hoge.local/serach.php?keyword=%e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a 上は、"あいうえお"をUTF-8でURLエンコードした例。 ■POST ちょっと面倒だができる。 非同期通信オブジェクトを使ってPOSTしたことある方ならわかると思う。 まず、POSTする項目のname属性とvalue値(textareaはタグで囲まれた要素の値)で、GETと同じ要領でクエリストリングを記述し、そいつをファイルとして保存する。 # echo -n "keyword=%e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a" > postdata で、次のようにabコマンドを実行する。 # ab -c 100 -n 1000 -p postdata -T "application/x-www-form-urlencoded" http://test.hoge.local -p オプションでPOSTデータを保存したファイルを指定し、-T オプションで content-type を指定する。 ■セッション abでアク...