PHP.mk документација

msg_send

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.msg-send.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.msg-send.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
msg_send

Референца за `function.msg-send.php` со подобрена типографија и навигација.

function.msg-send.php

msg_send

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

msg_sendИспрати порака до редица за пораки

= NULL

msg_send(
         SysvMessageQueue $queue,
         int $message_type,
         string|int|float|bool $message,
         bool $serialize = true,
         bool $blocking = true,
         int &$error_code = null
): bool

msg_send() испраќа message од тип message_type (што МОРА да биде поголемо од 0) до редицата за пораки наведена од queue.

Параметри

queue
Редот за пораки.
message_type
Типот на пораката (МОРА да биде поголемо од 0)
message
Телото на пораката.

Забелешка: Враќа serialize постави на false се дава, МОРА да биде од тип: string, int, float or bool. Во спротивно ќе се издаде предупредување.

serialize
Опционалниот serialize контролира како message се испраќа. serialize Ако невалиден true што значи дека message се серијализира користејќи го истиот механизам како модулот за сесии пред да се испрати до редицата. Ова им овозможува на сложени низи и објекти да се испраќаат до други PHP скрипти, или ако користите WDDX серијализатор, до кој било WDDX компатибилен клиент.
blocking
Ако пораката е преголема за да се вклопи во редицата, вашата скрипта ќе чека додека друг процес не прочита пораки од редицата и не ослободи доволно простор за да се испрати вашата порака. Ова се нарекува блокирање; можете да спречите блокирање со поставување на опционалното blocking , како false, во тој случај msg_send() веднаш ќе се врати false ако пораката е преголема за редицата, и ќе го постави опционалното error_code to MSG_EAGAIN, што укажува дека треба да се обидете повторно да ја испратите вашата порака малку подоцна.
error_code
Ако функцијата не успее, опционалниот код за грешка ќе биде поставен на вредноста на системската променлива errno.

Вратени вредности

Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.

По успешното завршување, структурата на податоци на редицата за пораки се ажурира на следниов начин: msg_lspid се поставува на ID-то на процесот на повикувачкиот процес, msg_qnum се зголемува за 1 и msg_stime се поставува на тековното време.

Дневник на промени

Верзија = NULL
8.0.0 queue беше вратено при неуспех. SysvMessageQueue инстанца сега; претходно, а resource се очекуваше.

Види Исто така

Белешки од корисници 3 белешки

qeekin на gmail точка com
пред 11 години
I created example how to comunnicate with programe written in C throught messages queues. First run C program (it will create queue) then PHP script.

C code compile with: gcc -std=c99 -o test_queue test_queue.c

test_queue.c:
/**
* Example how to use System V Messages Queues with PHP and C program.
* This is simple server which create message queue and receive message from it.
* Based on Beej's Guide to Unix IPC
* Autor: Jan Drazil, <qeekin at gmail dot com>
*/

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

/* Buffer struct for receiving messages */
struct php_buf {
    long mtype;
    char msg[200];
};

int main(void)
{
    struct php_buf buf;
    int msqid;
    key_t key;

    /* Generate key (/var/www/index.php must be accessible file) */
    if((key = ftok("/var/www/index.php", 'G')) == -1) {
        perror("ftok");
        exit(EXIT_FAILURE);
    }

    /* Create message queue */
    if((msqid = msgget(key, 0666 | IPC_CREAT)) == -1) {
        perror("msgget");
        exit(EXIT_FAILURE);
    }

    printf("Ready to get string from PHP!\n");

    /* Receive message */
    if(msgrcv(msqid, &buf, sizeof(buf.msg)-1, 0, 0) == -1) {
        perror("msgrcv");
        exit(EXIT_FAILURE);
    }

    /* Eliminate segmentation fault */
    buf.msg[199] = '\0';

    printf("Recieved from PHP: %s\n", buf.msg);

    /* Destroy message queue */
    if(msgctl(msqid, IPC_RMID, NULL) == -1) {
        perror("msgctl");
        exit(EXIT_FAILURE);
    }

    return EXIT_SUCCESS;
}

test_queue.php:
<?php
/**
* Example how to use System V Messages Queues with PHP and C program.
* This is simple server which create message queue and receive message from it.
* Based on Beej's Guide to Unix IPC
* Autor: Jan Drazil, <qeekin at gmail dot com>
*/

/* Generate key, param fot ftok must be same as in test_msg.c */
if(($key = ftok("/var/www/index.php", "G")) == -1)
    die("ftok");

if(!msg_queue_exists($key))
    die("message queue doesn't exists");

/* Connect to message queue */
if(($msqid = msg_get_queue($key)) === FALSE)
    die("msg_get_queue");

echo "Sending text to msg queue.\n";

/* Send message to C program */
if(!msg_send($msqid, 12, "Hello from PHP!\0", false))
    die("msg_send");

echo "Done"
?>
Muffinman
пред 13 години
When sending non-complex (serialize = false) messages to a program in C, you need to add the null character to the string (\0). Otherwise the previous message will be partially visible if it is longer than the current message. Took some kind help from comp.lang.php for me to figure that out. While it seems so obvious now, I thought I'd share it here.
michael точка НЕ точка SP точка AM точка cordover+php на gmail точка com
пред 16 години
After about an hour of debugging I've discovered the meaning of the undocumented "PHP Warning: msg_send(): msgsnd failed: Invalid argument" ($errorcode = 13).

This occurred when the size of $message was larger than msg_qbytes (see msg_stat_queue() for how to determine and change msg_qbytes).
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.