xml地图|网站地图|网站标签 [设为首页] [加入收藏]

正规赌博平台

当前位置:网上十大正规赌博平台 > 正规赌博平台 > mysql数据库方法,php采集神器cURL使用方法详解

mysql数据库方法,php采集神器cURL使用方法详解

来源:http://www.nb-machinery.com 作者:网上十大正规赌博平台 时间:2019-07-14 01:26

对于做过数据采集的人来说,cURL一定不会陌生。虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_contents显得有点无能为力。因此,本文将为你介绍采集神器cURL的使用。

实现一个mysql数据库封装需要考虑的问题

1.使用压缩与不使用压缩的HTTP输出比较

先给大家补充一下file_get_contents函数可以获取远程链接数据的方法。

1.使用方便性

图片 1

<?php
$url = "http://git.oschina.net/yunluo/API/raw/master/notice.txt";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$notice = curl_exec($ch);
echo $notice;
?>

采用直接sql语句操作方式。只要会写sql语句,那么将没有其他学习成本。

2.开启gzip

这段代码会直接使用curl显示文件内容,但是问题来了,因为curl是php的扩展,有的主机为了安全会金庸curl的,宁外php本地调试的时候也是关闭curl的,所以会发生报错,所以这段代码是不可取的,所以云落对他重新改写了

uctphp框架提供的dba辅助封装类,用会之后将爱不释手。

利用apache mod_deflate module 开启gzip
开启方法:

<?php
  if (function_exists('curl_init')) {
    $url = "http://git.oschina.net/yunluo/API/raw/master/notice.txt";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    $dxycontent = curl_exec($ch);
    echo $dxycontent;
  } else {
    echo '汗!貌似您的服务器尚未开启curl扩展,无法收到来自云落的通知,请联系您的主机商开启,本地调试请无视';
  }
?>

使用前需要显示初始化并连接到数据库吗,当然不需要。

sudo a2enmod deflate
sudo /etc/init.d/apache2 restart

修改后的版本是对curl扩展做一个判断,看看服务器到底有木有打开curl扩展,如果打开了,就直接显示文件,如果没打开就显示一段提示文字。
虽然修复了问题,但是又有一个问题来了,我只是显示一段文字而已,我也不是是用什么做什么大事的,所以我为什么要写那么多的代码呢??
经过一些瞎掰的检测,发现file_get_contents获取远程文件内容的速度不比curl慢,在一些文件较少的情况下可能还比curl扩展要快得多,所以我又重写了代码

直到执行第一条sql语句之前,都不会去连接数据库,甚至不会new一个db对象。

关闭方法:

<?php echo file_get_contents( "http://git.oschina.net/yunluo/API/raw/master/notice.txt" ); ?>

dba将会在合适的时机去连接数据库并执行初始化字符编码操作。

sudo a2dismod deflate
sudo /etc/init.d/apache2 restart

工具
火狐浏览器(FireFox) Firebug
“工欲善其事,必先利其器。” 在分析案例之前,先让我们学习一下如何利用神器Firebug获取我们必要的信息。
使用F12打开Firebug,我们可以得到如图(一)界面:

查询语句。不需要new一个查询构造器也不提供链式操作方式,那样复杂且低效。

3.设置需要gzip压缩输出的类型

1、箭头图标是“元素选择”工具,单击一次会高亮图标,同时,鼠标在页面内的移动会同时在HTML菜单中选定相应的内容,此时单击内容则表示选定了该元素,图标高亮取消。如图(二)所示:
Firebug查看元素

dba提供了以下的查询辅助函数。

json的输出类型是application/json,所以可以这样设置
在httpd.conf的<Directory></Directory>中加入

图片 2

//读一个值
Dba::readOne($sql);
//读一行
Dba::readRowAssoc($sql);
//读所有行
Dba::readAllAssoc($sql);
//读所有行的第一列
Dba::readAllOne($sql);
//在实际业务场景中,经常会有分页读取部分数据的情况。
//只要一个函数即可返回指定页码的数据内容和数据总条数
Dba::readCountAndLimit($sql, $page, $limit);
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/json
</IfModule>



<?php
$data = array(
  array('name'=>'one','value'=>1),
  array('name'=>'two','value'=>2),
  array('name'=>'three','value'=>3),
  array('name'=>'four','value'=>4),
  array('name'=>'five','value'=>5),
  array('name'=>'six','value'=>6),
  array('name'=>'seven','value'=>7),
  array('name'=>'eight','value'=>8),
  array('name'=>'nine','value'=>9),
  array('name'=>'ten','value'=>10),
);

header('content-type:application/json');
echo json_encode($data);
?>

2、控制台
JS里面的console.log系列函数的打印就是在这里输出。
3、HTML
HTML内容,注意这里看到的不一定是采集要解析的内容,采集时候对内容的分析,一律以查看源码(Ctrl U)为准,这里只是能快速定位元素的结构,然后再选择一个比较特殊的参照,在源码中定位相应的位置。
比如,你在HTML里面看到一个标签是<div id="demo" class="demo">Demo</div>,但是你查看源码时候看到的内容可能是<div class="demo" id="demo">Demo</div>,如果你对采集内容按照前者去做正则匹配,那么你会得不到结果。
4、CSS
这里是CSS文件内容
5、脚本
这里是Javascript文件内容
6、DOM
Dom节点内容
7、网络
每一个请求链接的数据,这里是我们采集要关注和分析的地方,它能够显示每一个请求的参数、请求头、Cookie数据等。在页面提交会刷新的情况下,需要使用保持,使得页面请求内容在刷新后仍然留着控制台中,如图(三)所示:

ps:以上部分函数可以提供一个map函数对返回数组的每一行进行加工处理。

设置gzip前输出:

图片 3

写语句。为什么要区分read和write呢,显然可以扩展做到控制读写分离,双写等功能。

图片 4

另外,火狐还有一款 Tamper data 扩展也能得到请求数据,必要时可以安装使用。
8、Cookies
Cookie数据

在有各种云数据库和数据库中间件的今天,在数据库层实现是更好的选择。

设置gzip后输出:

在图(一)中还看到下面有很多可选的小菜单项,其中保持是我们要关注的,当选择它的时候,即使提交表单刷新了页面,下面内容区域的数据还是会保留,这个对于分析提交数据特别关键。

Dba::write($sql);
/* 直接插入或更新kv形式的array数组
会自动对value进行转义,也支持array类型的值。
如果自己写sql语句要注意使用addslashes或mysql_real_escape_string来保证安全
*/
Dba::insert($table, $insert); 
Dba::update($table, $update, $where);
/*
对批量插入数据有更高的效率
当然过多的行数应该用array_chunk来分批插入。
*/
Dba::insertS($table, $inserts);

图片 5

总结
我们在分析采集请求的时候,主要关心“网络”菜单里的请求数据,必要时候使用“保持”以查看刷新页面的请求数据,请求前可以使用“清除”先清除下面的内容。

2. 事务

4.单个json使用gzip压缩输出

案例解析
一、简单的采集 这里所指的简单采集,是指一个单一页面GET请求的采集,它简单得即使通过file_get_contents函数也能轻松获得页面返回结果。

使用pdo支持事务

设置AddOutputFilterByType DEFLATE application/json后,所有json格式的数据输出都将使用gzip压缩输出。
如果只想某一个json使用gzip压缩输出,其他不需要,可以使用ob_start();方法来实现。

代码片段之file_get_contents

Dba::beginTransaction();
Dba::commit();
Dba::rollBack();

首先不需要设置AddOutputFilterByType,然后在代码最开始位置加入ob_start('ob_gzhandler');

<?php
  $url = 'http://demo.zjmainstay.cn/php/curl/simple.html';
  $content = file_get_contents($url);
  echo $content;

3. 长时间运行

<?php
ob_start('ob_gzhandler');

$data = array(
  array('name'=>'one','value'=>1),
  array('name'=>'two','value'=>2),
  array('name'=>'three','value'=>3),
  array('name'=>'four','value'=>4),
  array('name'=>'five','value'=>5),
  array('name'=>'six','value'=>6),
  array('name'=>'seven','value'=>7),
  array('name'=>'eight','value'=>8),
  array('name'=>'nine','value'=>9),
  array('name'=>'ten','value'=>10),
);

header('content-type:application/json');
echo json_encode($data);
?>

代码片段之cURL

在一些需要长时间运行的场景如swoole服务,后台worker等,可能会出现数据库连接超时的情况。

您可能感兴趣的文章:

  • php实现压缩多个CSS与JS文件的方法
  • php压缩HTML函数轻松实现压缩html/js/Css及注意事项
  • php使用gzip压缩传输js和css文件的方法
  • php实现压缩合并js的方法【附demo源码下载】
  • php压缩多个CSS为一个css的代码并缓存
  • php简单压缩css样式示例
  • PHP实现动态压缩js与css文件的方法
<?php
  $url = 'http://demo.zjmainstay.cn/php/curl/simple.html';
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据不直接输出
  $content = curl_exec($ch);          //执行并存储结果
  curl_close($ch);

  echo $content;

当发现数据库连接超时,dba将会自动尝试重连。

二、需要参数的采集 这种情况,页面请求需要传入一些参数,可以是GET请求,也可以是POST请求。这种情况的采集,使用file_get_contents外带一些参数还是可以实现的,但是这里我们将不再展示。

以上内容是小编给大家介绍的PHP框架系列文章(6)mysql数据库方法,希望对大家有所帮助!

代码片段之cURL GET
这种请求,我们可以选择搜索引擎作为演示,比如我百度搜索一个词语“PHP cURL”,在输入回车后,我们会得到一个类似 wd 参数就是我们要传入的动态参数,而其他参数则可以不变,因此得到我们下面的采集代码。

您可能感兴趣的文章:

  • ThinkPHP关联模型操作实例分析
  • PHP实现MVC开发得最简单的方法——模型
  • ThinkPHP实例化模型的四种方法概述
  • thinkphp视图模型查询提示ERR: 1146:Table ''db.pr_order_view'' doesn''t exist的解决方法
  • 最新的php 文件上传模型,支持多文件上传
  • PHP开发框架Laravel数据库操作方法总结
  • PHP的Yii框架中使用数据库的配置和SQL操作实例教程
  • PHP的Laravel框架结合MySQL与Redis数据库的使用部署
  • ThinkPHP框架分布式数据库连接方法详解
  • 自制PHP框架之模型与数据库
<?php
  $keyword  = 'PHP cURL';
  $url    = 'http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&ch=&tn=baidu&bar=&wd=' . urlencode($keyword);

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据不直接输出
  $content = curl_exec($ch);          //执行并存储结果
  curl_close($ch);

  echo $content;

有些时候,一些参数并不是必须的,这时候我们可以删掉它,比如上面的链接可以只保留,ie=utf-8 这个参数可能影响结果的编码,所以暂且留着它。就这样简单的代码,我们就可以采集到百度搜索的结果了。

本文由网上十大正规赌博平台发布于正规赌博平台,转载请注明出处:mysql数据库方法,php采集神器cURL使用方法详解

关键词: www.4355.mg线