同步站点信息提示“An unknown error occurred.May be DNS Error.(ERRCODE:1)”的问题排查与解决

原因分析

找到source\plugin\manyou\Service\Client\Restful.php文件,搜索代码

$result = $this->_postRequest($url, $postString);

在这句下面添加代码

writelog('debug', $url . '-' . $postString . '-'. var_export($result, true));

然后到站点后台诊断工具下,点击同步站点信息,查看data/log下的日志文件,内容如下:

http://api.discuz.qq.com/site_cloud.php-format=PHP&method=site.sync&************-NULL

可以看到返回为空,继续追查。
找到source\function\function_filesock.php文件,搜索代码

curl_close($ch);

在这句下面添加代码

writelog('debug', $url . '-' . $errno . '-' . var_export($data, true));

然后到站点后台诊断工具下,点击同步站点信息,查看data/log下的日志文件,内容如下:

<?PHP exit;?>   http://api.discuz.qq.com/site_cloud.php-28-NULL

curl错误号28表示超时,接口请求超时。

CURLE_OPERATION_TIMEDOUT (28)

解决方法

找到source\plugin\manyou\Service\Client\Restful.php文件,搜索代码

$result = $this->_fsockopen($url, 0, $data, '', false, $ip, 5);

改为下面代码

$result = $this->_fsockopen($url, 0, $data, '', false, $ip, 30);

然后到站点后台诊断工具下,点击同步站点信息,提示同步成功。
ok,问题解决,把超时时间设置大一些即可。

QQ互联点击登录提示999报错的问题分析与解决

原因分析

今天收到好几个站点反馈QQ互联登录提示999错误的case,看了下程序,已经是请求互联开放平台的接口了,所以不是云平台的问题导致。

找到其中一个站点,检查站点后台诊断工具情况,发现互联接口请求失败,感觉像是域名解析IP换了,把设置的IP去掉后,请求成功。

ping了下openapi.qzone.qq.com,发现变成了112.90.83.87,确认是域名解析IP变更导致的。

解决方法

  1. 登录站长后台,点击工具-》云平台诊断工具。
  2. 点击QQ互联域名解析后面的设置IP,在弹出来的框里,将QQ互联接口IP里的IP删掉,然后提交。

最新可用的解析IP

如果你的网站通过DNS解析域名有问题,可以设置下面其中一个IP。

深圳电信 183.60.15.158
深圳联通 112.90.83.87

mb_strlen与strlen的区别

开发中总会遇到字符串文字长度计算的问题,比较常用的就是strlen和mb_strlen。

示例代码:

$a = '中';
echo "===中文===\n";
echo 'strlen: ' . strlen($a) . "\n";
echo 'mb_strlen: ' . mb_strlen($a) . "\n";
$a = 1;
echo "===数字===\n";
echo 'strlen: ' . strlen($a) . "\n";
echo 'mb_strlen: ' . mb_strlen($a) . "\n";
$a = 'a';
echo "===英文===\n";
echo 'strlen: ' . strlen($a) . "\n";
echo 'mb_strlen: ' . mb_strlen($a) . "\n";
$a = ',';
echo "===英文标点===\n";
echo 'strlen: ' . strlen($a) . "\n";
echo 'mb_strlen: ' . mb_strlen($a) . "\n";
$a = '。';
echo "===中文标点===\n";
echo 'strlen: ' . strlen($a) . "\n";
echo 'mb_strlen: ' . mb_strlen($a) . "\n";

运行结果:

===中文===
strlen: 3
mb_strlen: 1
===数字===
strlen: 1
mb_strlen: 1
===英文===
strlen: 1
mb_strlen: 1
===英文标点===
strlen: 1
mb_strlen: 1
===中文标点===
strlen: 3
mb_strlen: 1

区别总结:

方法中文/中文标点数字英文/英文标点
strlen311
mb_strlen111