解决Discuz! X服务器禁止了外部访问权限allow_url_fopen,,导致 Authorization Error! Unable to connect to server!
站长端解决方案:
服务器的php.ini文件设置关闭了allow_url_fopen,如果你是租用的服务器或者虚拟主机,需要联系服务商。
; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
allow_url_fopen = On
; Whether to allow include/require to open URLs (like http:// or ftp://) as files.
allow_url_include = Off
其他云主机服务器排查问题步骤如下:
1、首先查看php是否有禁用相关函数
找到php.ini ,打开,查找“disable_functions”,看后面是否列出了禁用函数,如果有fsockopen,说明此函数已经被禁用,直接去除此函数重新php服务,看问题是否解决,一般没有必要不必禁用函数,可将=后面的函数名全去除
2、查看allow_url_fopen是否开启
在php.ini中查找“allow_url_fopen”,看=后面是否为On,如果是Off 则说明,些函数被关闭,我们只需修改为On ,重起php服务,再去看问题是否解决
3、修改extension=php_openssl.dll
在php.ini中查找“extension=php_openssl.dll”,将前面的“;”去掉,然后重起php服务,看问题是否解决.
注:.dll是windows 特有的。如果是Linux主机,可不必尝试这个办法。
服务端解决方案:
服务器禁用了allow_url_fopen同时禁用了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);