201411-07 PHP特点之垃圾回收机制3——性能方面考虑的因素 在上一节我们已经简单的提到:回收可能根有细微的性能上影响,但这是把PHP5.2与PHP5.3比较时才有的。尽管在PHP5.2中,记录可能根相对于完全不记录可能根要慢些,而PHP5.3中对PHPrun-time的其他修改减少了这个性能损失。这里主要有两个领域对性能有影响。第一个是内存占用空间的节省,另一个是垃圾回收机制执行内存清理时的执行时间增加(run-timedelay)。我们将研究这两个领域。内存占用空间的节省首先,实现垃圾... 继续阅读 >
201411-07 PHP扩展之APC——Alternative PHP Cache(可选PHP缓存) 简介和安装配置AlternativePHPCache(APC)是一个开放自由的PHPopcode缓存。它的目标是提供一个自由、开放,和健全的框架用于缓存和优化PHP的中间代码。该扩展的各个版本安装包都在此处: http://pecl.php.net/package/apc.该PECL 扩展的 DLL 当前不可用。注意: 在Windows上,APC需要一个临时目录,并且Web服务器对这个目录可写,APC会检测TMP,TEMP,USERPROFILE这些Windows的环境变量,如果这些都没有,会检查系统... 继续阅读 >
201411-07 PHP扩展之错误处理和日志记录 简介PHP提供了错误处理和日志记录的功能.这些函数允许你定义自己的错误处理规则,以及修改错误记录的方式.这样,你就可以根据自己的需要,来更改和加强错误输出信息以满足实际需要.通过日志记录功能,你可以将信息直接发送到其他日志服务器,或者发送到指定的电子邮箱(或者通过邮件网关发送),或者发送到操作系统日志等,从而可以有选择的记录和监视你的应用程序和网站的最重要的部分。错误报告功能允许你自定义错误反馈的... 继续阅读 >
201411-07 PHP扩展之输出缓冲控制 简介当PHP脚本有输出时,输出控制函数可以用这些来控制输出。这在多种不同情况中非常有用,尤其是用来在脚本开始输出数据后,发送http头信息到浏览器。输出控制函数不影响由 header() 或 setcookie()发送的文件头信息,仅影响像 echo这样的函数和PHP代码块间的数据。注意:由于早先的版本的缺陷,当从PHP4.1.x(4.2.x,4.3.x)升级时,必须保证php.ini中的implicit_flush 是 OFF,否则任何用... 继续阅读 >
201411-07 PHP扩展之选项和配置信息 这些函数允许你获得许多关于PHP本身的参数,例如:运行时的配置,被加载的扩展,版本等。你也将找到设置你的运行中的PHP的选项的函数。可能最好用的PHP-函数 phpinfo() 可以在这里找到。选项和信息函数:assert_options —设置/获取断言的各种标志assert —检查一个断言是否为FALSEcli_get_process_title —返回当前的进程标题cli_set_process_title —设置进程标题dl —运行时载入一个PHP扩展extension... 继续阅读 >
201411-07 PHP扩展之基于命令行的扩展Readline 简介readline扩展函数实现了访问GNUReadline库的接口.这些函数提供了可编辑的命令行.一个例子是在Bash中允许你使用箭头按键来插入字符或者翻看历史命令.因为这个库的交互特性,这个功能在你写的Web程序中没多大用处,但是当你写的脚本被用在命令行中时非常有用.安装配置如果要使用readline函数,你必须安装libreadline,你也能使用非GPL的libedit库来替代readline库。要使用这些函数,你必须在编译PHP... 继续阅读 >
201411-07 PHP扩展之压缩与归档扩展1——Bzip2 bzip2函数用于透明地读写bzip2(.bz2)压缩文件。本模块使用了JulianSeward的 » bzip2 库中的函数。本模块需要bzip2/libbzip2版本>=1.0.x。PHP的 Bzip2 支持默认未打开。编译PHP时需要 --with-bz2[=DIR] 配置选项来激活bzip2支持。下面的范例打开一个临时文件并写入了一个测试字符串,然后输出该文件里的内容:Example#1bzip2小例子<?php$filename="/tmp/testfile.bz2";$str="Thisis... 继续阅读 >
201411-07 PHP扩展之压缩与归档扩展2——Phar Phar归档的概念来自Java™技术的JAR归档,它允许使用单个文件打包应用程序,这个文件中包含运行应用程序所需的所有东西。该文件不同于单个可执行文件,后者通常由编程语言生成,比如C,因为该文件实际上是一个归档文件而非编译过的应用程序。因此JAR文件实际上包含组成应用程序的文件,但是考虑到安全性,不对这些文件进行仔细区分。Phar扩展正是基于类似的理念,但是在设计时主要针对PHP的Web环境。同样,与JAR归... 继续阅读 >
201411-07 PHP扩展之压缩与归档扩展3——Zip 此扩展可以让你透明地读写ZIP压缩文档以及它们里面的文件。在PHP5.2以后,为了使用这些函数,必须在编译PHP时用 --enable-zip 配置选项来提供zip支持。Example#1创建一个Zip归档<?php$zip=newZipArchive();$filename="./test112.zip";if($zip->open($filename,ZIPARCHIVE::CREATE)!==TRUE){exit("cannotopen<$filename>\n");}$zip->addFromString("testfilephp.txt".time()... 继续阅读 >
201411-07 PHP扩展之压缩与归档扩展4——Zlib 大多数文件系统函数使用gzip来压缩文件,本模块可以帮助透明读取gzip压缩文件。在PHP中Zlib支持默认并没有开启。需要安装配置PHP的时候使用 --with-zlib[=DIR]。下面这个例子开启了一个临时文件来写入测试字符串,然后两次打印文件内容。Example#1简单的Zlib示例<?php$filename=tempnam('/tmp','zlibtest').'.gz';echo"<html>\n<head></head>\n<body>\n<pre>\n";$s="Onlyatest,test,test,test,... 继续阅读 >
201411-07 PHP数据库抽象层之PDO(一)——简介和安装配置 简介PHP数据对象 (PDO)扩展为PHP访问数据库定义了一个轻量级的一致接口。实现PDO接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。注意利用PDO扩展自身并不能实现任何数据库功能;必须使用一个 具体数据库的PDO驱动 来访问数据库服务。PDO提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。PDO 不提供 数据库 抽象层;它不会重写SQ... 继续阅读 >
201411-07 PHP数据库抽象层之PDO(二)——连接与连接管理 连接是通过创建PDO基类的实例而建立的。不管使用哪种驱动程序,都是用PDO类名。构造函数接收用于指定数据库源(所谓的DSN)以及可能还包括用户名和密码(如果有的话)的参数。Example#1连接到MySQL<?php$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);?>如果有任何连接错误,将抛出一个 PDOException 异常对象。如果想处理错误状态,可以捕获异常,或者选择留给通过 set_exception_handler(... 继续阅读 >
201411-07 PHP数据库抽象层之PDO(三)——事务与自动提交 现在通过PDO连接上了,在开始进行查询前,必须先理解PDO是如何管理事务的。事务支持四大特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability)。通俗地讲,在一个事务中执行的任何操作,即使是分阶段执行的,也能保证安全地应用于数据库,并在提交时不会受到来自其他连接的干扰。事务操作也可以根据请求自动撤销(假设还没有提交),这使得在脚本中处理错误更加容易。事务... 继续阅读 >
201411-07 PHP数据库抽象层之PDO(四)——预处理语句与存储过程 很多更成熟的数据库都支持预处理语句的概念。什么是预处理语句?可以把它看作是想要运行的SQL的一种编译过的模板,它可以使用变量参数进行定制。预处理语句可以带来两大好处:查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次。当查询准备好后,数据库将分析、编译和优化执行该查询的计划。对于复杂的查询,此过程要花费较长的时间,如果需要以不同参数多次重复相同的查询,那么该过程将大大降低应用程序的速... 继续阅读 >
201411-07 PHP数据库抽象层之PDO(五)——错误与错误处理 PDO提供了三种不同的错误处理模式,以满足不同风格的应用开发:PDO::ERRMODE_SILENT此为默认模式。PDO将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象。如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的 PDOStatement::errorCode() 或 PDOStatement::errorInfo() 方法。如果错误是由于调用数据库对象而产生的,那么可以在数据库对象上调用上述两个方... 继续阅读 >
201411-07 PHP数据库抽象层之PDO(六)——大对象(LOBs) 应用程序在某一时刻,可能需要在数据库中存储“大”数据。“大”通常意味着“大约4kb或以上”,尽管某些数据库在数据达到“大”之前可以轻松地处理多达32kb的数据。大对象本质上可能是文本或二进制。在PDOStatement::bindParam() 或 PDOStatement::bindColumn()调用中使用 PDO::PARAM_LOB 类型码可以让PDO使用大数据类型。PDO::PARAM_LOB 告诉PDO作为流来映射数据,以便能使用 PHPStreamsAPI 来操作。Example#1... 继续阅读 >