#!/usr/bin/php4 -q \n"; echo " -v verbose information (byte pointers, etc)\n"; echo " shared memory key passed to shm_attach()\n"; exit(1); } $argc = $_SERVER['argc']; $argv = $_SERVER['argv']; $verbose = false; $arg_key = 1; if ($argc > 1 and $argv[1] == '-v') { $verbose = true; $arg_key = 2; } if ($argc <= $arg_key or $argc > $arg_key+1) { die_syntax(); } $shm_handle = ($argv[$arg_key]) + 0; // allow hex if (!$shm_handle) { die("shm handle invalid\n"); } echo "shm key 0x".str_pad(dechex($shm_handle), 8, '0', STR_PAD_LEFT)." ($shm_handle): \n"; $shm_id = @shmop_open($shm_handle, 'a', 0, 0); if (!$shm_id) { die("Segment does not exist or could not be opened.\n"); } $data = shmop_read($shm_id, 0, shmop_size($shm_id)); $header = unpack('a8magic/lstart/lend/lfree/ltotal', $data); if ($verbose) { echo "segment size: ".shmop_size($shm_id)."\n\n"; echo "Header:\n"; echo " Magic: \"".$header['magic']."\"\n"; echo " Data Start: ".$header['start']."\n"; echo " Data End: ".$header['end']."\n"; echo " Bytes Free: ".$header['free']."\n"; echo " Bytes Total: ".$header['total']."\n\n"; } else { echo "\n"; } $pos = $header['start']; do { $varheader = unpack('lkey/llen/lnext', substr($data, $pos, 12)); if ($varheader['len']) { echo "Variable:\n"; $vardata = substr($data, $pos + 12, $varheader['len']); echo " Key: ".$varheader['key']."\n"; if ($verbose) { echo " Length: ".$varheader['len']."\n"; echo " Next: ".$varheader['next']."\n"; echo " Raw Data: \"".$vardata."\"\n"; echo " Unserialized data:"; } else { echo " Data:"; } ob_start(); var_dump(unserialize($vardata)); $var = str_replace("\n", "\n ", "\n".ob_get_contents()); ob_end_clean(); echo $var."\n"; } $pos += $varheader['next']; } while ($varheader['next']); ?>