(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
msg_receive — Получает сообщение из очереди сообщений
$queue
,$desired_message_type
,&$received_message_type
,$max_message_size
,&$message
,$unserialize
= true
,$flags
= 0,&$error_code
= null
Функция msg_receive() получает первое сообщение из очереди сообщений
queue
с типом, который указали в параметре desired_message_type
.
queue
Очередь сообщений.
desired_message_type
Если для параметра desired_message_type
указали значение 0, возвращается первое
сообщение из очереди. Если значение параметра desired_message_type
больше 0, то
возвращается первое сообщение с указанным типом. Если значение параметра desired_message_type
меньше 0, то возвращается первое сообщение с типом, которое меньше или равно по модулю
значению параметра desired_message_type
. Если нет сообщений,
которые соответствуют критериям, скрипт ожидает их появления в очереди.
Это поведение изменяют через константу MSG_IPC_NOWAIT
в параметре flags
.
received_message_type
В этом параметре сохраняется тип полученного сообщения.
max_message_size
Максимальный размер принимаемого сообщения задаётся в параметре max_message_size
;
если сообщение в очереди больше этого размера, то функция завершается ошибкой
(если флаг flags
не установили так, как рассказывает описание этого параметра).
message
Полученное сообщение сохраняется в параметре message
,
если не было ошибок при получении.
unserialize
Если для параметра установили значение true
, сообщение рассматривается как сериализованое
тем же механизмом, что и в модуле сессий. Сообщение десериализуется,
а затем возвращается в скрипт. Это помогает легко получать массивы
и сложные объекты из других PHP-скриптов, или, если используется WDDX-сериализатор,
из любых совместимых с WDDX источников.
Если для параметра unserialize
указали значение false
,
сообщение возвращается в виде бинарно-безопасной строки.
flags
Необязательный параметр flags
разрешает передать
флаги в низкоуровневый системный вызов msgrcv. По умолчанию его значение 0,
но можно указать одно или несколько следующих значений (путём сложения
или через операцию побитового ИЛИ).
MSG_IPC_NOWAIT |
Если нет сообщений, которые удовлетворяют условиям параметра desired_message_type ,
возвращаться немедленно, а не ждать. Функция завершается ошибкой и возвращает
целочисленное значение MSG_ENOMSG .
|
MSG_EXCEPT |
Установка этого флага в комбинации с положительным значением параметра
desired_message_type ,
позволяет получить первое сообщение, тип которого не равен значению
desired_message_type . |
MSG_NOERROR |
Если размер сообщения превышает значение параметра max_message_size ,
то установка этого флага приводит к усечению сообщения до значения параметра max_message_size
без сигнализирования об ошибке.
|
error_code
Если функция завершается аварийно, необязательный параметр error_code
будет содержать значение системной переменной errno.
Функция возвращает true
, если выполнилась успешно, или false
, если возникла ошибка.
При успешном завершении, структура данных очереди сообщений обновляется следующим образом:
элемент msg_lrpid
содержит идентификатор вызвавшего процесса,
msg_qnum
уменьшается на 1,
а msg_rtime
устанавливается в соответствии с текущим временем.
Версия | Описание |
---|---|
8.0.0 |
Параметр queue теперь ожидает экземпляр класса SysvMessageQueue;
раньше ожидался ресурс (resource).
|