You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel连接ZKTeco考勤机报错socket_sendto(): Operation not permitted求助

排查Hostinger服务器PHP Laravel连接ZKTeco考勤机的Socket权限问题

问题背景

本地XAMPP环境通过PHP Socket连接ZKTeco考勤机完全正常,但部署到Hostinger生产服务器后,访问对应URL时抛出错误:

socket_sendto(): Unable to write to socket [1]: Operation not permitted

已通过phpinfo确认主机PHP Sockets扩展已启用,使用的Laravel第三方库为raihanafroz/zkteco,控制器测试代码如下:

public function test() {
    $zk = new ZKTeco('192.168.**.**');
    $zk->connect();  

    $usersData = $zk->getUser();
    
    foreach($usersData as $key => $user):
        echo "<pre>";
        print_r($user);
        echo "</pre>";   
    endforeach;      
}

排查方向及解决方案

  • 网络连通性问题
    考勤机使用的是192.168.**.**局域网私有IP,Hostinger生产服务器属于公网环境,无法直接访问内网设备。解决方式:

    • 给考勤机映射公网IP和对应端口(ZKTeco默认端口为4370);
    • 让服务器和考勤机处于同一内网环境(比如通过VPN连接服务器到考勤机所在局域网)。
  • Hostinger服务器防火墙/安全组限制
    Hostinger默认可能封禁了非标准端口的出站请求,需要:

    • 在Hostinger控制面板的安全设置中,开放ZKTeco设备使用的端口(通常是4370)的出站权限;
    • 若面板无法操作,直接联系Hostinger客服解除对应端口的出站限制。
  • PHP安全配置限制
    检查服务器的php.ini配置:

    • 查看disable_functions项,确认是否包含socket_sendto、socket_connect等Socket相关函数,若有则移除;
    • 确认open_basedir配置未限制Socket操作的权限,必要时调整该配置。
  • 第三方库兼容性问题
    测试原生PHP Socket连接,排查是否是库的实现问题:

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    $result = socket_connect($socket, '你的公网IP/内网IP', 4370);
    if (!$result) {
        echo socket_strerror(socket_last_error());
    } else {
        echo "连接成功";
        socket_close($socket);
    }
    

    若原生代码能连接,说明第三方库的Socket逻辑存在适配问题,可查看库的源码调整连接参数,或更换其他ZKTeco连接库。

内容的提问来源于stack exchange,提问作者Usman Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:17:17