January 19, 2006

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
コメント
コメントする









名前、アドレスを登録しますか?