If you are getting this message on your *NIX box:
Warning: msg_get_queue() [function.msg-get-queue]: failed for key 0x12345678: No space left on device in /path/to/script.php on line 1
you may use the command "ipcrm" as root to clear the message queue. Use "man ipcrm" to get more info on it.
The default setting for maximum messages in the queue is stored in /proc/sys/fs/mqueue/msg_max. To increase it to a maximum of 100 messages, just run:
echo 100 > /proc/sys/fs/mqueue/msg_max
Please ensure to follow a good programming style and close/free all your message queues before your script exits to avoid those warning messages.
msg_get_queue
(PHP 4 >= 4.3.0, PHP 5)
msg_get_queue — Create or attach to a message queue
Description
resource msg_get_queue
( int $key
[, int $perms
] )
msg_get_queue() returns an id that can be used to access the System V message queue with the given key . The first call creates the message queue with the optional perms . A second call to msg_get_queue() for the same key will return a different message queue identifier, but both identifiers access the same underlying message queue.
Parameters
- key
-
Message queue numeric ID
- perms
-
Queue permissions. Default to 0666. If the message queue already exists, the perms will be ignored.
Return Values
Returns a resource handle that can be used to access the System V message queue.
msg_get_queue
david dot schueler at tel-billig dot de
17-Dec-2008 10:17
17-Dec-2008 10:17
martin dot velek at gmail dot com
01-Aug-2007 06:23
01-Aug-2007 06:23
Lack of IPC_EXCL makes me unhappy. Of course, you can use ftok() to generate a unique key. This code is not allmighty, another process under the same user can open the queue and function returns true. But in some situation it could help.
code:
<?
function ipcEXCL($res,$perm)
{
$pole = msg_stat_queue($res);
if($pole['msg_perm.uid']==posix_getuid() &&
$pole['msg_perm.gid']==posix_getgid() &&
$pole['msg_perm.mode']==$perm &&
$pole['msg_stime']==0 &&
$pole['msg_rtime']==0 &&
$pole['msg_qnum']==0 &&
$pole['msg_lspid']==0 &&
$pole['msg_rspid']==0)
return true;
else
return false;
}
$res=msg_get_queue($key,$perm);
if(ipcEXCL($res,$perm))
echo "probably I am a creator:";
else
echo "probably not";
?>
zxd at zhangxiaodong dot net
15-Dec-2004 11:55
15-Dec-2004 11:55
#
# require --enable-sysvmsg configure option
#
# see phpinfo() to find how to check
#
joeldg AT listbid.com
02-May-2003 02:10
02-May-2003 02:10
// Here is an example of working with message queues.
// if you have forked processes, this could be a great way of passing
// out work to them
// create the message queue
// pick a file..
$key_t = msg_get_queue(ftok("/tmp/php_msgqueue.stat", 'R'),0666 | IPC_CREAT);
// place two messages on the queue
if (!msg_send ($key_t, 1, 'This is message #1', true, true, $msg_err))
echo "Msg not sent because $msg_err\n";
if (!msg_send ($key_t, 1, 'This is message #2 ', true, true, $msg_err))
echo "Msg not sent because $msg_err\n";
// lets look at the queue structure 'msg_qnum' is really what we want to see
// it should be '2'
print_r(msg_stat_queue($key_t));
// pull off the stack
if (msg_receive ($key_t, 1, $msg_type, 16384, $msg, true, 0, $msg_error)) {
if ($msg == 'Quit');
echo "$msg\n"; // prints 'This is message #1'
} else {
echo "Received $msg_error fetching message\n";
}
// look at the structure again, ms_qnum should be '1'
print_r(msg_stat_queue($key_t));
if (msg_receive ($key_t, 1, $msg_type, 16384, $msg, true, 0, $msg_error)) {
if ($msg == 'Quit');
echo "$msg\n"; // prints 'This is message #2'
} else {
echo "Received $msg_error fetching message\n";
}
// look at the structure again, ms_qnum should be '0', no more messages on the queue
print_r(msg_stat_queue($key_t));
// get rid of the queue we created
msg_remove_queue ($key_t);
