轻型数据库SQLite结合PHP的开发

 更新时间:2016年11月25日 16:14  点击:1369

SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界闻名的数据库治理系统来讲,它的处理速度比他们都快。

SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:

ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE

同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得有点象,但是事实上它们区别很大。比如SQLite支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。假如你是个很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,那么现在你可以考虑使用SQLite。目前它的最新版本是 3.2.2,它的官方网站是:http://www.sqlite.org,能在上面获得源代码和文档。同时因为数据库结构简单,系统源代码也不是很多,也适合想研究数据库系统开发的专业人士。

现在我们开始简单的介绍,主要我是想讲清楚几个问题,一是如何安装使用,二是如何跟PHP结合开发。

一、安装

1. Windows平台

下载windows下的文件,其实就是一个命令行程序,(下载地址:http://www.sqlite.org/sqlite-3_2_2.zip),这个命令行程序用来包括生成数据库文件、执行SQL查询、备份数据库等等功能。
下载后比如我们解压缩到 D:Downloadssqlitesqlite-3_2_2 这个目录下,那么我们进入cmd,并且进入该目录:
cd D:Downloadssqlitesqlite-3_2_2
D:Downloadssqlitesqlite-3_2_2>sqlite3 test.db
# 假如test.db不存在,那么就产生一个数据库文件,假如存在就直接使用该数据库文件,相当于mysql中的use
SQLite version 3.2.2
Enter ".help" for instructions
sqlite>
# SQLite的提示符,假如想查看命令帮助输入 .help,在sqlite中所有系统命令都是 . 开头的:
sqlite> .help
.databases List names and files of attached databases
.dump ?TABLE? ... Dump the database in an SQL text format
.echo ON|OFF Turn command echo on or off
.exit Exit this program
.explain ON|OFF Turn output mode suitable for EXPLAIN on or off.
.header(s) ON|OFF Turn display of headers on or off
.help Show this message
.import FILE TABLE Import data from FILE into TABLE
.indices TABLE Show names of all indices on TABLE
.mode MODE ?TABLE? Set output mode where MODE is one of:
csv Comma-separated values
column Left-aligned columns. (See .width)
html HTML <table> code
insert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values
tcl TCL list elements
.nullvalue STRING Print STRING in place of NULL values
.output FILENAME Send output to FILENAME
.output stdout Send output to the screen

wget http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2 tar jxf eaccelerator-0.9.5.2.tar.bz2 [@wcms_web eaccelerator-0.9.5.2]# export PHP_PREFIX=\'/usr/local/bin\'
[@wcms_web eaccelerator-0.9.5.2]# $PHP_PREFIX/phpize
★ ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/php-config (PHP4版本编译) ◆ ./configure --enable-eaccelerator=shared --with-eaccelerator-shared-memory --with-php-config=$PHP_PREFIX/php-config (php5版本需要加 --with-eaccelerator-shared-memory) #上面~需要拼到whereis phpize /usr/local/bin/phpize 这个目录即可 [@wcms_web eaccelerator-0.9.5.2]# make
[@wcms_web eaccelerator-0.9.5.2]# make install
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20050922/
创建专用的缓存目录:
mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator 然后设置 php.ini, 重启一下apache:
/home/apache/bin/apachectl restart 说明PHP 与 eAccelerator 也需要版本对称才可以. 现PHP Version 5.1.6 与~eaccelerator-0.9.5.1就可以了~ ########################################################################### 设置 php.ini 如下设置:;eAccelerator
extension="/usr/local/lib/php/extensions/no-debug-non-zts-20050922/eaccelerator.so"
eaccelerator.shm_size = "1024"
eaccelerator.cache_dir = "/var/cache/eAcache"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.debug = "0"
eaccelerator.check_mtime = "1"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "7200"
eaccelerator.shm_only = "1"
eaccelerator.compress = "1"
eaccelerator.compress_level = "3"
eaccelerator.keys = "shm_only"
eaccelerator.sessions = "shm_only"
eaccelerator.content = "shm_only"
--------------------------------------------------------------------------------
;extension="eaccelerator.so"
zend_extension="/usr/lib/php4/eaccelerator.so"
;zend_extension_ts="/usr/lib/php4/eaccelerator.so"
;extension="eaccelerator.dll"
;zend_extension_ts="c:\\php4\\eaccelerator.dll"
;zend_extension="c:\\php4\\eaccelerator.dll" 您必须取消一条注释 (而且同时只能是一条被取消) 以便使用下面的描述来装载 eAccelerator 的扩展.
eAccelerator 兼容于 Zend Optimizer’s loader. Zend Optimizer 在 eAccelerator 的安装结束进行后必须在 php.ini 中配置. 假如您不 使用用脚本来编码的 Zend Encoder ,那么我们不推荐您安装成 Zend Optimizer 加上 eAccelerator 这种模式.
--------------------------------------------------------------------------------
eaccelerator.shm_size = "64" eAccelerator 可以使用的共享内存的数量 (以兆为单位) . "0" 是指操作系统的默认值. 默认值是 "0".
--------------------------------------------------------------------------------
eaccelerator.cache_dir = "/tmp/eaccelerator" 这个目录是给磁盘缓存使用. eAccelerator 在这里储存预先编译好的代码, 进程数据, 内 容以及用户的自定义内容. 同样的数据也能被储存在共享内存中 (这样可以提高访问速度). 默认的设置是 "/tmp/eaccelerator".
--------------------------------------------------------------------------------
eaccelerator.enable = "1" 打开或者关闭 eAccelerator. "1" 是指打开, "0" 是指关闭. 默认值是 "1".
--------------------------------------------------------------------------------
eaccelerator.optimizer = "1" 打开或者关闭内置的 peephole optimizer,它可以提高代码的执行速度. "1" 是指打开, "0" 是指关闭. 默认 值是 "1".
--------------------------------------------------------------------------------
eaccelerator.debug = "0" 打开或者关闭调试记录. "1" 是指打开, "0" 是指关闭. 默认值是 "0".
--------------------------------------------------------------------------------
eaccelerator.check_mtime = "1" 打开或者关闭 PHP 的文件修改检查. "1" 是指打开, "0" 是指关闭. 假如您在修改以后重新编译 PHP 的文 件,那么您应当设置为 "1". 默认值是 "1".
--------------------------------------------------------------------------------
eaccelerator.filter = "" 决定哪些 PHP 文件应该被缓存. 您可以指定一个范围 (比如 "*.php *.phtml"),这样被指定的文件就会被缓存或 者被排出在外. 假如使用字符 "!" 来指定这个范围, 符合这个范围的文件就被排出在外. 默认值是 "" ,意思是说 - 所有的 PHP 脚本都会被 缓存.
--------------------------------------------------------------------------------
eaccelerator.shm_max = "0" 利用 "eaccelerator_put()" 这个功能选项来关闭在共享内存中加载大量数据. 它指出最大的被答应的大小,以 字节为单位 (10240, 10K, 1M). 使用 "0" 来关闭这个限制. 默认值是 "0".


--------------------------------------------------------------------------------
eaccelerator.shm_ttl = "0" 当 eAccelerator 尝试从共享内存中获得数据来创建新的脚本缓存但失败以后,它从共享内存中删除所有的至少 在 "shm_ttl" 秒以前没有被访问的脚本。默认值是 "0" ,意思是说 - 不要从共享内存中删除任何文件.
--------------------------------------------------------------------------------
eaccelerator.shm_prune_period = "0" 当 eAccelerator 尝试从共享内存中获得数据来创建新的脚本缓存但失败以后,它尝试删除旧的脚本, 前提是在这之前的这个尝试在超过 "shm_prune_period" 秒之前被执行. 默认值是 "0" ,意思是说 - 不要尝试从共享内存中删除任何文件.
--------------------------------------------------------------------------------
eaccelerator.shm_only = "0" 打开或者关闭在磁盘上缓存编译过的脚本. 这个参数对会话数据和内容缓存没有效果. 默认值是 "0" ,意思是 说 - 使用磁盘和共享内存来缓存。
--------------------------------------------------------------------------------
eaccelerator.compress = "1" 打开或者关闭缓存后的内容压缩. 默认值是 "1" ,意思是说打开压缩.
--------------------------------------------------------------------------------
eaccelerator.compress_level = "9" 内容缓存后被压缩的程度. 默认值是 "9" ,意思是说使用最大程度的压缩率。
--------------------------------------------------------------------------------
eaccelerator.keys = "shm_and_disk"
eaccelerator.sessions = "shm_and_disk"
eaccelerator.content = "shm_and_disk" 决定哪些 keys, 会话数据和内容被缓存. 可能的值是: "shm_and_disk", 在共享内存中和磁盘上缓存数据 (默认值)
"shm", 在共享内存中或者磁盘上缓存数据,假如共享内存被使用的尺寸已经超过 "eaccelerator.shm_max" 所定义的范围。
"shm_only", 在共享内存中缓存数据
"disk_only", 在磁盘上缓存数据
"none", 不缓存任何数据 --------------------------------------------------------------------------------
eaccelerator.admin.name="yourusername"
eaccelerator.admin.password="yourpassword" 您可以使用 eaccelerator.php 通过网页的页面来治理 eAccelerator. 您应该把这个文件放 在您的网站上. 为了安全,推荐您不要通过您本地的IP地址来访问这个脚本。 创建 eAccelerator 的密码 php -q eaccelerator_password.php
改变网页页面方式访问 (eaccelerator.php)这个文件的访问密码 Enter admin name: admin
New admin password: eaccelerator
Retype new admin password: eaccelerator

文涉及权限管理的一种面向对象模型的方法和实现。通过分析每次访问发生场景的各要素,并对各要素进行抽象而形成的一种模型,并可用于实现权限访问控制。原谅我自己取了什么“四维权限管理模型”“访问控制矩阵(ACM)”这样难听的名字,还多少有故弄玄虚之嫌,但我在半年前只有这样的见识。

 

1、访问控制矩阵(ACM)

说明:任意对系统使用者产生价值的用例中的操作均在以下四个维度加以控制:

l         Operator(操作者权限控制):

进行某种操作时,操作的主体。分为:用户,角色,单位

l         OperateMethod(操作方法权限控制):

操作的功能确定,如:读、写、查、删等

l         Object(操作对象权限控制):

操作的影响对象,通常是某种业务对象,如:表单

l         Object.Fields(操作对象属性项权限控制)

业务要求对选项敏感的对象属性项,如:表单的某数据项、表单上的简单控件等

 

2、ACM中四维数据的组成

Operator:操作者,根据业务的需要设定控制项目主要分为用户、角色、单位三种。根据业务的需要,可以控制Operator的作用先后顺序或交并运行规则;

Operate Method:操作方法,根据业务操作的对象的不同,可能是业务操作或是底层的CRUD操作;

Object:操作对象,当前操作的对象,根据业务需求可以是:业务对象,如:项目、表单;

Object Fields:操作对象属性,要求与权限控制绑定的对象的数据项。如:表单字段、表单控件等。

 

3、原理简述

ACM在权限管理和访问控制时的作用原理。一个ACM是由若干控制系统某项操作行为的若干要素组成的规则矩阵。设想一个场景,当某项操作进行时,必然有如下元素:操作者、操作方法、操作对象。所有ACM就指定了一次操作必须满足的各元素的条件。如:有ACM如下:“李厚强”、“修改”、“用户信息”。就代表:“李厚强可以修改用户信息”。当然这是一个简单的例子,事实上,情况远比这个例子复杂。首先要解决的就是操作对象的实例定位问题。即当如下访问控制出现时:“李厚强可以修改用户信息中的姓名,但不能修改用户信息中的身份证号”。很明显,现有的三维ACM已经不能满足要求了。

ACM中的操作对象之所有成为对象,是因为其具有以下两种特征:一是对象是数据的封装、二是对象本身包含对现实对象的抽象。数据的封装简化了数据处理,抽象使得对象的形式更统一、方法数量可控制。但是,当业务要求权限控制到对象的成员这一级别时,这样的封装和抽象无疑将屏蔽掉对象成员的权限敏感性。解决的方法有两种:

 

方法1:将对象的有权限敏感的成员也抽象为ACM中的对象

Operator               Operate Method                  Object

 

//author:heaven
//文件下载
function download($file_dir,$file_name)
//参数说明:
//file_dir:文件所在目录
//file_name:文件名
{
     $file_dir = chop($file_dir);//去掉路径中多余的空格
     //得出要下载的文件的路径
     if($file_dir != '')
     {
         $file_path = $file_dir;
         if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != '/')
             $file_path .= '/';
         $file_path .= $file_name;
     }           
     else
         $file_path = $file_name;   

   
     //判断要下载的文件是否存在
     if(!file_exists($file_path))
     {
         echo '对不起,你要下载的文件不存在。';
         return false;
     }

     $file_size = filesize($file_path);

     header("Content-type: application/octet-stream");
     header("Accept-Ranges: bytes");
     header("Accept-Length: $file_size");
     header("Content-Disposition: attachment; filename=".$file_name);
 
  //echo file_get_contents($file_path);
   
     $fp = fopen($file_path,"r");
     $buffer_size = 1024;
     $cur_pos = 0;
   
     while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
     {
         $buffer = fread($fp,$buffer_size);
         echo $buffer;
         $cur_pos += $buffer_size;
     }
   
     $buffer =@fread($fp,$file_size-$cur_pos);
     echo $buffer;
  
     fclose($fp);
     return true;
 

}

 

 

页面处理部分

$dir = "../main/trade_log";  
// Open a known directory, and proceed to read its contents  
if (is_dir($dir))
 {  
     $filename=array();
    if ($dh = opendir($dir))
    {  
     while (($file = readdir($dh)) !== false)
   {  
      if ($file!="." && $file!=".." && $file!=".svn")
    {

           $filename[]=$file;
    }  
    }  
     closedir($dh);  
    }  
}  

if(isset($_GET['logname']))
{

   download("../main/trade_log",$_GET['logname']);
   exit;

}
$smarty->assign("trade_log_list",$filename);

 

注意这块

   download("../main/trade_log",$_GET['logname']);
   exit;

一定要加exit

否则下载的文件display的部分也要输出

<?
$arr=getimagesize("images/album_01.gif");
echo $arr[3];
$strarr=explode("/"",$arr[3]);
echo $strarr[1];
?>

<HTML>
<HEAD>
<TITLE>演示图片等比例缩小</TITLE>
<script>
function Wa_SetImgAutoSize(img)
{
//var img=document.all.img1;//获取图片
var MaxWidth=200;//设置图片宽度界限
var MaxHeight=100;//设置图片高度界限
var HeightWidth=img.offsetHeight/img.offsetWidth;//设置高宽比
var WidthHeight=img.offsetWidth/img.offsetHeight;//设置宽高比
alert("test"+img.offsetHeight+img.fileSize);
if(img.offsetHeight>1) alert(img.offsetHeight);
if(img.readyState!="complete"){
 return false;//确保图片完全加载
}

if(img.offsetWidth>MaxWidth){
img.width=MaxWidth;
img.height=MaxWidth*HeightWidth;
}
if(img.offsetHeight>MaxHeight){
img.height=MaxHeight;
img.width=MaxHeight*WidthHeight;
}
}

function CheckImg(img)
{
 var message="";
 var MaxWidth=1;//设置图片宽度界限
 var MaxHeight=1;//设置图片高度界限
 
 if(img.readyState!="complete"){
  return false;//确保图片完全加载
 }
 if(img.offsetHeight>MaxHeight) message+="/r高度超额:"+img.offsetHeight;
 if(img.offsetWidth>MaxWidth) message+="/r宽度超额:"+img.offsetWidth;
 if(message!="") alert(message);
}
</script>
</HEAD>
<BODY>
<img src="images/frequency.gif" border=0 id="img1" onload="CheckImg(this);">
<br>
<input id=inp type="file" onpropertychange="img1.src=this.value;">
</BODY>
</HTML>

[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • php简单数据操作的实例

    最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • 解决Mybatis 大数据量的批量insert问题

    这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
  • Antd-vue Table组件添加Click事件,实现点击某行数据教程

    这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17
  • 详解如何清理redis集群的所有数据

    这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • vue 获取到数据但却渲染不到页面上的解决方法

    这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • mybatis-plus 处理大数据插入太慢的解决

    这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
  • php把读取xml 文档并转换成json数据代码

    在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • postgresql数据添加两个字段联合唯一的操作

    这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • Vue生命周期activated之返回上一页不重新请求数据操作

    这篇文章主要介绍了Vue生命周期activated之返回上一页不重新请求数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-26