投稿

プレースホルダ(place holder)はplace folderではない

データベースにSQL文を発行する際は SQLインジェクション 攻撃の対策としてプレースホルダとバインド変数を用いるのが常ですが、プレースホルダのholderをfolderと勘違いしてました。 ・・・ただそれだけ。 エクスブリッジの somfa を使うと次のような感じになる。 $sPlaceHolder = 'user_id = ?'; $aBind = array($vo->user_id); $aRecordset = $objSomfa->select('tbt_user', '*', $sPlaceHolder, $aBind); PHP用DB接続支援ライブラリ「somfa」

Google カレンダーでiCal形式を読み込むと文字化け

Googleカレンダー にical形式(*.ics)のファイルを別カレンダーとして登録したときに文字化けしていた原因が分かりました。 Googleカレンダーではレスポンスのヘッダーに文字コードを指定しないと駄目らしい。 ここ のブログで教えてもらった。 icalが置いてあるディレクトリの.htaccessに addtype text/calendar; charset=utf-8 を記述してみたりしたけど駄目だったので、PHPでさくっと作りました。 <?php header('Content-Type: text/calendar; charset=utf-8'); $sFile = $_GET['ical']; readfile($sFile); ?> このファイルをical.phpとすると http://www.hoge.com/ical.php?ical=suganuma.ics というアドレスをGoogleカレンダーに設定すると、文字化けせずicalファイルを読み込んでくれます。 Googleカレンダーは携帯でもみれるので、これで会社のスケジュールをいつでも携帯から閲覧可能に。ちなみにGoogleカレンダーの携帯用アドレスは http://www.google.com/calendar/m <2008/09/16 追記> コメントで指摘がありましたが、上のコードはあまりにセキュリティがダメダメなので各自'ics'ファイルに限定するとか、やってください。 <2009/08/28 追記> 一応備忘録のために修正版をアップ。 <?php $sFileName = $_GET['ical']; if (strpos($sFileName, '.ics') === false) { $sFileName .= '.ics'; } if (file_exists($sFileName)) { header('Content-Type: text/calendar; charset=utf-8...

英語の勉強で役立つ音声付き学習サイト

スリランカに行ったときに「英語話せたら、もっとコミュニケーションがとれる」と感じて、英語を勉強しようとみつけたサイト。 BBC Learning English 2,3日おきに英語の文章と音声をアップしてくれて、解説もある。解説も英語だけど。 まずは音声で4,5回聞いて、聞き取れなかった部分とよく分からない部分を文章で確認。比較的簡単な英語で書かれているので、聞き取りやすい方だと思う。たまに全く分からない(知らない単語ばかり)のときもあるけど、続ければ英語話せるようになるかなぁ。 最近さぼっているから、また続けたい。

【PHP】知っておくとためになるPHPコーディングのTips

塵も積もれば山となる。プログラマの小さな気遣いがシステム全体のレスポンスに大きく関ってくる。 ・・・A型の人の心にしか響かないようなこの言葉。 PHPのコーディングをするときに知っておくとよいTipsがあったので紹介します。 ここ に「echo VS print」や「ダブルクォート VS シングルクォート」など少しでもより速いコードを書くためのtipsがまとまっています。 ここ にも独自に調べて解説が書いてあるので参考に。 すぐに実践しようと思ったTipsはこんな感じ。 (PHP5以降で)staticできるメソッドはstatic宣言する(4倍速い) クラス内で定数代わりに使っている変数はconstする ループの条件文には式を書かず、事前に変数に格納する(ループのたびに計算するのを回避) 正規表現の処理は重い なるべくもとから用意されている(PHPネイティブな)関数を使う $row['id'] は $row[id] より7倍速い インクリメント(1増やす処理)はローカル変数で行ったの方が速い クラス内に10以上のメソッドがあってもパフォーマンスは変わらない 時間があれば社内のコーディングルールとしてまとめていきたい。 ・・・そんな私はもちろんA型です・・・。 名古屋でプロのSEを目指す

【PHP】特定のタグだけescape(エスケープ)しないSmarty関数

EC-CUBE の開発で、mtb_allowed_tagに登録されたタグのみ有効にし それ以外はescapeする処理を組み込んだときのメモ。 EC-CUBE開発元のロックオン開発チームブログが参考に。 ここ 。 このブログにあったのを下のように修正(正規表現とか)。 <?php /** * 許可したHtmlタグだけエスケープせず出力する。他のタグはエスケープ. * * @param  string $sValue      変換する文字列. * @param  array  $arrAllowTag 許可するHtmlタグを格納した配列. * @return string              変換した文字列. */ function smarty_modifier_htmlescape($sValue, $arrAllowTag = array()) {     $sValue = htmlspecialchars($sValue);     if (count($arrAllowTag) == 0 ) return $sValue;     foreach($arrAllowTag as $sTag) {         if (strpos($sTag, '/') === false) {             $sValue = preg_replace_callback("/&lt;\/?". $sTag . "( .*?&gt;|\/?...

【PHP】参照渡しと値渡しの速度比較

普通に考えて同じメモリ空間を利用するので「参照渡し」のほうが速いと思いますが、いったいどれくらい違うのか調べた(検索した)メモ。 ここ に実際テストコードを書いて実験した人の結果が。 「参照渡し」のほうが少し(10%ぐらい)速いらしいです。 あと参考になったのが 関数に渡した時点ではどちらも「実体」を示す「ポインタのようなもの」が渡されていて、関数内で変更された時はじめて渡した値がコピーされるという動作のようです。つまり受け取った変数を変更しなければ値渡しと参照渡しで差は無いということです。 ということ。 PHPのコードレビューをするときは 数値、文字列、配列は値渡し。 オブジェクトは参照渡し。 数値、文字列、配列は特別な事情がない限り参照渡しは使わない。 なるべくメンバ変数やオブジェクトに格納して使う。 というのを意識してますが、たまに参照渡しをがっつり書いているコードを見かけます。 理由を聞いてみると大抵「その方が速いと思いました」という答えが返ってくる。 そりゃ速いだろうけど、そのようなコードは関数(メソッド)間の「結合」が強すぎて、他のプログラムからは再利用しづらし、あとで似たようなコード(関数、メソッド)が増えてしまい全体として遅くなるし、バグも多くなる。 でも、まぁ実行速度を考えているのは良いことかな・・・。 ちゃんと動いているように見えてもコードは崩れかけのジェンガのように危なっかしいものだったりするので、コードレビューの大切さを実感する瞬間です。 軽量、軽快なPHPフレームワーク「pettiwork」

【PostgreSQL】チューニングとautovacuum

PostgreSQL8.3からデフォルトで autovacuum が有効になり、 vacuum analyze とかしなくてもよくなりましたが、8.2までの場合は気にしないといけません。 8.1と8.2の場合はautovacuumの機能を有効にします。 [PostgreSQLウォッチ]第19回 ベータ・リリースを間近に控えたPostgreSQL 8.1 - オープンソース:ITpro 7.4まではcronなどで定期的にvacuumしてあげないといけない。 PostgreSQLのチューニングに関しては、下記記事が分かりやすい。 SQL Power - Tuning PostgreSQLを遅くしている犯人はどこだ?(1/3) - @IT 今までSQL Serverでの開発が多かったで、統計情報に関しては特に気にしていませんでしたが(SQL Serverは統計情報の収集を自動でやってくれる)、統計情報についても勉強しとかないと後々はまりそう。 Microsoft SQL Server 2005 のクエリ オプティマイザが使用する統計情報   < 2011/12/22 Modified > Tweetされたので体裁を整えた。

一つのIPアドレスで複数のWebサイトを運営するapacheの設定

サーバに割り当てられたIPアドレスは一つだけど、DNSの設定で割り当てたサブドメインごとにWebサイトを構築したい場合のメモ。 例えば http://cotv.exbridge.jp/ http://hoge.exbridge.jp/ は同じIPに名前解決されるけど、それぞれ別のWebサイトとして表示したい場合、webサーバ(apache)のバーチャルホストの設定をしてあげることで実現できます。詳しくは ここ のドキュメントで。 以下設定例 NameVirtualHost *:80 <VirtualHost *:80>   DocumentRoot /www/example1   ServerName cotv.exbridge.jp   # Other directives here </VirtualHost> <VirtualHost *:80>   DocumentRoot /www/example2   ServerName hoge.exbridge.jp   # Other directives here </VirtualHost> @ITの記事も参考に。 第8回 バーチャルホストによる複数サイトの同時運用   <2009/05/19 追記> Wordpress MUなどでサブドメインとして各ユーザのブログURLを発行するシステムの場合(例えば http://se-suganuma.hoge.exbridge.jp/ とか)、ServerNameの他に ServerAlias を使って設定する。 DNSには a *.hoge 123.456.789.123 と書いておいてapacheのconfigファイルには <VirtualHost *:80>   DocumentRoot /www/example2   ServerName hoge.exbridge.jp  ...

EC-CUBEで携帯画面から注文できない

EC-CUBEの動作確認で携帯からアクセスしてみると注文ページに移動するとカートに何も入っておらず処理が続行できなくなることがあります。 その場合はapacheの設定ファイルにあるAllowOverrideをALLにする必要があります。 これはディレクトリに置いてある.htaccessを有効にするかの設定です。詳細は ここ 。 レンタルサーバなどでこれが無効になっていると、PHP側でsession.use_trans_sidをini_setするか携帯用のセッション管理を実装しないと駄目そうです。 session.use_trans_sidはCookieが使えないブラウザ(携帯など)で自動的にセッションIDを付加することができる機能を有効にします。詳しくは 前に書いた記事 を参考に。 軽量、軽快なPHPフレームワーク「pettiwork」

【HTML】携帯用のショートカットリンクで使い勝手をよくする

携帯サイトでよくある、リンクに数値が表示されていて、その番号を押すと簡単に選択できる技。 ダイレクトキーとかイージーフォーカスと呼ばれているみたいです。 これを使うためにはaタグにaccesskey属性を記述します。 aタグだけでなくinputやtextareaにも指定可能です。 詳しくはdocomoのページで。 ここ 。 softbank独自の仕様でdirectkey属性というのがありますが、docomoとauで動かないので使わないことをおすすめします。 softbankの携帯でもaccesskeyで動作するみたいです(全ての機種を試したわけではないですが)。 実際の記述はこんな感じ <a href="http://se-suganuma.blogspot.com/" accesskey="0">SE奮闘記</a>   <2009/11/27 追記> ドコモへのリンクが切れていたので修正。技術情報は下記リンクから探す [ドコモ公式]作ろうiモードコンテンツ