2010年1月8日金曜日

PHP: session.use_trans_sid = 1 のバグ

携帯用サイトで session.use_trans_sid = 1 にしてセッションIDを URL に付けるようにしたのですがたまにリンクがおかしくなる現象に遭遇しました。

具体的には、<a href="abc.php?SID=xxxxxx"> となるべきところが <a href="abc.php"?SID=xxxxxx> とセッションIDが終端の " の後ろに付いてしまうというものです。

そこで下記のプログラムを走らせてみたところ見事に再現したので、まぁ PHP のバグだろうなぁと思っております。

■ソース
<?php
ini_set( 'session.use_cookies', '0' );
ini_set( 'session.use_trans_sid', '1' );
ini_set( 'session.use_only_cookies', '0');
session_start( );
for ( $i = 0; $i < 1000; ++ $i )
{
?>
<a href="test.php?test=<?php echo $i; ?>"><?php echo $i; ?></a><br />
<?php
}
?>

■結果
<a href="test.php?test=0&SSID=edttcli7iqip5vnsqu8a0mgvl4">0</a><br />
<a href="test.php?test=1&SSID=edttcli7iqip5vnsqu8a0mgvl4">1</a><br />
中略
<a href="test.php?test=99&SSID=edttcli7iqip5vnsqu8a0mgvl4">99</a><br />
<a href="test.php?test=100"?SSID=edttcli7iqip5vnsqu8a0mgvl4>100</a><br />

どうも、タグの中で <?php ?> を使った場合に発生する現象のように思えたので下記のように書き換えてやったところ、問題が発生しなくなりました。

■ソース
<?php
ini_set( 'session.use_cookies', '0' );
ini_set( 'session.use_trans_sid', '1' );
ini_set( 'session.use_only_cookies', '0');
session_start( );
for ( $i = 0; $i < 1000; ++ $i )
{
$s = '<a href="test.php?test="' . $i . '">';
?>
<?php echo $s; ?>"><?php echo $i; ?></a><br />
<?php
}
?>

2009年6月25日木曜日

Visual Studio 2008 が固まる

保守派の私は Visual Studio 2003 を使っていたのですが、さすがに古くてまずかなぁと思い Visual Studio 2008 を入れてみました。

とりあえず新規作成で HTML ファイルを作成、「デザイン」ボタンを押してソース表示からデザイン表示に切り換えようとしたら固まった><;

ウムム…即ググって見たけど同じ症状で困って質問している人はいたけどレスはついていない><;

予感としては IE7 を入れていないせいなのかもしれない…

2009年6月22日月曜日

Submissionポート(587)対応

お客様から、ご利用頂いているサーバーの SMTP に接続できなくなったと問い合わせが入りました。

telnet 出すら繋がらないとのことなので、早速試してみると特に問題なく繋がります。「う~ん、こりゃプロバイダーが Port 25 をブロックしたな!」と調べてみると案の定…

で、どうしたものかとひと思案… SSL/TSL を使えばいいんだけど XMail をバージョンアップすると docomo の RFC 違反に引っかかる><;かといって、拾ってきたパッチ宛バージョンを使うのもなんか不安…

ほんじゃ、ファイアウォールの NAT を使って Port 587 を Port 25 に変換するかとネットスクリーンの設定をいじりはじめたのですが、ちょっと気になってググって見ると、XMail 複数ポートに対応してるじゃないか!

1. XMailCFG を開く
2. 環境設定をクリック
3. XMailCFG環境設定をクリック
4. SMTP ポート(変更注意!!)に「0.0.0.0:25 0.0.0.0:587」と入れる
5. 環境を保存をクリック
6. 完了

いやはや、SMTPポート変更機能が XMail環境ではなく XMailCFG環境設定にあるとは思いもしませんでした^^;

2009年5月15日金曜日

Oracleの文字列比較

Oracleの固定長文字列比較でちょっとはまったのでメモ書き。

通常、固定長の文字列(CHAR型やリテラル)を比較する場合には、長い方に長さを合わせて不足分にスペースを埋めてから比較します。

一方、左辺、右辺のどちらかが可変長の場合には補完は行わずにそのまま比較します。

CREATE TABLE HOGE ( C_CLASS CHAR(4) );

INSERT INTO HOGE(C_CLASS) VALUES ('PC');

SELECT * FROM HOGE C_CLASS = 'PC';

上記のSQLですがそのまま流すとちゃんとレコードを見つけてきます。ところが、これをプリペアードすると途端に見つけてくれなくなる!

最初は PDO のバグか?と思っていたのですがよくよく調べてみるとなんとOracleはプリぺーアドステートメントのパラメーターに与えたリテラルは固定長文字列(CHAR)ではなく可変長文字列(VARCHAR2)として扱うのだそうです@@

右辺が可変長になってしまったので補完が行われず = が偽を返してしまったわけです><;

まったく、Oracleってやつは…

2009年4月23日木曜日

UltimateDefrag

Norton Speed Disk はあまり使われていないファイルをHDDの内側に配置してくれたりしてかなりお気に入りのデフラグツールだったのですが、2003バージョンは古すぎて Vista では使えないらしいです><;

Norton System Works の最新版を購入しようかな?と思っていたのですがググっていたら UltimateDefrag というフリーソフトが見つかりました。ちょっと怪しげですが 日本語化パッチ もありました。

早速 Vista にて使ってみたのですが C: ドライブに対するデフラグは問題あるようでなんか変な名前のファイルを移動しようとしたところで延々とアクセスを繰り返します。一晩放置したところ処理は終わっていましたが半分くらいのファイルが元の位置に残ってしまっていました…

今朝、仕事に出る前にXPが入っているノートPC上で動かして来たのでどうなっているか楽しみです。

2009年4月18日土曜日

ステートメントといっても一気に処理できるわけではない

最近のプログラマーは高級言語から入るのでCPUがどういう手順で動いているのかわからないみたいです。

while ( fscanf( fp, "%d", &x[i ++]) != EOF );

このプログラムでは i には読み込んだ値数 +1 が格納されて終わりますが、この説明の際に 「i は fscanf が値を返した後にインクリメントされる」と主張する方が複数いました@@

fsanf( … ) を1つの処理としてとらえているんですね・・・でも、実際には引数を評価する処理は、順次行われてゆくわけなんですが、それを切り離して考えられないようです。

こういうプログラマーが下記のような構文に出合った時にどう解釈するのかが楽しみではあります。

while ( fscanf( fp, "%d %d", &x[i ++], &x[i ++] ) != EOF );

2009年4月11日土曜日

Optiplex 760

先日 Dell の営業マンが来まして VMware をさんざん勧めてゆきました。Dell が正式サポートしたのかぁ。それならテストサーバー用に VMware ESXi を使おうと思い発注、届いていたのですが忙しくて放置してありました。

オーダーした時に頼んだのは「VMware ESXi 上で CentOS を動かしたい。CPU Core 2 Quad Q9650, Memory 8GB, HDD 1TBx2」でした。

やっと時間ができたので開梱、まずは起動してBIOS画面を確認。お!BIOS設定画面がXVGA表示だ!しかもマウスが使える!で、RAIDの設定はと・・・あれ?RAIDの設定がない!速攻 Dell に問い合わせたところ Optioplex 760 はハードウェアRAIDはサポートしていないとのこと。ってことは Dell のマシンは SATA でも ESXi が動くんだ~なんて思いながら ESXi を DVD からブート、すると、例画面でストップ!

いろいろ調べたけどやっぱし SATA じゃ無理、RAID があれば動くケースが多いらしい。

おいおい、営業マンがきて VMware 勧めるからそれ用のマシン頼んだのに動かないってどういうこと?

仕方なく CentOS を入れて、その上で VMware を動かすことに・・・

CentOS5.3 x64
先日出たばかりの CentOS5.3 をインストールしようと DVD から起動、なんと X が起動するところでブラックアウト><;

CentOS5.2 x64
5.3 はあきらめて 5.2 をインストール、こちらはすんなりインストール完了。(何か足りない気はしていたのだが・・・)

#vi /etc/sysconfig/network-script/ifc[TAB] といつもの如く入れるが ifcfg-eth0 がない!

ぎゃ~~~!NICを認識できないんだ~。ソースインストールすればよいらしいがそれは嫌!
ということで、とりあえず中断・・・