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の場合は、この一文をコメントアウトすべしのようだ。

投稿者 araken : 23:45 | トラックバック

2008年01月23日

PHPでの日付処理

CodeZine:PHPにおける日付と時刻の混乱(ユリウス日, PEAR Date, DateTime, エポックタイムスタンプ)

PHP5で、DateTime型などが追加されたりしたが、厳密な日付処理は骨が折れるようだ。特に、歴史上の日付や未来へ向けたシミュレーション時の日付管理は、気をつけなければならないようだ。グレゴリ暦とユリウス暦の切り替えのネタなどは、興味深い。明治政府は、本当にトリッキー。

投稿者 araken : 10:35 | トラックバック

2007年12月19日

PHP4でXML解析

cl.pocari.org - xml 文章を配列やオブジェクトにしてくれる PEAR::XML_Serializer

XML_Serializer - めも帖

PHP5では、内部ライブラリに同じようなものが入っているらしい。

投稿者 araken : 09:05 | トラックバック

2007年09月22日

createdb で文字コードを指定

PostgreSQLのcreatedbで文字コードを指定する方法


$ createdb hogehoge -E UTF-8

投稿者 araken : 18:45 | トラックバック

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をお使いになることをお奨めいたします。

ということらしい。便利なメソッドも用意されていているようだ。

投稿者 araken : 11:45 | トラックバック

2006年09月21日

EclipseでPHP

PHPEclipse.net

EclipseでPHPを開発するためのプラグイン。

投稿者 araken : 10:35 | トラックバック

2006年06月21日

PostGISの便利さ

ここギコ!: GoogleMapsと連動したいなら幾何データ型よりPostGIS

PostGISの便利さについて簡潔にまとめられている。

ある1点から半径rの円内に該当するデータを検索したい さらにその検索結果を、中心点からの距離でソートしたい

といった地図系の実装だとよくあるqueryをselect一発でかけるらしい。ある案件で、PostGISをいじる予定なので、予習としてこのエントリーは良かった。

投稿者 araken : 08:31 | トラックバック

2006年02月21日

NucleusでPodcast

podcast [Wiki:NucleusCMS]

NucleusでPodcastするためのプラグイン。RSS2.0の中に、mp3ファイルへのリンクなどを埋め込んでくれるようになる。

投稿者 araken : 02:56 | トラックバック

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のある状態へのパーマリンクもきれいに記述できる。

投稿者 araken : 16:30 | トラックバック

2006年02月10日

気象情報XMLデータ配信

Via! Daisy-weblog: そしてライブドア。

新生(?)Livedoorが、日本の気象情報のXML配信を開始した。

livedoor: お天気Webサービス仕様 - Weather Hacks - 天気情報

お天気Webサービス仕様

お天気Webサービス(Livedoor Weather Web Service / LWWS)は、現在全国142カ所の今日・明日・あさっての天気予報・予想気温と都道府県の天気概況情報を提供しています。

利権関係が絡み、一般に無料で開放されていなかった情報領域が開放されたことになる。Livedoorだからできたのか、それとも業界内で気運が高まったのか。こういったことを地道にやってくれる企業になることを期待したいです。

ちなみに、アメリカでは省庁が公開している。

投稿者 araken : 10:38 | トラックバック

2005年12月01日

PHPのセキュリティ

Amazon.co.jp:PHPサイバーテロの技法〓攻撃と防御の実際: 本

こういったネタ、気になりますね。

投稿者 araken : 22:24 | トラックバック

2005年09月01日

PuikiWikiのユーザ認証について

質問箱/308 - PukiWiki.org

メモメモ。

投稿者 araken : 01:04 | トラックバック

2005年08月26日

mojavi

Website of Kyoichi Ozaki - Mojavi 3

メモメモ。

投稿者 araken : 13:20 | トラックバック

2005年04月23日

PHPで色表現変換

Docs For Class Image_Color

Color Handles and manages color mixing.

HSV<->RGB変換などのメソッドが含まれている。

投稿者 araken : 17:17 | トラックバック

2005年02月19日

Nucleusで複数blogを表示

備忘メモ:Nucleusの使い方 (財団法人サークルクラブ協会)

●NP_MultiBlogs 2.2(※1.Blog表示系、8.ブロック作成系)  複数Weblogや複数カテゴリーに対応。特定アイテム(トピックス)を固定表示したり、個別アイテムに前後のページへのリンクをつけたりすることが可能。複数のブログやカテゴリーを選択して表示することや、ランダム表示することも可能。

これで、Nucleusでやりたいことが実現できそうだ。

投稿者 araken : 01:43 | トラックバック

2004年05月08日

dotprojectで作業時間を計る

dotprojectなどのプロジェクト管理ソフトは、プロジェクト策定だけではなくて、作業日報的に作業時間、内容などのログを残せるという点でも良いと思う。例えば、同じな内容の仕事が再び舞い込んできたときに、作業時間を予測しやすいし、見積もりも出しやすい。

と言って、一日の終わりに実作業時間を思い起こしながら記入するのは、結構面倒くさい。dotprojectには、ログの記入画面にストップウォッチ機能があり、簡単に入力することができる。作業開始時に、"start"を押し、作業が終わったら"stop"を押す。これで、作業時間を測定できる。ただし、JavaScriptで実装されているようなので、ブラウザを閉じちゃうと無効になっちゃうので注意が必要。ここらへんをDBに一時登録してくれたら結構便利なのだが。

stopwatch.gif

投稿者 araken : 15:37 | トラックバック

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のパッケージがある。インストール方法も掲載されている。結構便利。

投稿者 araken : 21:56 | トラックバック

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)

投稿者 araken : 15:05 | トラックバック

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