仓酷云

标题: PHP编程:BS布局中利用PHP会见ORACLE LOB [打印本页]

作者: 兰色精灵    时间: 2015-2-4 00:29
标题: PHP编程:BS布局中利用PHP会见ORACLE LOB
不过还好,PHP语言给出的语法错误很详细,只要稍微熟悉一点之后,看错误提示就能很容易找出错误所在的。PHP还有一个特别好用的调试功能,在PHP语句中,你可以随时用echo来输出结果。oracle|会见   摘要:本文引见了若何使用PHP的数据库会见手艺完成对ORACLE LOB数据对象的存储。

  关头字:PHP;ORACLE; LOB;存储;

  引言

   PHP,即“PHP: Hypertext Preprocessor”,是一种普遍用于 Open Source(开放源代码)并可以嵌入 HTML 的多用处剧本言语。它的语法接近 C、Java 和 Perl,易于进修。该言语的次要方针是让 Web 开辟人员疾速的书写静态生成的网页,但是,PHP 的功效其实不局限于此。PHP广泛被以为可以更快和更无效地完成庞杂的编程义务,并且恰是由于它的更不乱和占用更少资本的长处成为开辟B/S布局体系的必备的WEB剧本设计言语,饰演着相似两头件的脚色,即语法解析与履行。

  ORACLE LOB数据模子

   在B/S(Browser/Server,阅读器/办事器)使用体系中,需求存储的已不单单是复杂的文字信息,同时还包含一些图片和音像材料或是超长的文本。好比开辟一套公函体系,公函中的图表、附件等二进制文件或超长文本将没法利用通俗的字符或其他类型的数据描写,这就请求后台数据库要有存储这些数据的才能。应用Oracle LOB对象可完成该功效。

   Oracle LOB是用来存储大批的二进制和文本数据的一种数据类型(一个LOB字段可存储可多达4GB的数据)。今朝,它又分为两品种型:外部LOB和内部LOB。外部LOB将数据以字撙节的模式存储在数据库的外部。因此,外部LOB的很多操作都可以介入事务,也能够像处置通俗数据一样对其停止备份和恢复操作。Oracle8i撑持三品种型的外部LOB:BLOB(二进制数据)、CLOB(单字节字符数据)、NCLOB(多字节国度字符数据)。个中CLOB和NCLOB类型合用于存储超长的文本数据,BLOB字段合用于存储大批的二进制数据,如图象、视频、音频等。今朝,Oracle8i只撑持一种内部LOB类型,即BFILE类型。在数据库内,该类型仅存储数据在操作体系中的地位信息,而数据的实体之外部文件的模式存在于操作体系的文件体系中。因此,该类型所暗示的数据是只读的,不介入事务。该类型可匡助用户办理大批的由内部法式会见的文件。

  PHP Oracle 8 函数剖析

   PHP中有两套ORACLE函数扩大库,个中的ORACLE8函数答应会见 Oracle8 和 Oracle7 数据库,这些函数利用了Oracle8 Call-Interface(OCI8),撑持向 Oracle 地位标记符绑定部分和全局 PHP 变量,周全撑持 LOB、FILE 和 ROWID,答应用户利用用户自界说的变量,即用户数据库的自界说对象类。

   Oracle8函数库中函数OCIFetchInto用于取回一行数据纪录放入数组中,该函数的语法描写以下:

int OCIFetchInto(array &result, int [mode])
   个中,参数mode可省略,内定值为OCI_NUM。在会见Oracle LOB时,假如但愿前往LOB对象,则mode应设为OCI_ASSOC+OCI_RETURN_LOBS。

   函数OCIBindByName用于将PHP变量与Oracle对象停止绑定,从而创立PHP与Oracle之间的数据通信,该函数语法描写为:

boolean OCIBindByName(int stmt, string ph_name, mixed &variable, int length, int [type])
   个中:参数stmt是经由Oracle解析函数OCIParse解析后的字串目标。参数ph_name即需绑定的ORACLE前往变量称号;参数variable后面必定要加&符号,表PHP变量地址。参数length为变量的长度,若设为-1则利用指定的variable变量的最大值;参数type可省略,其值有OCI_B_FILE(二进制文件)、OCI_B_CFILE(文本文件)、OCI_B_CLOB(文字LOB)、OCI_B_BLOB(位元LOB)及OCI_B_ROWID(ROWID)等数种。值得注重的是,如利用Oracle8中独有的新数据类型LOB/ROWID/BFILE时,需求先履行 OCINewDescriptor()函数,同时必需要将length参数设成 -1。

   函数OCINewDescriptor用于初始化新的LOB/FILE描写。该函数语法描写为:

string OCINewDescriptor(int connection , int [type])
   个中的type同OCIBindByName函数中的type界说。

  必需的情况设置装备摆设

   利用PHP的ORACLE8函数库需求Oracle8客户端库。在利用这个扩大之前,请确认你已为Oracle 用户和WEB daemon 用户准确设置了 Oracle 情况变量。上面列出了需求设置的情况变量:
  为Linux情况下验证以上变量是不是准确,最好的举措就是分离在oracle用户与nobody下履行:

# env
   依据输入的了局,判别上述情况变量是不是分歧。

   在为WEB 办事器用户设置情况变量以后,你还需求将WEB 办事器用户(nobody、 www)加到oracle组中。

   有关ORACLE8客户端和PHP装置设置的具体申明,请参考相干的手艺手册。

  使用典范

   在PHP中上载并将文件存储在ORACLE LOB字段中的使用典范以下:

//LOB对象初始化,获得PHP变量指针

$lob = OCINewDescriptor($conn, OCI_D_LOB);

//向有关的文件纪录表添加记载,ORACLE SQL语法注释

$stmt = OCIParse($conn,"update T_FILE set FILENAME='".$_FILES['FJ1']['name'].
"',FILETYPE='".$_FILES['F1']['type']."',FILES=EMPTY_BLOB() where FILEID=".$newid." returning FILES into :lob");

//绑定LOB变量

OCIBindByName($stmt, ':lob', &$lob, -1, OCI_B_BLOB);

OCIExecute($stmt, OCI_DEFAULT);//履行语句

if($lob->savefile($F1)){//将表单提交的文件经由过程lob指针存入ORACLE数据库

OCICommit($conn);

//胜利上传

}else{

//未能胜利上传

}

OCIFreeDesc($lob);

OCIFreeStatement($stmt);

//停止
  在PHP中将文件从数据库中提取并下载的使用典范以下:

$stmt = OCIParse($conn,"SELECT * FROM T_ FILE WHERE FILEID =$ID");

OCIExecute($stmt);

if(OCIFetchInto($stmt,$result,OCI_ASSOC+OCI_RETURN_LOBS)){

//输入文件类型信息供阅读器判别

header("Content-type: ".$result[FILETYPE]);

//输入文件名,阅读器可提醒是不是翻开或下载该文件

header("Content-Disposition: attachment; filename=".$result[FILENAME]);

//以上关于header函数的利用可参考PHP manual,HTML的文件头信息请参考Internet RFC 2616。

//输入文件流,在此,阅读器获得文件内容,呈现正鄙人载或直接翻开文件的提醒

echo $result[FILES];

}

OCIFreeStatement($stmt);

//停止

  以上典范仅是使用的关头语句,并在Linux+PHP+Apache+Oracle8i平台上经由过程了验证,读者可依据本身需求停止完美和增补。

  停止语

  本文切磋PHP对ORACLE LOB会见的完成,仅是PHP在B/S布局体系中根基应用手艺所触及的一个方面。笔者曾对照了JDBC与PHP-OCI二者的履行效力,以JDBC为会见引擎的OAS HTTP Server(HTTP Server为apache2.0)的呼应速度要逊于创立在Linux+Aache+PHP-OCI平台之上的WEB Server,这个中固然有Linux的精彩体现,但不成否定的是,PHP与OCI的组合长短常优异的。

  因为缺少ORACLE LOB与PHP ORACLE8函数库相联合应用的测验考试,在开辟信息办理体系中,为完成对大型数据文件的办理,PHP在此方面的功效并未失掉无效的使用,但愿本文对从事PHP数据库手艺却碰到此方面困难的法式员会有所匡助。
  另外要叮嘱各位的是,抵御诱惑,ASP/PHP/JSP/.NET的对比也许会让你无所适从,你也许学了一半PHP,又开始打C#的主意,或者有人说JAVA很强,这个时候的你绝对不能动摇,哪怕你真想学。
作者: 蒙在股里    时间: 2015-2-4 13:13
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
作者: 若相依    时间: 2015-2-9 23:14
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: admin    时间: 2015-2-26 02:13
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
作者: 不帅    时间: 2015-2-27 16:47
做为1门年轻的语言,php一直很努力。
作者: 深爱那片海    时间: 2015-3-9 10:06
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
作者: 冷月葬花魂    时间: 2015-3-11 13:23
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
作者: 只想知道    时间: 2015-3-18 13:30
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 透明    时间: 2015-3-22 05:10
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
作者: 金色的骷髅    时间: 2015-3-27 03:10
Ps:以上纯属原创,如有雷同,纯属巧合
作者: 飘飘悠悠    时间: 2015-3-27 18:08
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
作者: 老尸    时间: 2015-4-1 12:08
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
作者: 灵魂腐蚀    时间: 2015-4-1 15:12
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
作者: 变相怪杰    时间: 2015-4-6 20:08
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 海妖    时间: 2015-4-7 14:38
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
作者: 若天明    时间: 2015-4-16 09:26
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 分手快乐    时间: 2015-4-21 18:21
爱上php,他也会爱上你。
作者: 再见西城    时间: 2015-4-26 20:10
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者: 活着的死人    时间: 2015-4-27 19:32
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: 再现理想    时间: 2015-5-1 21:50
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2