所以我花了这么多天试图解决这个似乎已被遗忘的事情,因为两个PECL扩展中没有一个(SAM和mqseries)已经更新了很长时间.我已经尝试过两者并且mqseries似乎让我在这一点上最远,因为SAM拒绝让我连接,即使MQ从命令行完美运行.我已经成功创建了与QueueManager的连接,并且在下一步(MQOPEN)中我惨遭失败:
$mqcno = array(
'Version' => MQSERIES_MQCNO_VERSION_2,
'Options' => MQSERIES_MQCNO_STANDARD_BINDING,
'MQCD' => array('ChannelName' => '[channel]',
'ConnectionName' => '[ipnumber]([port])',
'TransportType' => MQSERIES_MQXPT_TCP)
);
mqseries_connx('MQED', $mqcno, $conn, $comp_code,$reason);
if ($comp_code !== MQSERIES_MQCC_OK) {
printf("Connx CompCode:%d Reason:%d Text:%s<br>\n", $comp_code, $reason, $reason);
exit;
}
$mqods = array('ObjectName'=>'MYPUTQUEUE', 'ObjectType'=>MQOT_Q, 'ObjectQMgrName'=>'MYQUEUEMANAGER');
mqseries_open($conn, $mqods,
MQSERIES_MQOO_FAIL_IF_QUIESCING | MQSERIES_MQOO_OUTPUT,
$obj, $comp_code,$reason);
Run Code Online (Sandbox Code Playgroud)
这导致$ reason被填充为2044,转换为MQRC_OD_ERROR,或者英文:'在MQOPEN或MQPUT1调用中,对象描述符MQOD无效'.
所以问题是,我的MQOD出了什么问题?
更新#1:此时此问题尚未解决.我从头开始重建项目,以便在构建时解决任何问题.我仍然坚持MQOPEN返回2044.样本仍然从CLI运行完美,所以这绝对与PECL扩展的安装有关.如果有人在最近的64位PHP5环境中成功安装并运行PHP对MQ,请告诉我...
更新#2:MQPUT1完美地解决了我无法收到响应的问题.在这一点上,它只是MQOPEN不起作用.问题是; 什么导致MQOPEN在MQPUT1工作时返回2044,我理解包括MQOPEN?