PHP中使用SQLite快速上手教程

 更新时间:2016年11月25日 17:05  点击:1864
SQLite是一款小巧轻型的数据库,支持的SQL语句不会逊色于其他数据库,支持的程序语言有Tcl、C#、PHP、Java等。现在我们来学习在PHP中如何使用SQLite。

一、如何建立文件夹:

SQLite会自动判断,文件夹是否存在,如果不存在才会建立。

try{
$db_conn = new PDO('sqlite:mydb.sqlite');
}catch(PDOException $e){
echo 'Error';
}

$stmt = "CREATE TABLE mytable(id, user)";
$db_conn->exec($stmt);

二、如何写入文件:

使用方式和 MySQL 差不多。

$stmt = "INSERT INTO mytable(id, user) VALUES('1', 'AAA')";
$db_conn->exec($stmt);

三、如何使用资料:

使用方式和 MySQL 差不多。

$sth = $db_conn->prepare("SELECT id, user FROM mytable");
$sth->execute();
while($row = $sth->fetch(PDO::FETCH_ASSOC)){
echo $row['id'].':'.$row['user'].'';
}

网站或者广告联盟为了追踪用户访问记录,利用cookie是一个比较方便的技术实现,但是现在网民越来越关心cookie带来的隐私问题,那么现在一种新的技术“帆布指纹识别”或许可能替代。

【前言】

一般情况下,网站或者广告联盟都会非常想要一种技术方式可以在网络上精确定位到每一个个体,这样可以通过收集这些个体的数据,通过分析后更加精准的去推送广告(精准化营销)或其他有针对性的一些活动。Cookie技术是非常受欢迎的一种。当用户访问一个网站时,网站可以在用户当前的浏览器 Cookie中永久植入一个含有唯一标示符(UUID)的信息,并通过这个信息将用户所有行为(浏览了哪些页面?搜索了哪些关键字?对什么感兴趣?点了哪些按钮?用了哪些功能?看了哪些商品?把哪些放入了购物车等等)关联起来。

而随着网民对个人隐私的重视,Cookie越来越不受待见。不少安全工具甚至是浏览器都开始允许或引导用户关闭Cookie功能,比如很多主流浏览器都有一个“隐私模式浏览”功能。这样以来,网站就很难追踪用户行为了。但仍然有一些方法可以让网站去追踪每一个访问者的行为,比如通过flash cookie的方式也可以达到唯一标识和追踪的目的。

笔者近期注意到,国外媒体报道了一种非常难以摆脱的新型在线追踪工具被用来尾随从白宫官网到色情网站YouPorn.com的热门网站的访问者。经过分析,这个就是另一种比较新的访客追踪技术:“帆布指纹识别”技术,具体代码见附录6。这个技术的独特之处是:它不像通过Cookie或者Flash Cookie等之类的方式,你基本是无法屏蔽它的。

【原理分析】

笔者收集整理了很多知名站点上的类似代码,详见附录4,从这些“帆布指纹识别”代码可以看出,均使用到了HTML5专属标签的一个现状:在绘制canvas图片时,同样的canvas绘制代码,不同机器和浏览器绘制的图片特征是相同并且独一无二的,这样以来,提取最简单的md5值便可以唯一标识和跟踪这个用户。

产生canvas元素,获取绘画的内容,需要使用到canvas.toDataURL()方法,该方法返回的是图片内容的base64编码字符串。对于PNG文件格式,以块(chunk)划分,最后一块是一段32位的CRC校验,提取这段CRC校验码便可以用于用户的唯一标识:

function bin2hex(s) {
    var i, l, o = '', n;
    s += '';

    for (i = 0, l = s.length; i < l; i++) {
            n = s.charCodeAt(i) .toString(16);
            o += n.length < 2 ? '0' + n : n;
    }

    return o;
}

 

var canvas = document.createElement(‘canvas’);
var ctx = canvas.getContext(’2d’);
var txt = ‘http://chenpeng.info/’;
ctx.textBaseline = “top”;
ctx.font = “14px ‘Arial’”;
ctx.textBaseline = “chenpeng.info”;
ctx.fillStyle = “#f60″;
ctx.fillRect(125,1,62,20);
ctx.fillStyle = “#069″;
ctx.fillText(txt, 2, 15);
ctx.fillStyle = “rgba(102, 204, 0, 0.7)”;
ctx.fillText(txt, 4, 17);
var b64 = canvas.toDataURL().replace(“data:image/png;base64,”,”");
var bin = atob(b64);
var crc = bin2hex(bin.slice(-16,-12));
console.log(crc);

ab99cca6

chrome隐身模式测试:

 

image

 

同一机器的chrome浏览器,无论正常模式还是隐身模式,得到的crc值始终一致。而对于不同机器得到的值是不同的,追踪效果显而易见。

看到这里,相信很多人想问,Why?为什么会出现这样的情况?同样的js代码,在不同设备的浏览器上,结果是唯一并且各不相同的。这到底是为什么?其实原因很简单,同样的HTML5 Canvas元素绘制操作,在不同的操作系统不同的浏览器上,产生的图片内容其实是不完全相同的。出现这种情况可能是有几个原因:

1、在图片格式上,不同web浏览器使用了不同的图形处理引擎、不同的图片导出选项、不同的默认压缩级别等。

2、在像素级别来看,操作系统各自使用了不同的设置和算法来进行抗锯齿和子像素渲染操作。

因此,即使是相同的绘图操作,最终产生的图片数据在hash层面上依然是不同的。这个具体代码层面,恐怕要去搞懂各个主流浏览器的实现和以及操作系统的渲染。笔者精力所限,短期很难给出。大家可以自行摸索下,欢迎交流J

【后话】

HTML5千变万化,利用canvas 这一特性来实现用户追踪,目前并没有好的对抗方案,未来也只能依靠广大浏览器厂商自行了断,实现canvas绘图机制的随机化或许可以很好的保护用户隐私,防止被追踪。

文中涉及到的代码和技术细节,只限用于技术交流,切勿用于非法用途。另外,如果想要研究更多的用户追踪技术,推荐去研究下大名鼎鼎的专注于访客追踪的开源项目:evercookie【附录5】,这个猥琐的小工具,通过几乎所有你想到和想不到的方式(Cookie、Flash、 Silverlight、Web History、HTTP ETags、Web cache、window.name caching、userData storage、HTML5、甚至是java的漏洞等)来跟踪访问网站的用户行为。

字符串匹配在php中非常常见,本文通过实例来讲解一下php中最简单的字符串匹配算法,希望初学php的同学通过本实例,对字符串匹配有所了解。

本文实例讲述了php中最简单的字符串匹配算法,具体实现方法如下:

 代码如下 复制代码
<?php
/*
最简单字符串匹配算法php实现方式
 
T: ababcabc
P: abc
 
0.          1.          2.
ababcabc    ababcabc    ababcabc
|||          |||          |||
abc          abc          abc
(X)          (X)          (O)
 
3.          4.          5.
ababcabc    ababcabc    ababcabc
  
|||          |||          |||
  
abc          abc          abc
  
(X)          (X)          (O)
*/
 
$str="ababcabc";
$search="abc";
 
$strlen=strlen($str);
$searchlen=strlen($search);
 
//1.遍历$str字符串
for($i=0;$i<$strlen;$i++){
    if($i+$searchlen>$strlen){
        echo '超出长度';break;
    }
 
    $match=true;
 
   
//2.遍历要搜索的字符串$search,进行对比
    for($j=0;$j<$searchlen;$j++){
 
        if($str[$i+$j]!=$search[$j]){
            $match=false;
            break;
        }
        $k=$i+$j;
        if($match){
            if($j==$searchlen-1){
                echo "{$str}第{$i}个位置开始为{$search}\n";break;
            }
        }
    }
}
?>

希望本文所述对大家的PHP程序设计有所帮助。

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

初学正则表达式的时候都有一个疑问,例如:需要匹配串 "_abc_123_" 中 第一对"_"之间的字符,刚开始学习正则表达式的时候会写成 "/_w*_/",匹配的结果就是"abc_123" 而不是"abc"了;大神说加上一个问号,"/_w*?_/",这时候匹配的结果就是"abc"。

我们知道'?'单独使用的时候表示:重复零次或一次,而当'?'出现在重复限定符后面的,起的作用就是懒惰匹配,也就是匹配尽可能少的字符。懒惰限定符说明:

*?:重复任意次,但尽可能少重复
+?:重复1次或更多次,但尽可能少重复
??:重复0次或1次,但尽可能少重复
{n,m}?:重复n到m次,但尽可能少重复
{n,}?:重复n次以上,但尽可能少重复

对的,“尽可能少重复”,这就是对懒惰匹配的粗暴直白的解说。

那么怎么理解“尽可能少重复”呢?我们可以从正则表达式的忽略优先量词来解释了。
忽略优先量词

量词"*?"、"+?"、"??"、"{n,m}?"、"{n,}?"都属于忽略优先量词,忽略优先量词使用的是在?、+、*、{}后面添加?组成的,忽略优先在匹配的时候首先会尝试忽略,如果失败后回溯才会选择尝试。比如`ab??`匹配“abb”会得到‘a’而不是“ab”。当引擎匹配成功a后,由于是忽略优先,引擎首先选择不匹配b,继续查看表达式,发现表达式结束了,那么引擎就直接上报匹配成功。具体我们通过下面的例子一步一步说明忽略优先量词工作原理。
例子

还是上面的例子,用"/_w*?_/"匹配"_abc_123_" 中 第一对"_"之间的字符。

开始匹配第一个'_'之后,‘w*?’首先决定不需要匹配任何字符,因为它是忽略优先量词,这时候就拿表达式'/_w*?_/'中的第二个'_'('w*?'后面的'_')和目标串'_abc_123_'中的'a'匹配,匹配失败,这时候才会拿'w*?'去尝试未匹配的分支(使用w匹配a,尝试匹配a成功)

下一步,是尝试匹配,还是忽略呢?因为'w*?'是忽略优先量词,会选择忽略,那么就是重复上一步,'_'匹配b失败,'w*?'去尝试未匹配的分支ab,以上步骤总共重复了3次后(直到表达式'w*?'后面的'_'和目标串第二个'_'匹配),最终匹配出'abc'。

过程(开始匹配第一个'_'之后):

表达式/_w*?_/'中的第二个'_'和目标串'_abc_123_'中的'a'匹配,匹配失败,'w*?'尝试匹配目标串'_abc_123_'中的'a',匹配成功。
表达式/_w*?_/'中的第二个'_'和目标串'_abc_123_'中的'b'匹配,匹配失败,'w*?'尝试匹配目标串'_abc_123_'中的'ab',匹配成功。
表达式/_w*?_/'中的第二个'_'和目标串'_abc_123_'中的'c'匹配,匹配失败,'w*?'尝试匹配目标串'_abc_123_'中的'abc',匹配成功。
表达式/_w*?_/'中的第二个'_'和目标串'_abc_123_'中的'_'匹配,匹配成功,匹配结束。结果为abc。

以上是阅读《精通正则表达式》关于忽略优先量词一节的想法,如有不对虚心接受各位的指教,谢谢!

总结:当正则表达式和字符串函数都能解决问题时,一定要使用字符串函数,这样不容易出错,最重要的是字符串函数比正则表达式实现性能上要好得多。

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

1.添加扩展包

 代码如下 复制代码

php_memcache.dll



2.在PHP.INI添加

 代码如下 复制代码
extension=php_memcache.dll



3.程序

 代码如下 复制代码
<?php

//创建一个mem对象实例
$mem=new Memcache;
 
if(!$mem->connect("10.18.110.213",11211)){
    die('连接失败!');
}

//增加

//1.增加一个字串
/*    if($mem->set('key1',"beijing",MEMCACHE_COMPRESSED,60)){
   
    echo '添加ok';
}*/

//2.添加数值
/*    if($mem->set('key1',100,MEMCACHE_COMPRESSED,60)){
   
    echo '添加ok';
}*/

//3.添加数组
//在添加数组是,根据需要. 希望序列号放入  ,
//serialize<=>unserialize, 如果根据需要,也可以json_encode <=> json_decode
$arr=array("bj",'tj');
if($mem->set('key1',$arr,MEMCACHE_COMPRESSED,time()+31*3600*24)){
   
    echo '添加数组ok99111';
}
//4.添加对象
/*    class Dog{
    public $name;
    public $age;
    public function __construct($name,$age){
        $this->name=$name;
        $this->age=$age;
    }
}

$dog1=new Dog('小狗',50);
if($mem->set('key1',$dog1,MEMCACHE_COMPRESSED,60)){
   
    echo '添加对象ok';
}*/

//5.添加null 布尔值
/*    if($mem->set('key1',false,MEMCACHE_COMPRESSED,60)){
   
    echo '添加布尔ok';
}*/

//6. 资源类型放入.
/*    $con=mysql_connect("127.0.0.1","root","root");
if(!$con){
    die('连接数据库失败');
}
var_dump($con);
echo "<br/>";
if($mem->set('key1',$con,MEMCACHE_COMPRESSED,60)){
   
    echo '添加资源ok';
}*/


//查询

$val=$mem->get('key1');
//修改
//可以使用replace
if($mem->replace("key11",'hello',MEMCACHE_COMPRESSED,60)){
    echo 'replace ok';
}else{
    echo 'replace no ok';
}



//删除
echo "<br/>";
if($mem->delete('key14')){
    echo 'key14 删除';
}else{
    echo 'key14不存在';
}

本文讲的是基础应用,如果需要更深入的学习,以后我们会出相应的教程,也可以下手册学习。

[!--infotagslink--]

相关文章

  • Painter绘制红衣喝酒男水粉画效果教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一说绘制红衣喝酒男水粉画效果的教程,各位想知道具体绘制步骤的使用者,那么下面就快来跟着小编一起看一看教程...2016-09-14
  • iPhone6怎么激活?两种苹果iPhone6激活教程图文详解

    iPhone6新机需要激活后才可以正常使用,那么对于小白用户来说,iPhone6如何激活使用呢?针对此问题,本文就为大家分别介绍Wifi无线网络激活以及iPhone6连接电脑激活这两种有效的方法,希望本文能够帮助到大家...2022-09-14
  • Photoshop制作雨中野外孤独行走的一头牛海报教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说下制作雨中野外孤独行走的一头牛海报的教程,各位想知道具体制作方法的使用者们,大家就快来看一看小编给...2016-09-14
  • Painter绘制帅气卡通魔法王子漫画教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一下绘制帅气卡通魔法王子漫画的具体教程,各位想知道绘制步骤的使用者,那么下面就快来跟着小编一起看一看教程...2016-09-14
  • Illustrator鼠绘堆雪人的孩童矢量插画教程

    今天小编在这里就来给各位Illustrator的这一款软件的使用者们来说说鼠绘堆雪人的孩童矢量插画的教程,各位想知道具体绘制方法的使用者们,那么各位就快来跟着小编来看看...2016-09-14
  • 美图秀秀给照片天空加蓝天白云教程一览

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下究竟该怎么给照片天空加蓝天白云的教程,各位想知道具体制作步骤的,那么下面就来跟着小编一起看看吧。 ...2016-09-14
  • 安卓手机app添加支付宝支付开发教程

    支付宝支付在国内算是大家了,我们到处都可以使用支付宝了,下文整理介绍的是在安卓app应用中使用支付宝进行支付的开发例子。 之前讲了一篇博客关与支付宝集成获取...2016-09-20
  • llustrator绘制扁平化风格卡通警察护士空姐肖像教程

    今天小编在这里就来给llustrator的这一款软件的使用者们来说一说绘制扁平化风格卡通警察护士空姐肖像的教程,各位想知道具体绘制步骤的使用者们,那么下面就快来跟着小编...2016-09-14
  • Illustrator绘制一个方形的录音机图标教程

    今天小编在这里就来给Illustrator的这一款软件的使用者们来说一下绘制一个方形的录音机图标的教程,各位想知道具体绘制方法的使用者们,那么下面就来看一下小编给大家分...2016-09-14
  • photoshop简单制作一个搞笑的换脸表情包教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说一说简单制作一个搞笑的换脸表情包的教程,各位想知道具体制作方法的使用者们,那么大家就快来看一看教程吧。...2016-09-14
  • photoshop给手绘画调色变换场景后期教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说说给手绘画调色变换场景的后期教程,各位想知道具体后期处理步骤的使用者们,那么大家就快来跟着小编来看...2016-10-02
  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • 美图秀秀让你胸丰满起来处理教程

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说一下让你胸丰满起来的处理教程,各位想知道具体处理步骤的,那么下面就快来跟着小编一起看一下教程吧。 给...2016-09-14
  • Painter绘制雷神传插画教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一下绘制雷神传插画的教程,各位想知道具体绘制步骤的使用者,那么下面就快来跟着小编一起看看绘制方法吧。 ...2016-09-14
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • MySQL中的联合索引学习教程

    联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进...2015-11-24
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • C#注释的一些使用方法浅谈

    C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25