カテゴリー: Computer

PHPで巨大ファイル

PHPで巨大なファイルを取り扱うことが出来るか下調べしました。PHP内部的にPHPストリームと言う仕組でファイル等を取り扱う事が可能になっているのですが、ファイルヘのアクセスに符号付き32bit整数を使っています。このため扱えるファイルサイズが2GBに制限されています。

タイムリーな事にPHP-INTERNALメールリストでPHPストリームのコードを書いたWez氏がint64_t対応を行う旨の投稿をしていました。待っていれば2^63-1バイトまでのファイルが取り扱える様になるようです。

HTTP Response Splitting Attack: PHPの場合

ここの日記にも書いたHTTP Response Splitting Attackの対策がPHPでも取られるようです。

header(“bad-header: This is bad header\r\n but having CR/LF in a haeder is allowed by the standard in some case.”);

上記のヘッダが送られた際に\r\nを自動削除可能な設定が追加されます。ただし、\r\nがヘッダ中に現れる事は標準で認められいいますが、パッチを適用したPHPの場合は拒否&警告エラー(php.ini設定のデフォルト値になる)が発生します。もちろん「不正なユーザ入力対策は万全」というサイト向けではそのままCR/LFを送ることも可能です。次のPHPリリース時には取り込まれていると思いますが、仕様が変わっているかも知れないのでChangeLogなどで確認する必要があります。

未対策のアプリがあるサーバはエラーハンドラ(必ず作ってますよね。PHPプログラマの方!)で処理するだけです。普通にエラー処理しているPHPアプリケーションならPHP本体にパッチを当てるだけで完了です。

すごいペンギン

kazさんの日記で見つけたのですがEmperorPenguinEmpire 〜ペンギンのフリーWEB素材サイト〜はすごいですね。

同じ日の日記にtDialyもb2evolutionと同じように集中型ブラックリストを構築する動きがあると書いてありますね。メールのみ無くてオーブンプロキシを対象にしたブラックリストが必要になって来ていると思います。tDialyでrbldnsを使ったIPブラックリストが出来たら早速利用させていただきます。

# rbldnsならb2evolutionをカスタマイズして取り込むのも簡単!

RFID報道の大間違いを正す

ITMediaに総論:RFID報道の大間違いを正すと言う記事が掲載されています。RFIDについて時々日記に書いていましたがこの記事は必読と思います。

RFIDとは全く異なりますがBluetooth話題になっているころには色々ありましたね。Bluetooth対応洗濯機・レンジ・冷蔵庫は2年以上前のニュースです。今頃Bluetoothが溢れているハズだったのですが、先日買った東芝の最新型の洗濯乾燥機にはBluetoothは付いてませんでした。

tDiaryローカル・キャッシュ・システム

著作権法は引用を正式に認めているので、引用の程度を越えなければ法律上は問題無いはずです。音楽に関しても同様だったと思います。(何小節まで同じメロディーでもOK、と言うような感じだったと思います)

引用は法律上問題無く行えるといっても、ハイパーリンク先のページが無くなると後でページを読んでも意味が通じない事がしばしばあるのでtDiaryローカル・キャッシュ・システムは便利そうですね。

Javaの特許侵害が確定!?

次のURLに記載されているニュースで争われていたKodakが持つオブジェクト技術の特許が認められたそうです。

http://www.itmedia.co.jp/news/0202/14/e_kodak.html

まだ本当に裁判が確定してはいないようでSunが逆転するチャンスはあるようですが、このままでは次のURLの特許が認められる様です。

http://www.freepatentsonline.com/5206951.html
http://www.freepatentsonline.com/5421012.html
http://www.freepatentsonline.com/5226161.html

Kodakは一時金で10億6000万ドルの特許料を請求するそうです。オブジェクト技術の基本に関わる特許らしいので.NET等にも影響が出そうです。

FATファイルシステム特許といい、ソフトウェア特許には特許として認めて良いのか疑問である特許が多すぎます。(幸いFAT特許は無効になる、なった?、と思いますが) 調べもせずコメントするのは不適切ですが、このKodakの特許は本当に特許に値する発明なのでしょうか? ソフトウェアの特許は明確なアルゴリズムのみに限定した方が良いと思うのですが…

1000億円以上の一時金+特許ライセンスを支払ってJavaを無料で提供できるか考えると不可能に思えます。少なくともSDKは有償になるかも知れません。JBossなどにも影響するかも知れませんね。(特許のクレームを読んでいないので妄想です。念のため)まだこの裁判にSunが勝つ可能性があるそうです。是非Sunに勝訴してもらいたい。

「まるごとPHP」

最初のセクションの部分に「まるごとPHP」著者の一人である月宮さんがツッコミを入れられてますね。ちょっと辛口のコメントです。初心者向けに記述するのは難しいですね。私も気を付けないと… (私も「まるごとPHP」にセキュリティー関係でほんの少しだけ書いています)

月宮さんの日記のコメントにも書きましたが、PHPでは明示的にリソース(DB接続・ファイル)や変数を開放する必要がほとんどありません。Webプログラムでは明示的に開放しない方が良いくらいです。例えば、DBの永続的接続を使っていない場合、システム負荷を上げるだけで役立つ事はほとんどありません。永続的な接続を利用している場合、データベース接続を切断する関数を呼ぶと役立つ事は一切無く無駄なCPUリソースを消費するだけです。

HDDのパフォーマンス

折角久しぶりにLinuxマシンのSATAドライブが動作したのでhdparmで速度を測定してみました。

[root@sena root]# hdparm -tT /dev/hdb

/dev/hdb:
Timing buffer-cache reads: 3400 MB in 2.00 seconds = 1700.85 MB/sec
Timing buffered disk reads: 122 MB in 3.04 seconds = 40.11 MB/sec
[root@sena root]# hdparm -tT /dev/sda

/dev/sda:
Timing buffer-cache reads: 3408 MB in 2.00 seconds = 1704.85 MB/sec
Timing buffered disk reads: 160 MB in 3.02 seconds = 53.03 MB/sec

普通の速度は出ているようです。

そういえば「高速ネットワーク通信実験に成功。DVD一枚分のデータが数秒で送信可能」という見出しの記事を見掛けますが、数秒で送るにはメモリから送信しないとダメですね。仮に私のPCではDVD一枚分を数秒で送信するとして、十分なメモリがあってもPC3200 Dual Channelでは厳しそうな感じですけど… 実用化するときにはMRAMが湯水のように使える時代になっているのでしょうね。

SATAデバイス

今Momonga Linuxが動作しているPCでSATAドライブが付いているのは1台きりだったのですが、この1台のSATAドライブがMoで認識されなくなって久しいです。データ用のディスク領域が足りなくなって来たので「今時PATAドライブではなぁ」と思いSATAのドライブが買ってきてしまいました。

買って来てしまった物は仕方無いので使える様に設定するまでです。使えるようにする環境はHEADではなくSTABLE_1 (Momonga Linux 1)です。とりあえず今SATAドライブがつながっているいるだけのPCのカーネルはとても古い(2.4.26-12mp4-smp)ので最新のSTABLE_1のkernel(2.4.27-4mp4)にアップグレードしました。ブート時にkernel bug云々と言われpanicを起こしました。困ったときのIRCと言うことでMoのIRCで聞いて見るとSATAでも普通に使えてるようです。「オンボードのIDE RAIDのI/FをBIOSで無効にしてみたら」と言われ、試してみた所とりあえずブートはするようになりましたがfdisk -lとしてもドライブが見えません。

古いカーネル(2.4.24とかだったような)では/dev/hdeと形で認識されていたのですが、今のカーネルはSCSIとして認識させないとならないとの事だったので

modprobe ata_piix

とすると/dev/sdaとして認識されました。ここまで来れば/etc/modules.confに

alias scsi_hostadapter ata_piix

を追加して/boot/kernel-2.4.27-12mp4-smp.imgをmkinitrdで作り直せばfdisk -lで普通に見えるようになります。


[root@sena root]# fdisk -l

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 19457 156288321 83 Linux

Disk /dev/hda: 80.0 GB, 80054059008 bytes
255 heads, 63 sectors/track, 9732 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 8400 67472968+ 8a Unknown
/dev/hda4 8401 9732 10699290 5 Extended
/dev/hda5 8401 8650 2008093+ 82 Linux swap
/dev/hda6 8651 9732 8691133+ 83 Linux

Disk /dev/hdb: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hdb1 1 9729 78148161 83 Linux