2008年02月06日
AMFPHPで文字化け
AMFPHPからUTF-8で出力されるはずなのに、Flex側で文字化け。PHPからの出力では、文字化けが発生していないので、AMFPHP側を疑うと、gateway.phpでいらない文字コード変換をしている事が判明。
//Read above large note for explanation of charset handling
//The main contributor (Patrick Mineault) is French,
//so don't be afraid if he forgot to turn off iconv by default!
$gateway->setCharsetHandler("utf8_decode", "ISO-8859-1", "ISO-8859-1");
127行目のsetCharsetHandlerをコメントアウトして、無事に解決。DBも、PHPの内部コードもUTF-8の場合は、この一文をコメントアウトすべしのようだ。
2008年01月23日
PHPでの日付処理
CodeZine:PHPにおける日付と時刻の混乱(ユリウス日, PEAR Date, DateTime, エポックタイムスタンプ)
PHP5で、DateTime型などが追加されたりしたが、厳密な日付処理は骨が折れるようだ。特に、歴史上の日付や未来へ向けたシミュレーション時の日付管理は、気をつけなければならないようだ。グレゴリ暦とユリウス暦の切り替えのネタなどは、興味深い。明治政府は、本当にトリッキー。
2007年12月19日
PHP4でXML解析
cl.pocari.org - xml 文章を配列やオブジェクトにしてくれる PEAR::XML_Serializer
PHP5では、内部ライブラリに同じようなものが入っているらしい。
2007年09月22日
createdb で文字コードを指定
PostgreSQLのcreatedbで文字コードを指定する方法
$ createdb hogehoge -E UTF-8
2007年09月17日
PEAR::MDB2
【PHP TIPS】 53. まだ、PEAR::DBをお使いの方へ:ITpro
PHPからDBを使うときにはPEAR::DBをお使いの方もまだたくさんいらっしゃると思います。しかし、PEAR::DBのマニュアルにも「This package been superseded by MDB2 but is still maintained for bugs and security fixes」(このパッケージの代わりにMDB2の使用が推奨されますが、バグの修正、セキュリティフィックスは引き続き行われます。)と書かれているとおり、今後はPEAR::MDB2をお使いになることをお奨めいたします。
ということらしい。便利なメソッドも用意されていているようだ。
2006年09月21日
EclipseでPHP
EclipseでPHPを開発するためのプラグイン。
2006年06月21日
PostGISの便利さ
ここギコ!: GoogleMapsと連動したいなら幾何データ型よりPostGIS
PostGISの便利さについて簡潔にまとめられている。
ある1点から半径rの円内に該当するデータを検索したい さらにその検索結果を、中心点からの距離でソートしたい
といった地図系の実装だとよくあるqueryをselect一発でかけるらしい。ある案件で、PostGISをいじる予定なので、予習としてこのエントリーは良かった。
2006年02月21日
NucleusでPodcast
NucleusでPodcastするためのプラグイン。RSS2.0の中に、mp3ファイルへのリンクなどを埋め込んでくれるようになる。
2006年02月15日
mod_rewrite
URLで直接引数を指定する方法、たとえば
http://www.kalium.net/portfolio/2006
というようなURL中の2006をPHPなどに引数として渡す、つまり、
http://www.kalium.net/portfolio.php?year=2006
と言う様に渡す方法は以下の通り。
Apacheに mod_rewriteを導入し、以下の様に設定を記述する。
RewriteEngine on RewriteRule ^/portfolio/([0-9A-Za-z]+) /portfolio.php?year=$1 [L]
これによって、クリーンなURLを記述することができ、パーマリンクをきれいに記述できる。これを組み合わせると、Flashのある状態へのパーマリンクもきれいに記述できる。
2006年02月10日
気象情報XMLデータ配信
新生(?)Livedoorが、日本の気象情報のXML配信を開始した。
livedoor: お天気Webサービス仕様 - Weather Hacks - 天気情報
お天気Webサービス仕様お天気Webサービス(Livedoor Weather Web Service / LWWS)は、現在全国142カ所の今日・明日・あさっての天気予報・予想気温と都道府県の天気概況情報を提供しています。
利権関係が絡み、一般に無料で開放されていなかった情報領域が開放されたことになる。Livedoorだからできたのか、それとも業界内で気運が高まったのか。こういったことを地道にやってくれる企業になることを期待したいです。
ちなみに、アメリカでは省庁が公開している。
2005年12月01日
PHPのセキュリティ
Amazon.co.jp:PHPサイバーテロの技法〓攻撃と防御の実際: 本
こういったネタ、気になりますね。
2005年09月01日
PuikiWikiのユーザ認証について
メモメモ。
2005年08月26日
mojavi
Website of Kyoichi Ozaki - Mojavi 3
メモメモ。
2005年04月23日
PHPで色表現変換
Color Handles and manages color mixing.
HSV<->RGB変換などのメソッドが含まれている。
2005年02月19日
Nucleusで複数blogを表示
備忘メモ:Nucleusの使い方 (財団法人サークルクラブ協会)
●NP_MultiBlogs 2.2(※1.Blog表示系、8.ブロック作成系) 複数Weblogや複数カテゴリーに対応。特定アイテム(トピックス)を固定表示したり、個別アイテムに前後のページへのリンクをつけたりすることが可能。複数のブログやカテゴリーを選択して表示することや、ランダム表示することも可能。
これで、Nucleusでやりたいことが実現できそうだ。
2004年05月08日
dotprojectで作業時間を計る
dotprojectなどのプロジェクト管理ソフトは、プロジェクト策定だけではなくて、作業日報的に作業時間、内容などのログを残せるという点でも良いと思う。例えば、同じな内容の仕事が再び舞い込んできたときに、作業時間を予測しやすいし、見積もりも出しやすい。
と言って、一日の終わりに実作業時間を思い起こしながら記入するのは、結構面倒くさい。dotprojectには、ログの記入画面にストップウォッチ機能があり、簡単に入力することができる。作業開始時に、"start"を押し、作業が終わったら"stop"を押す。これで、作業時間を測定できる。ただし、JavaScriptで実装されているようなので、ブラウザを閉じちゃうと無効になっちゃうので注意が必要。ここらへんをDBに一時登録してくれたら結構便利なのだが。
2004年05月06日
dotprojectのガントチャートを日本語化
dotprojectを使ってスケジュール管理と行きたいのだが、プロジェクト管理ソフトを使う目的のひとつのガントチャートが文字化けして使え物にならない。日本語化のメモを記しておく。
True Typeフォントをサーバにアップする。
Mac/WIndows/LinuxのTrueType日本語フォントを用意する。LinuxではX Windowをインストールすると、/usr/X11R6/lib/X11/fonts/TrueType/にkochi-gothic.ttfなどのフリーのフォントがインストールされているケースもある。
もし、フォントが無い場合は手持ちのフォントをサーバの任意のディレクトリ( ex. dotproject/lib/jpgraph/fonts/ )にアップする。なお、この際、フォントの使用範囲が使用許諾書で定められている場合があるので、公開する場合などは注意。フリーの日本語フォントに関しては、ここで紹介されている「Fモトヤシーダ1」もオススメ。
jpgraph.phpを修正
dotprojectのガントチャートは、JpGraphというフリーのグラフ作成ライブラリを使用して生成されている。JpGraphはデフォルトでは、日本語などに対応していないので修正する必要がある。
dotproject/lib/jpgraph/src/jpgraph.php を以下の箇所を修正していく。
TrueTypeフォントの場所を指定する // Directory for jpGraph TTF fonts. Must end with '/' // Note: The fonts must follow the naming conventions as // used by the supplied TTF fonts in JpGraph. //サーバに予めあるファイルを使う場合 //DEFINE("TTF_DIR","/usr/X11R6/lib/X11/fonts/truetype/"); //ユーザがアップしたフォントを使う場合など DEFINE("TTF_DIR","/home/httpd/html/dotproject/lib/jpgraph/fonts/");
//Definitions for internal font, old style // (Only defined here to be able to generate an error mesage // when used) DEFINE("FONT0",99); // Deprecated from 1.2 DEFINE("FONT1",98); // Deprecated from 1.2 DEFINE("FONT1_BOLD",97); // Deprecated from 1.2 DEFINE("FONT2",96); // Deprecated from 1.2 DEFINE("FONT2_BOLD",95); // Deprecated from 1.2 //以下を追加 // Japanese Font Setting DEFINE("FF_JPN_START", 40); DEFINE("FF_JPN_END", 50); DEFINE("FF_GOTHIC", 40); DEFINE("FF_MICHO", 50); DEFINE("FF_JPN_DEFAULT", FF_GOTHIC); DEFINE("TF_JPN_DEFAULT", "japanfont.ttc"); // ここで使用したいフォントを指定するテキストの出力時にUTF-8に文字コードを変換するようにする。
function StrokeText($x,$y,$txt,$dir=0,$paragraph_align="left",$debug=false) { $x = round($x); $y = round($y); // 以下を追加 // For Japanese if (preg_match("/".mb_detect_encoding($txt)."/","ascii,SJIS,EUC-JP,JIS,UTF-8")){ $txt = mb_convert_encoding($txt, "UTF-8", "auto"); if ($this->font_family < FF_JPN_START || $this->font_family > FF_JPN_END) { $this->font_family = FF_JPN_DEFAULT; } if (preg_match("/\./", TF_JPN_DEFAULT)) { $this->font_file = TTF_DIR . TF_JPN_DEFAULT; } else { $this->font_file = TTF_DIR . TF_JPN_DEFAULT . '.ttf'; } } //ここまで // Do special language encoding if( LANGUAGE_CYRILLIC ) $txt = LanguageConv::ToCyrillic($txt);※2004.05.11 一部修正しました。
gantt.phpを修正する
ガントチャートを出力しているのは、dotproject/modules/tasks/gantt.phpというファイルに含まれてる関数である。このファイルを修正。
for($i = 0; $i < count(@$gantt_arr); $i ++ ) { $a = $gantt_arr[$i][0]; $level = $gantt_arr[$i][1]; if($hide_task_groups) $level = 0; //$name = strlen( utf8_decode($a["task_name"]) ) > 25 ? substr( utf8_decode($a["task_name"]), 0, 22 ).'...' : utf8_decode($a["task_name"]) ; //コメントアウト or 削除 $name = $a["task_name"] ; //追加 $start = substr($a["task_start_date"], 0, 10); $end = substr($a["task_end_date"], 0, 10); $progress = $a["task_percent_complete"]; $flags = ($a["task_milestone"]?"m":"");gantt.phpではUTF-8に変換せずに、jpgraph.phpで変換するようにする。
以上の作業で日本語が文字化けしないようになる。
つまり、文字化けを回避するには、1.日本語フォントを指定する、2.文字コード変換をmb_string関数を用いて正確にする、という2点を解決することでできる。実は、phpcollabの日本語テクニックを参考にさせていただいている。
なお、各メッセージの日本語化は、dotprojectのサイトで配布されている日本語化キットで行うことができる。
投稿者 araken : 14:24 | コメント (15) | トラックバック
2004年02月02日
PostgreSQL on OSX
Marc Liyanage - Software - Mac OS X Packages - PostgreSQLにOSXでインストールできるPostgreSQLのパッケージがある。インストール方法も掲載されている。結構便利。
2004年01月05日
.htaccessでキャッシュを無効化する
PHPでアプリケーションを開発していて困るのが、キャッシュの管理。特に、DBが更新された後のデータ表示など。基本的に、PHPの出力の最初の方で、header関数でキャッシュを無効化するようにしていするのだが、全ページに渡ると結構面倒くさい。ということで、.htaccessでディレクトリ内に入っているファイル全部に対して反映するようにする。
<Files ~ "\.(html|php)$">
Header add Pragma "no-cache"
Header set Cache-Control no-cache
</Files>
こう記述すると、*.htmlと*.phpなファイルのキャッシュを無効にするように、ブラウザに指定できる。
投稿者 araken : 16:30 | コメント (1) | トラックバック
2003年11月14日
PHPのテンプレートについて資料
PHPでのテンプレート利用にまとめてある発表資料。PHPカンファレンス2003で発表されたもの。
beginner-template.pdf (application/pdf Object)
2003年08月07日
PostgreSQLで文字コードを指定してDBの作成
$ createdb -E EUC_JP foobar
投稿者 araken : 14:18
2003年08月04日
ページ生成時にキャッシュをクリアする
PHP-MLでのやりとり
http://ns1.php.gr.jp/php-jp/archives/msg09924.html
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 日付が過去
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// 常に修正されている
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
投稿者 araken : 17:22
2003年05月23日
.htaccessでphpの設定を変える方法
http://www.php.net/manual/ja/configuration.changes.php
.htaccessの設定を有効にするには、httpd.conf側で.htaccessでの設定のオーバライドを許可する必要がある。
.htaccessでphp.iniの設定をオーバライドできるのは、ApacheがPHPをモジュールとして実行している時である。
CGIとして実行している場合は、php.iniの設定のみが有効。
投稿者 araken : 00:39