php 共有メモリ(sysv) メモ
SYSV共有メモリでハッシュを使ってアクセスするテスト
<?php
function myHash($string, $max = 100000, $start = 0)
{
$hash = 0;
$len = strlen($string);
for( $i = 0; $i < $len; $i++){
$hash += ord(substr($string, $i, 1));
$hash = $hash << 1;
}
return $start + ( $hash % ($max - $start) );
}
function write($hdl, $key, $val)
{
$index = myHash($key);
$ret = @shm_get_var($hdl, $index);
if( $ret ) $data = $ret;
$data[$key] = $val;
return @shm_put_var($hdl, $index, $data);
}
function read($hdl, $key)
{
$index = myHash($key);
$data = @shm_get_var($hdl, $index);
if(!$data) return false;
return $data[$key];
}
$key = 0x10000001; // 共有メモリキー
$size = 1024000; // 1MBYTE
$perm = 0777; // パーミッション
$hdl = shm_attach($key, $size, $perm);
if(!$hdl){
print('エラーだす');
exit();
}
// データを用意
$data['DATA1'] = "HOGE1";
$data['DATA2'] = "HOGE2";
$data['DATA3'] = "HOGE3";
// 書き込み
foreach($data as $key => $val){
write($hdl, $key, $val);
}
// 読み込み
echo read($hdl, 'DATA1')."\n";
echo read($hdl, 'DATA2')."\n";
echo read($hdl, 'DATA3')."\n";
// 共有メモリの領域削除
shm_remove($hdl);
// 共有メモリハンドルのクローズ
shm_detach($hdl);
?>
投稿者 you21979 : January 19, 2006 10:15 PM