Gojira 哥斯拉Gojira 哥斯拉

哥斯拉爱好者的日常
生活相当无趣 我得找点乐子

discuz发帖geetest极验导致的Could not open socket! 错误解决方法

gojira.net

今天在论坛上发帖,死活都发不出去,一提交就返回错误: Could not open socket!

google了一堆没用的信息,后来定位到可能是geetest极验导致的,然后去geetest官网找问题,果然找到了这个错误,官方的解决办法是这样的:

报错:Could not open socket!

解决方法:服务器php配置中关闭了PHP.ini 中 allow_url_fopen选项,联系空间商,或者自己手动去开启。

然而我看了我的php.ini中allow_url_fopen是On,没问题的,然后想到可能是禁用fsockopen函数,将php.ini里的disable_functions =后面的fsockopen删掉,重启php,果然可以发帖了,然而我不可能开启fsockopen这个函数的,太危险。

所以采用修改geetest的php代码的方法:
修改这个文件:/source/plugin/geetest/lib/geetestlib.php
 

       if (($fs = @fsockopen($host, $port, $errno, $errstr, 10)) == false) {
            die ('Could not open socket! ' . $errstr);
        }
改为:
        if (($fs = @stream_socket_client("tcp://".$host.":".$port, $errno, $errstr, 10)) == false) {
            die ('Could not open socket! ' . $errstr);
        }
 
测试,完美搞定。
 
P.S. 有些想不明白,这么简单弱智的一个问题,为啥geetest极验官方也不解决一下?多做个判断以应对各种主机环境,这是很简单的事情吧?毕竟现在php禁止fsockopen,pfsockopen这些危险函数是非常普遍的了。

GOJIRA.NET原创文章未经允许不得转载! 当前页面:Gojira 哥斯拉 » discuz发帖geetest极验导致的Could not open socket! 错误解决方法

评论