PHP で、変数を連想配列(ハッシュ)のキーにしたい。

PHP で、
<?php

$items
[$item->id] = $item->name;

?>
のようにアクセスしたい。しかしこれではなぜかうまくいかなかった。Perl だとフツーに
<?php

$items
{$item->id} = $item->name;

?>
というように書けるのに。いったい何がいけないんだろう? 「PHP 連想配列」でググると、だいたいこんな感じの例が出てくる。
<?php

$fruits
= array(
           
'apple'  => 'りんご',
           
'orange' => 'みかん',
           
'grape'  => 'ぶどう'
         
);

?>
わかったよ、連想配列の宣言と同時に配列変数に値を入れる方法はわんさか出てくるのだ、しかし俺は動的に値を入れたいんだ。配列のキー(添字)を変数にして。たとえば次のように。
PHP で、
<?php

$items
[$item->id] = $item->name;

?>
のようにアクセスしたい。しかしこれではなぜかうまくいかなかった。Perl だとフツーに
<?php

$items
{$item->id} = $item->name;

?>
というように書けるのに。いったい何がいけないんだろう? 「PHP 連想配列」でググると、だいたいこんな感じの例が出てくる。
<?php

$fruits
= array(
           
'apple'  => 'りんご',
           
'orange' => 'みかん',
           
'grape'  => 'ぶどう'
         
);

?>
わかったよ、連想配列の宣言と同時に配列変数に値を入れる方法はわんさか出てくるのだ、しかし俺は動的に値を入れたいんだ。配列のキー(添字)を変数にして。たとえば次のように。
Posted on 2007-01-15 by yas |

AJAX プログラミングの注意点

筆者が AJAX に触れたのはもう1年くらい前であって、そのあとはしばし AJAX から離れていた。それから最近また AJAX する機会があって、この PerlTips を見ながらコードを書いているが、苦労した点というのは1年も経つとやはり忘れてしまうらしい。それでもこの PerlTips を眺めていたら解決できたこともあったのでそれを注意点としてまとめてみた。おそらく誰もが陥りやすいワナだろう。
筆者が AJAX に触れたのはもう1年くらい前であって、そのあとはしばし AJAX から離れていた。それから最近また AJAX する機会があって、この PerlTips を見ながらコードを書いているが、苦労した点というのは1年も経つとやはり忘れてしまうらしい。それでもこの PerlTips を眺めていたら解決できたこともあったのでそれを注意点としてまとめてみた。おそらく誰もが陥りやすいワナだろう。
Posted on 2007-01-12 by yas |

OpenSSL で、秘密鍵と公開鍵が入ったファイルから公開鍵だけ取り出す方法

OpenSSL で CA.sh や CA.pl を使って自分で認証局を立てて自己署名した証明書を発行すると、証明書と秘密鍵が一緒に入った以下のようなファイルが作られる。ファイル名が同じであれば、拡張子つまりファイルフォーマットが違うだけでどれも内容は同じだ。 (クライアント)
  • cert-clt.pem
  • cert-clt.der
  • cert-clt.p12
(サーバ)
  • cert-srv.pem
  • cert-srv.der
  • cert-srv.p12
(認証局)
  • root.pem
  • root.der
  • root.p12
ここで、秘密鍵と公開鍵が入った cert-srv.pem のファイルから公開鍵だけ取り出すには、以下のコマンドを実行ればよい。 openssl rsa -pubout -outform PEM -in cert-srv.pem -out public-srv.pem 実行するとパスフレーズを聞いてくるので、秘密鍵のパスフレーズを入力する。すると、新規に public-srv.pem ファイルが作成されて cert-srv.pem に入っていた公開鍵だけが出力される。
OpenSSL で CA.sh や CA.pl を使って自分で認証局を立てて自己署名した証明書を発行すると、証明書と秘密鍵が一緒に入った以下のようなファイルが作られる。ファイル名が同じであれば、拡張子つまりファイルフォーマットが違うだけでどれも内容は同じだ。 (クライアント)
  • cert-clt.pem
  • cert-clt.der
  • cert-clt.p12
(サーバ)
  • cert-srv.pem
  • cert-srv.der
  • cert-srv.p12
(認証局)
  • root.pem
  • root.der
  • root.p12
ここで、秘密鍵と公開鍵が入った cert-srv.pem のファイルから公開鍵だけ取り出すには、以下のコマンドを実行ればよい。 openssl rsa -pubout -outform PEM -in cert-srv.pem -out public-srv.pem 実行するとパスフレーズを聞いてくるので、秘密鍵のパスフレーズを入力する。すると、新規に public-srv.pem ファイルが作成されて cert-srv.pem に入っていた公開鍵だけが出力される。

AJAX/JavaScript で、画像(image)を重ねる方法

AJAX で画面をライブアップデートして、地図の上の画像の位置が逐次変化するようなユースケースを考える。画像(image)を動的に生成して処理するには、
var icon = document.createElement('img');
として、
var icons = document.createElement('div');
の icons コレクションの中に追加すればよい。そして icons オブジェクトは HTML 中に宣言してある
に追加する。 しかしこれをずっと繰り返すと古い画像が地図の上に残ったままになる。そこで update メソッドの最初の方で
for(i = 0; i < icons.childNodes.length; i++) {
    try {
        icons.removeChild(icons.childNodes[i]);
    } catch(e) {
    }
}
という処理を入れて、icons ノードに含まれる個々の icon オブジェクト(image オブジェクト)を削除してあげればよい。
AJAX で画面をライブアップデートして、地図の上の画像の位置が逐次変化するようなユースケースを考える。画像(image)を動的に生成して処理するには、
var icon = document.createElement('img');
として、
var icons = document.createElement('div');
の icons コレクションの中に追加すればよい。そして icons オブジェクトは HTML 中に宣言してある
に追加する。 しかしこれをずっと繰り返すと古い画像が地図の上に残ったままになる。そこで update メソッドの最初の方で
for(i = 0; i < icons.childNodes.length; i++) {
    try {
        icons.removeChild(icons.childNodes[i]);
    } catch(e) {
    }
}
という処理を入れて、icons ノードに含まれる個々の icon オブジェクト(image オブジェクト)を削除してあげればよい。
Posted on 2007-01-06 by yas |