使用PHP通过SOAP请求下载RFID考勤机日志连接失败求助
解决fsockopen无法连接Solution品牌考勤机的方法
网络连通性排查
- 在服务器上执行
ping 192.168.x.x,确认能正常ping通设备IP。如果ping不通:- 检查设备和服务器是否处于同一局域网;若不在同一网域,确认是否已做端口映射
- 核实设备IP是否被修改,或设备本身是否处于离线状态
- 用
telnet 192.168.x.x 4370测试端口开放情况。若telnet无法连接,大概率是设备4370端口未开启,或客户侧防火墙/路由器拦截了该端口的入站请求
设备配置验证
- 确认客户的Solution C1型号考勤机已开启SOAP服务,且端口设置为4370。不同型号设备的默认配置可能不同,X606-s的生效配置不代表C1通用
- 检查设备网络权限设置:是否允许外部IP访问,是否设置了IP白名单?若有白名单,需将服务器IP加入允许列表
PHP环境与代码调整
- 检查服务器PHP配置中
allow_url_fopen是否开启,可通过phpinfo()查看,fsockopen依赖该配置项 - 尝试替换fsockopen为
stream_socket_client,部分环境下该函数兼容性更好,示例代码:
$socket = stream_socket_client("tcp://192.168.x.x:4370", $errno, $errstr, 30); if (!$socket) { echo "$errstr ($errno)"; } else { fwrite($socket, $soapRequest); $response = stream_get_contents($socket); fclose($socket); }
- 核对SOAP请求XML格式是否适配C1型号。不同型号设备对SOAP报文的命名空间、参数格式可能存在细微差异,需对照设备官方文档调整报文内容
防火墙与安全策略排查
- 检查服务器侧防火墙(如iptables、firewalld)是否允许出站访问4370端口
- 确认客户侧网络是否有安全设备(如入侵检测系统)拦截了SOAP请求,可尝试用Postman等工具模拟请求,排除代码本身问题
内容的提问来源于stack exchange,提问作者akhiratunnisa
相关产品推荐
相关产品推荐

