PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

shm_put_var> <shm_detach
Last updated: Fri, 01 Aug 2008

view this page in

shm_get_var

(PHP 4, PHP 5)

shm_get_varReturns a variable from shared memory

Descrierea

mixed shm_get_var ( int $shm_identifier , int $variable_key )

shm_get_var() returns the variable with a given variable_key , in the given shared memory segment. The variable is still present in the shared memory.

Parametri

shm_identifier

Shared memory segment, obtained from shm_attach().

variable_key

The variable key.

Valorile întroarse

Returns the variable with the given key.



shm_put_var> <shm_detach
Last updated: Fri, 01 Aug 2008
 
add a note add a note User Contributed Notes
shm_get_var
ricardophp at yahoo dot com dot br
27-Sep-2008 11:18
A fully functional sample  ...

<?php
echo "<PRE>\n";

define("FOPEN_RESOURCE", 1);

$shm_id = shm_attach(FOPEN_RESOURCE);
if (
$shm_id === false) {
    exit(
"Fail to attach shared memory.\n");
}

$fopen_resource = fopen("/tmp/phpSharedMemory.bin", "w");

$a =  array("Teste1", 1);
if (!
shm_put_var($shm_id, $a, $a)) {
    exit(
"Failed to put var 1 in shared memory $shm_id.\n");
}

echo
"F: ".$a[0].":".$a[1]."\n";
$pid = pcntl_fork();

if(
$pid == -1) {
  die(
"could not fork\n");
}
else if (
$pid) {
   
$a = array("Teste2", 3);
    if (!
shm_put_var($shm_id, $a, $a)) {
        exit(
"Failed to put var 1 in shared memory $shm_id.\n");
    }
    echo
"P1: ".$a[0].":".$a[1]."\n";
} else {
   
sleep(2);
   
$a = shm_get_var($shm_id, $a);
    echo
"P2: ".$a[0].":".$a[1]."\n";
}
pcntl_wait($status);
exit();
?>
JM
15-May-2005 12:50
To follow up on the posts by anonymous, Bob Van Zant and chris at free-source dot com below (or, as must people inexplicably write, above) regarding the PHP warning and FALSE that shm_get_var returns if the variable key doesn't exist:

My tests (with PHP4.3.4) show that defined() is useless here. Because the function defined(string) checks whether the constant whose name is string exists, the code
<?php
if ( defined(@shm_get_var($mutex, $mutex_key)) {
   ...
}
?>
acts the same ("..." does not get executed) whether the variable is defined or not--unless $mutex_key happens to identify a valid string that happens to be the name of a constant. :)

Rather,
<?php
if ( @shm_get_var($mutex, $mutex_key) === FALSE ) {
   ...
}
?>
works, provided the object that was stored isn't actually FALSE (via <?php shm_put_var($mutex, $mutex_key, FALSE); ?>)

It would be nice to have a completely air-tight solution, though.  D'oh!
06-May-2005 11:01
You will still receive a notice use @:

if(!defined(@shm_get_var($mutex, $mutex_key))) {
       shm_put_var($mutex, $mutex_key, 0);
}
Bob Van Zant
18-Feb-2005 09:05
This seems to work fine to detect the lack of presence of a key in shared memory and then init it to 0 when found:

if(!defined(shm_get_var($mutex, $mutex_key))) {
        shm_put_var($mutex, $mutex_key, 0);
}
chris at free-source dot com
05-Dec-2004 11:47
if the variable_key asked for does not exist php generates a warning and shm_get_var() will return bool(false).  there doesn't seem to be a clean way to test if a key exists.

shm_put_var> <shm_detach
Last updated: Fri, 01 Aug 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites