PHP类库解析DOM

PHP本身内置了解析DOM的类,但是用起来有些不爽,如同在前端写JS操作DOM,悲催无比。后端如果有类似jQuery语法接口的库,那操作起来DOM就会变得很容易。网络上有个库,语法类似jQuery,名字叫做PHP Simple HTML DOM Parser。 后端解析DOM,内容是字符串或者文本文件。 $html = file_get_html($filename); // 文件文件 $html = str_get_html($string); // 字符串 获取DOM节点元素。 // 获取li节点下的文本 foreach($html->find('ul li') as $li) { $li->text(); } // 获取节点的属性 $html->find('img')->getAttribute('src') 修改节点元素。 // 将img节点的data-img属性和src属性对换 foreach($html->find('.lazy_img') as $lazy_img) { $data_img = $lazy_img->getAttribute('data-img'); $src = $lazy_img->getAttribute('src'); $img = $html->find('.lazy_img', $i); $img->setAttribute('src', $data_img); $img->set » » »阅读更多

PHP检测函数所在的文件名

很简单的功能,用到PHP中的反射机制,具体使用的是ReflectionFunction类,可以获取指定函数所在PHP脚本中的具体位置。 创建引用脚本。 // Filename: functions.php <?php function now() { return time(); } ?> 调用函数。 // Filename: call_now.php <?php require 'functions.php';   Reflection::export(new ReflectionFunction('now')); // Function [ function now ] { @@ H:\www\functions.php 2 - 4 } ?> 阅读更多

PHP关于目录和文件操作的函数

文件是通过信息节点来组织的。每个文件(以及文件系统的其他部分,如目录、设备和连接)都拥有自己的信息节点。这个信息节点包含一个指向文件数据块位置和所有与文件相关元数据的指针。目录的数据块中保存着目录中文件的名称以及每个文件的信息节点。 opendir()函数接受一个目录参数,如果成功则返回一个目录句柄,用于closedir()、readdir()、rewinddir()调用。 readdir()读取指定目录下的所有文件,一般在循环中处理,正确遍历目录的方法: while (false !== ($file = readdir($dir))) closedir()关闭一个打开的目录句柄。 下面是PHP中文件和目录操作的一些函数 判断文件是否存在 file_exists(filename) 取得文件的访问时间 fileatime(filename) 元数据修改时间 filectime(filename) 文件拥有者所在的组 filegroup(filename) 文件的信息节点数 fileinode(filename) 内容的最后修改时间 filemtime(filename) 文件所有者 fileowner(filename) 返回文件或目录的权 » » »阅读更多

PHP之simpletest单元测试

程序开发中测试是必不可少的,对于小型项目,随处可见的是echo式的测试方式,随着项目的逐渐变大,单步测试的方式越来越不可取,也许单元测试可以是好的替代方式。我所了解的PHP下的测试程序有PEAR项目中的PHPUnit,以及simpletest。这里只是介绍一下simpletest。 首先需要下载simpletest,然后放到可以访问到的目录中就可以了。simpletest对通过测试的程序显示一个绿色的元素,而无法通过测试则显示红色的。 <?php require_once 'simpletest/unit_tester.php'; require_once 'simpletest/reporter.php'; // 包含进来这两个文件 function add($var1, $var2) { return $var1 + $var2; } class BasicUnitTest extends UnitTestCase { // 从UnitTestCase类继承 function BaicUnitTest($name = '') { $this->UnitTestCase($name); // $name作为测试页的heading显示 } function testEqual() { $this->assertEqual(25,  » » »阅读更多

使用Flickr API构建应用

互联网的mashup模式开发越来越流行,网站已经不是单纯地提供信息,更多的是集成更多的服务,构建大型的应用程序。这种趋势越来越明显,很多大的互联网公司都公布了自己的API接口,提供给开发者更多的可操作资源。Google Map提供的是JavaScript接口,以前了解过一些,大概忘得差不多了。Google Chrome extension里提供的一个小例子是从Flickr请求图片,里面的请求脚本是用JavaScript写的,自己写了段脚本,不过无法从Flickr请求成功,后来才猛然觉悟是JavaScript同源策略导致的。不过Chrome可以请求成功,应该是内部实现了某种方式。 Flickr官方提供了多种编程语言接口实现,以及可以使用的API。其实看清API应用并不神秘,只是如果能充分使用官方提供的API接口,构建各种应用就可轻而易举。这里用PHP作为实现方式。看代码。 忘了说明一点,使用Flickr API必须要有自己的api_key,可以轻松地从Flickr官方获取。 <?php $url = 'http://api.flickr.com/servi » » »阅读更多

PHP字符串检索

strpos()函数 int strpos(string $haystack, mixed $needle [, int $offset]) 该函数的主要目的是检索并返回$needle在$haystack中首次出现的位置,如果提供了 $offset参数,则从$haystack字符串中的$offset位置开始检索。(字符串的首字符的位置为0) <?php echo strpos('hello world', 'h'); // return 0 echo strpos('hello world', ' '); // return 5 ?> 该函数容易产生错误的地方: 如果一个字符串恰好出现在另一个字符串的首处,这时会返回0, 这样的情形如果发生在if判断的时候,PHP会把0强制转换成false,这样就无法得到想要的结果。 正确的方式应该是使用if (false !== strpos(str, char)) {}来判断。 与该函数相关的有stripos(),strrpos(),stripos() stripos()函数正向查找,不区分大小写。 <?php echo stripos('hello world', 'W'); // return 6 ?> strrpos()函数反向查找出现的第一个字符或字符串。 <?php echo strrpos('h » » »阅读更多

PHP URL编码

urlencode()、urldecode()、rawurlencode()、rawurldecode()这些函数来解决网页URL编码解码问题。 string urlencode ( string $str )返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。 string urldecode ( string $str )解码给出的已编码字符串中的任何 %##。返回解码后的字符串。 string rawurlencode ( string $str )返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。 string rawurldecode ( string $str )返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都将被替换成原义字符。 urlencode 将空格则编码为加号(+)rawurlencode 将空格则编码为加号(%20) 如果要使用utf-8的Encode,有两种方法: 一、将文件存为utf-8文件,直接使用urlencode、 rawurlencode即可。二、使用mb_convert_encoding函数。 阅读更多

Smarty安装和使用

从Smarty官网下载。解压smarty压缩文件之后里面有libs目录,这是Smarty的库文件,这也就是Smarty的核心文件了,我们把解压后的libs目录重命名为smarty,然后放到PHP安装目录下的includes文件夹中。如果没有includes文件夹,那么创建一个,并且编辑php.ini文件,在末尾添加如下的设置: include_path=".;C:\PHP\includes" 。当然我们可以把smarty核心文件放置在任何地方,前提是需要可以require到Smarty.class.php这一文件。 目前库文件已经可以成功引用,现在该配置一下与Smarty有关的其他目录了。这里可以参考Smarty解压文件后的demo文件夹,一般直接把解压后的Smarty文件夹拷贝到web根目录就可以直接运行demo里面的文件了。当然,我们在使用Smarty开发的时候最好不要这么做。 首先在web根目录创建存放我们所要开发的应用程序的文件夹,例如:myblog。这个文件夹里面存放所有有关myblog的开发文件,当然我们还需要创建Smarty需要的几个文件夹,configs、tem » » »阅读更多

parse_str、parse_url的使用

这两个函数都是用来解析固定格式的字符串的。parse_str用来解析URL中的查询字符串,即可以通过$_SERVER['QUERY_STRING']取得的字符串值,假如我们请求的URL是http://localhost/parse_str.php?id=1&category=php&title=php-install,那么$_SERVER['QUERY_STRING']返回的值为id=1&category=php&title=php-install,而这种形式的字符串恰巧可以使用parse_str解析成关联数组的形式。parse_url是用来解析URL的,它可以把当前请求的URL字符串解析为关联数组的形式。下面详细地看看这两个函数究竟能够提供怎样的功能! parse_str函数的原型:void parse_str( string $str [, array &$arr ] )。该函数接收两个参数,$str为需要解析的字符串,而可选参数$arr为解析之后生成的数组值所存放的变量名,如果忽略可选参数,那么可以直接调用类似$id、$category、$title的变量。下面的脚本模拟了GET请求。 <?php <a href="http://localhost » » »阅读更多

Ajax Php 实例

采用了ajax技术的注册程序,后台采用php处理,使用了三个文件。适合初学者的参考学习。Ajax通常采用get、post的方式静默地向后台发送信息,并且接收后台的反馈,而这种过程是不需要刷新页面来实现的,所以用户一般不会觉察。采用了Ajax技术的客户端提供了良好的用户体验,互联网程序的运行可以达到与本地相似的良好体验。但是,这种技术不要滥用,而且有的客户端会禁用JavaScript功能。所以,在没有启用JavaScript的情况下也要保证程序运行顺畅,对使用者负责。Ajax的实质就是通过JavaScript把客户端的请求传递到服务器,服务器接收数据并经过处理之后发送到客户端,客户端在接收到传来的数据之后,利用DOM修改页面结构来达到信息传递的目的。Ajax通过这种方式避免了页面刷新所带资源消耗,它把以前占用大量带宽的请求分解成多个小的请求,虽然它没有节省带宽,但是避免了带宽拥挤现象。这只是本人的一些感触,如有不对的地方敬请指教。 建立好该程序需要使用 » » »阅读更多