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这些危险函数是非常普遍的了。