电脑计算机论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4727|回复: 0

您的服务器无法访问应用中心,这将会导致应用无法安装的解决办法

[复制链接]
admin 发表于 2012-5-29 22:33:16 | 显示全部楼层 |阅读模式
最近部分网站访问应用中心提示“您的服务器无法访问应用中心,这将会导致应用无法安装。请联系您的服务商或者网站技术人员,确保您的服务器能够正常访问 addon.discuz.com”


   经过研究 ,这个问题主要和服务器环境有关,一种情况是网络慢的问题导致 ,另一种的原因是服务器不支持fsockopen pfsockopen函数导致的。
第一种情况的解决办法是:
function_cloudaddons.zip (3.07 KB, 下载次数: 388)
将此文件上传到目录(source\function)并覆盖原文件
第二种情况的解决办法是:
  • 关于fsockopen pfsockopen函数被禁用的解决方法
  • 一、
  • 服务器同时禁用了fsockopen pfsockopen,那么用其他函数代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的参数不同。
  • 具体操作:
  • 搜索程序中的字符串 fsockopen( 替换为 stream_socket_client( ,然后,将原fsockopen函数中的端口参数“80”删掉,并加到$host。
  • 示例如下
  • 修改前:
  • $fp = fsockopen($host, 80, $errno, $errstr, 30);
  • 修改后:
  • $fp = stream_socket_client($host."80", $errno, $errstr, 30);
  • 二、
  • 如果PHP版本低于5.0,fsockopen被禁用,又没有stream_socket_client()怎么办呢?自己写一个函数实现fsockopen的功能,参考代码:
  • function b_fsockopen($host, $port, &$errno, &$errstr, $timeout) {
  • $ip = gethostbyname($host);
  • $s = socket_create(AF_INET, SOCK_STREAM, 0);
  • if (socket_set_nonblock($s)) {
  • $r = @socket_connect($s, $ip, $port);
  • if ($r || socket_last_error() == EINPROGRESS) {
  • $errno = EINPROGRESS;
  • return $s;
  • }
  • }
  • $errno = socket_last_error($s);
  • $errstr = socket_strerror($errno);
  • socket_close($s);
  • return false;
  • }
  • 具体操作:
  • 1.首先找到使用fsockopen函数的代码段,将上面代码加至其上端,搜索该代码段中的字符串 fsockopen( 替换为 b_fsockopen( 。
  • 2.因为fsockopen函数返回文件指针所以可以被文件函数操作,但是这个b_fsockopen函数没能返回文件指针,需要继续修改代码段:用socket_read( 替换掉 fread( ,用socket_write( 替换掉fwrite( ,用socket_close( 替换掉fclose( 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则


QQ|手机版|小黑屋|电脑计算机论坛 ( 京ICP备2022023538号-1 )

GMT+8, 2024-5-20 08:34 , Processed in 0.083139 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表