php中file_get_contents获取网页乱码解决办法

 更新时间:2016年11月25日 17:38  点击:1648
昨天我在做一个简单采集功能时我直接使用了file_get_contents函数,但是采集有些网站没问题,采集有些网筹码了,后来分析出现乱码是服务器开启了gzip压缩功能哦。

我采集的一个页面,如下gzip

知道原因了我们就好办了,先百度了一下得出是可以改用curl操作。

curl解决

 代码如下 复制代码

function curl_get($url, $gzip=false){
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
        if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); // 关键在这里
        $content = curl_exec($curl);
        curl_close($curl);
        return $content;
}

采用gzip编码格式

file_get_contents解决:

 代码如下 复制代码

file_get_contents("compress.zlib://".$url);

无论页面是否经过gzip压缩,上述代码都可以正常工作!

注意:CURL是需要打开的哦。

curl安装:

xp下面的安装

:修改php.ini文件的设置,找到

 代码如下 复制代码
php_curl.dll

//取消下在的注释extension=php_curl.dll

linux下面安装:

 代码如下 复制代码

# wget http://curl.haxx.se/download/curl-7.17.1.tar.gz

# tar zxvf curl-7.17.1.tar.gz  //解压

#cd curl-7.17.1

# ./configure –prefix=/usr/local/curl

# make

# make install

这是安装php之前安装的方法.

最近遇到一些PhpStorm编程的问题: 在使用Zen Coding插件时,PHPStorm不像Notepad++那样随便使用。PHPStorm只有在编辑识别为HTML的文件时才可以使用Zend Coding。 在PHPStorm编程时,关于数据库操作的SQL语句会有相应的提示。
于是搜索PhpStorm在编写PHP代码,能否切换某一块代码片段到其他编程语言。
在很多项目中,我们经常在编程的时候想进行切换编程语言,通常我们需要在代码的字符串中嵌入一块不同的编程语言。例如:在PHP代码中嵌入一个HTML片段,如果你也遇到类似的情况。
 
$htmlFragment 变量为一段HTML代码,其中有部分PHP变量和转义字符串。
而遇到这种情况,就不能很好的使用HTML代码提示,比如<p></p> 不能直接通过自动闭合等,一个一个的敲打键盘是一个非常苦力的事。
PhpStorm编程语言切换
PhpStorm能够认识到这些情况,它为我们提供了一个功能全面的HTML编辑器来编辑现有的字符串:
PhpStorm编程语言切换演示
我们也可以创建一个字符串,并使用语言切换(Alt+Enter)手动指定字符串到有另外的的语言:
PHPStorm 使用语言切换(Alt+Enter)手动指定字符串到有另外的的语言
这是一个非常棒的小功能,完全提高了编程效率。而且这个功能适用于其他所有语言。

 

这个功能完全方便了我在编辑PHP代码时使用Zen Coding

 

本文章来给大家介绍一篇PHP调用session_start后页面始终加载的问题研究,有需要的朋友可参考。
一个PHP页面的执行时间比较长(15秒左右),而只要这个页面没有执行完毕,其他的页面访问都是长时间加载状态,只有那个页面执行完毕了,剩下的页面才能打开。
这是什么情况呢,经过查看,两个页面都设计到了SESSION操作,示例代码如下:
页面一:
点击查看原图
页面二:
 点击查看原图
访问页面一地时候同时访问页面二,你会发现页面二会一直保持加载状态直到页面一执行完毕。
问题的原因是什么呢?
答案是PHP的SESSION机制在作怪,PHP只会在页面代码执行完毕之后才会把SESSION数据写入到文件中,页面不执行完毕,对应的SESSION文件一直都保存着锁定状态,而其他的页面要访问这个SESSION文件就只能保持等待状态,这就是为什么页面二需要等待页面一执行完毕之后才执行。
 
知道原因后,我们应该如何解决这个问题呢?
答案很简单,PHP已经在内核中提供了相关接口:函数 session_write_close
函数官方文档的描述如下:
Session data is usually stored after your script terminated without the need to call session_write_close(), but as session data is locked to prevent concurrent writes only one script may operate on a session at any time. When using framesets together with sessions you will experience the frames loading one by one due to this locking. You can reduce the time needed to load all the frames by ending the session as soon as all changes to session variables are done.
Session数据通常在你的脚本结束后自动保存而不需要调用session_write_close函数。但是session为了避免数据被同时写入将文件锁定住以保证每次只有一个脚本可以访问文件。当你在用框架页面同时访问SESSION的时候将会遇到因为文件锁定而出现的框架持续加载情况。你可以在处理完SESSION变量后立即使用这个函数减少多个框架的加载时间。
 
像前面的问题,我们可以直接在操作完SESSION数据后调用session_write_close函数立即写入session数据,这样就不会影响到其他页面的正常运行。代码如下:
点击查看原图
 
在32位系统,ip2long不能转换IPv6,但您可以转换ip2bin和bin2ip 这个函数转换为IPv4和IPv6,返回false,如果是无效的

实例程序

 代码如下 复制代码

<?php
function ip2bin($ip)
{
    if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false)
        return base_convert(ip2long($ip),10,2);
    if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false)
        return false;
    if(($ip_n = inet_pton($ip)) === false) return false;
    $bits = 15; // 16 x 8 bit = 128bit (ipv6)
    while ($bits >= 0)
    {
        $bin = sprintf("%08b",(ord($ip_n[$bits])));
        $ipbin = $bin.$ipbin;
        $bits--;
    }
    return $ipbin;
}


function bin2ip($bin)
{
   if(strlen($bin) <= 32) // 32bits (ipv4)
       return long2ip(base_convert($bin,2,10));
   if(strlen($bin) != 128)
       return false;
   $pad = 128 - strlen($bin);
   for ($i = 1; $i <= $pad; $i++)
   {
       $bin = "0".$bin;
   }
   $bits = 0;
   while ($bits <= 7)
   {
       $bin_part = substr($bin,($bits*16),16);
       $ipv6 .= dechex(bindec($bin_part)).":";
       $bits++;
   }
   return inet_ntop(inet_pton(substr($ipv6,0,-1)));
}
?>

本文章来给各位同学详细介绍关于uchome中模糊搜索的实现与分页bug的修复的一些具体方法,有需要了解的朋友可参考本文章来设置。

在默认uchome中好友的搜索是无法模糊搜索的,不知为何,有的人无法记住好友的全名便不可能从搜索中找到该好友了,这对用户体验是非常不好的。

经过研究改动如下代码就可以实现uchome的模糊搜索功能了。

在source中cp_friend.php的文件中找到如下代码修改$wherearr[]中的语句如下即可:

 代码如下 复制代码
 
if($searchkey = stripsearchkey($_GET['searchkey'])) {
            $wherearr[] = "(s.name like '%"."$searchkey"."%' OR s.username like '%"."$searchkey"."%')";
        } else {
            foreach (array('uid','username','name','videostatus','avatar') as $value) {
                if($_GET[$value]) {
                    $wherearr[] = "s.$value='{$_GET[$value]}'";
                }
            }
}

搜索分页bug的修复

使用中发现ucenter的用户搜索如果加时间去搜索的话,列表中的分页是错误的,ucenter1.5和1.6均有这个错误,不知道官方为什么不解决这个问题。经过研究,解决方法如下:
打开control/admin下的user.php
寻找代码

 代码如下 复制代码

$multipage = $this->page($num, UC_PPP, $_GET['page'], ‘admin.php?m=user&a=ls&srchname=’.$srchname.’&srchregdate=’.$srchregdate);

将其改成

 代码如下 复制代码

$multipage = $this->page($num, UC_PPP, $_GET['page'], ‘admin.php?m=user&a=ls&srchname=’.$srchname.’&srchregdatestart=’.$srchregdatestart.’&srchregdateend=’.$srchregdateend);

即可完成修复。

[!--infotagslink--]

相关文章

  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • php中json_decode()和json_encode()用法与中文不显示解决办法

    本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25
  • phpexcel导出数据身份证后四位0000解决办法

    在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
  • 401错误码代表什么 401错误解决办法

    401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • apache网站提示503错误解决办法

    Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
  • php file_get_contents 设置代理抓取页面示例

    file_get_contents函数在php中可以直接打开本地文件也可以直接抓取远程服务器文件,如果简单的采集我们可以使用file_get_contents直接来操作,如果有防采集我们可能需要...2016-11-25
  • Perl CPAN::Modulelist的解决办法

    今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
  • phpStudy访问速度慢和启动失败的解决办法

    下面给大家介绍phpstudy访问速度慢的解决办法。1、修改mysql数据库链接地址为ip地址127.0.0.1。2、使用最新版本,这个坑了我好久时间。下面一段内容是关于phpstudy启动失败的解决办法。php5.3、5.4和apache都是用vc9编...2015-11-24
  • PHP Curl出现403错误的解决办法

    自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
  • php报错file_get_contents(): php_network_getaddresses问题

    本文章来为各位介绍一篇关于file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known...错误解决办法。 昨天,服务器的DN...2016-11-25
  • PHP判断上传文件类型的解决办法

    分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
  • PHP file_get_contents设置超时处理方法

    file_get_contents的超时处理话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。今天说的这篇是讲超时的,确实在...2013-10-04
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法

    最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21
  • PHP页面转UTF-8中文编码乱码的解决办法

    对于乱码这个问题php开发者几乎都会有碰到过,我们下面主要是介绍了php文件乱码和页面乱码。PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header("Content-Type: text/html;charset=utf-8"); 2.PHP文件编码问题...2015-10-21
  • file_get_contents()获取https出现这个错误Unable to find the wrapper “https”

    下面我们来看一篇关于file_get_contents()获取https出现这个错误Unable to find the wrapper “https”问题的解决办法. file_get_contents()获取https出现这个错...2016-11-25
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • Ubuntu15下mysql5.6.25不支持中文的解决办法

    apt-get install 安装的,不是源码包安装的mysql1 修改mysql的配置文件/etc/mysql/conf.d/mysql.cnf在[mysql]的下方加入如下语句:(注:这个文件下没有配置,只有【mysql】)no-auto-rehash default-character-set=utf8/etc/...2015-10-21