我需要从PHP传递消息到我的C程序,我通过消息队列这样做。
我有消息队列工作,双方都可以接收消息。
问题是在php端格式化数据。我试图发送C风格的字符串,但php处理字符串有很大不同。如何将php字符串转换为null终止的C字符串?
基本上我需要'config1'是空终止字符串。
msg_send($mq_id, $MSG_CHANGECONFIG, 'config1', true, false, $error);
php似乎是这样存储字符串的:' "s:8:''"config1'000''";其中' are只是转义。
是否有任何方法可以做到这一点,或者从C端解析它以将其转换为C字符串的不同方法?
你可以试试
$nullTerminatedString = sprintf("config1%c", 0);
// or directly using escape sequence
$nullTerminatedString = "config'0";
echo strlen(sprintf("config1%c", 0)); # returns 8, so it should work
从这里取
可选的serialize控制消息的发送方式。serialize默认为TRUE,这意味着消息是序列化的在发送到会话模块之前使用与会话模块相同的机制队列。这允许将复杂的数组和对象发送给其他对象PHP脚本,或者如果您正在使用WDDX序列化器,则将其转换为任何WDDX兼容的客户端。
所以你的呼叫应该是:
msg_send($mq_id, $MSG_CHANGECONFIG, 'config1', **false**, false, $error);
如果您只想添加一个空字节,请使用八进制转义序列(您需要使用双引号):
"config1'0"