首页 > 编程技术 > php

空间不支持fsockopen函数解决办法

发布时间:2016-11-25 17:38

今天买了一个空间发现空间不支持fsockopen函数,后来网上找了几种解决空间不支持fsockopen方法,下面给大家分享一下,希望对各位朋友有所帮助呀。

为了服务器安全考虑很多主机商禁用了php的fsockopen函数,昨天进博客,使用cos-html-cache生成静态文件,尼玛提示:

Warning: fsockopen() has been disabled for security reasons in D:...cos-html-cachecos-html-cache.php on line 35

换了其他版本的cos-html-cache,还是不行。后来找到下面的方法。 = =、(结果不行,因为函数都被禁用了。)

大家试下,很少有我这样的情况的,用其他替代函数。

一、如何禁用fsockopen()

下面是两种常用的禁用fsockopen的方法。

1、修改php.ini,将  disable_functions =   后加入  fsockopen  
2、修改php.ini,将  allow_url_fopen = On   改为  allow_url_fopen = Off  

二、如何解决fsockopen函数被禁用

1、如果服务器没有同时禁用pfsockopen,那么直接将fsockopen函数替换为pfsockopen。
具体操作:搜索程序中的字符串  fsockopen(   替换为  pfsockopen(   。示例如下
修改前:

 代码如下 复制代码

$fp = fsockopen($host, 80, $errno, $errstr, 30);

修改后:
 

$fp = pfsockopen($host, 80, $errno, $errstr, 30);


2、如果服务器同时禁用了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);


3、如果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(   。


解决方案二:

fsockopen大多数应用是的获取远程页面数据,对于获取远程页面这种应用,PHP还有其他函数可以完美替代:
 
方法1:

 代码如下 复制代码
<?php
$str = file("http://www.111cn.net");
$count = count($str);
for ($i=0;$i<$count;$i++){
     $file .= $str[$i];
     }
echo $file;
?>

 
 
方法2:

 代码如下 复制代码
<?php
$str = file_get_contents("http://www.111cn.net");
echo $str;
?>
PHP页面中文乱码出现的原因有几种,一种是页面编码不统计一,二是数据库未设置编码,三是apache编码有问题,下面我来给大家介绍两种解决办法,总体来讲就是页面编码不统一了。

出现乱码大部分是由于编码方式的不一致导致的,其中主要有四个地方不一致就可能存在这个可能:

1、页面文件的编码方式(.html,.php等)

2、html.head中指定浏览器的编码方式

3、MySql数据库传输的编码方式

4、Apache字符集


在只有PHP代码的页面,做JS弹窗的时候,如果弹窗内容含有中文,可能会出现乱码的问题,

解决办法,一行代码:

页面中文乱码

 代码如下 复制代码

header(“Content-Type: text/html; charset=utf-8");

数据库是文乱码

 代码如下 复制代码


1.<?php 
2.mysql_query('SET NAMES UTF8'); 
3.
//接下来的就是查出数据或者修改,增加咯  
4.?> 


注意:

1、此代码必须放在文件最上面, ‘<?php’之后;
2、charset值要看整个网站编码,如果是gb2312,则填gb2312。

今天在打开phpmyadmin时提示:phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置,下面我来给大家一起来看看无法载入 mcrypt问题解决办法。


你打开phpmyadmin就会提示 :无法载入 mcrypt 扩展,请检查 PHP 配置错误

出现以下几种情况后可能会造成运行phpmyadmin程序 提示“无法载入 mcrypt 扩展,<br />请检查 PHP 配置”的 错误提示


windows解决办法

1、没有正确安装Mysql数据库,在系统服务中Mysql相关的服务没有启动   (请查看正确安装Mysql的方法)

2、在系统的 system32(C:windowssystem32) 目录下缺少 libmcrypt.dll文件,解决方法是找到php目录下的libmcrypt.dll,并将libmcrypt.dll复制到C:windows system32目录中,然后重新启动Web服务。

3、在C:windows目录下的php.ini文件中,没有将“;extension=php_mcrypt.dll”中的前面一个“;”去 掉,所以不能使用相应功能,解决方法是打开php.ini文件

 代码如下 复制代码

找到

;extension=php_mcrypt.dll

改成

extension=php_mcrypt.dll    //去掉前面的;使之生效


linux系统下解决办法

一:无法加载 mcrypt扩展,请检查您的 PHP 配置

 

 代码如下 复制代码

 
sudo  apt-get install libmcrypt4 php5-mcrypt    //安装libmcrypt

  
sudo /etc/init.d/apache2  restart     //重启apache

二:配置文件现在需要一个短语密码


1、用编辑器打开目录phpmyadmin/libraries中的config.default.php文件

2、查找下面这行:$cfg['blowfish_secret'] = ‘这里就是需要的短语密码’;(短语密码请随意填写)

会出现这个问题,是在配置phpmyadmin填写认证方法时,即下面这行:

$cfg['Servers'][$i]['auth_type'] = ‘cookie’;

在此有四种模式可供选择,cookie,http,HTTP,config

config方式即输入phpmyadmin的访问网址即可直接进入,无需输入用户名和密码,是不安全的,不推荐使用。

当该项设置为cookie,http或HTTP时,登录phpmyadmin需要数据用户名和密码进行验证,,具体如下:

PHP安装模式为Apache,可以使用http和cookie;

PHP安装模式为CGI,可以使用cookie

本文章来给大家介绍关于无法启动此程序,因为计算机丢失php_mbstring.dll的解决办法,希望此方法对各位同学有所帮助。

在使用命令行创建Zend FrameWork项目的时候,计算机提醒“无法启动此程序,因为计算机丢失php_mbstring.dll。尝试重新安装该程序以解决问题。”解决这个问题的方法是:

sublime text2 保存php文件提示“无法启动此程序,因为计算机中丢失php_pdo.dll 尝试重新安装该程序以解决此问题”



请教大神这是什么原因

装的插件有
 

      首先,你要确定你的PHP已经包含php_mbstring.dll文件,可以查看php安装目录下的ext文件下是否有此文件,没有请根据php版本下载合适的php_mbstring.dll文件,并放进ext目录下。

      然后,修改php.ini配置。去掉“;extension=php_mbstring.dll”和“;
extension=php_exif.dll”前的分号,并保证php_mbstring.dll在php_exif.dll之前加载,因为加载php_exif.dll需要用到php_mbstring.dll。然后保存php.ini,并重启web服务器。

 

strtotime()函数是php日期函数了,出现这种问题就是我们php.ini中的date.timezone没有设置好,只要配置一下时区即可解决。


php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的。显示的时间都是格林威治标准时间,和 北京时间差了正好8个小时。

解决方案是:

修改php.ini文件,查找 ;date.timezone = ,把前面的分号去掉在 “=”后面加上时区。

比如:

Asia/Chongqing (重庆),
Asia/Shanghai (上海),
Asia/Urumqi (乌鲁木齐),
Asia/Macao (澳门),
Asia/Hong_Kong (香港),
Asia/Taipei (台北),
PRC 中国

 代码如下 复制代码

date.timezone = PRC

也可以才php中程序页面最前面加

 代码如下 复制代码

<?php
date_default_timezone_set('Asia/Chongqing');
echo date('Y-m-d H:i:s');
?>

相关推荐阅读

php中时间相差8小时的多种解决办法

http://www.111cn.net/phper/31/42398.htm

php 日期时差8小时间解决方法

http://www.111cn.net/phper/31/37224.htm

php获取服务器时间(解决8小时差距问题)

http://www.111cn.net/phper/31/34041.htm

标签:[!--infotagslink--]

您可能感兴趣的文章: