用php5的simplexml解析各种feed

最近使用simplexml来解析各种feed源,碰到了一些小问题。

用simplexml处理atom数据

很多博客使用atom来输出数据,但是atom使用了名称空间(namespace),所以现在请求被命名的元素和本地名称时必须指定名称空间统一资源标识符(URI),还有一点就是simplexml的xpath方法无法直接query这个xml tree。

从 PHP 5.1 版开始,SimpleXML 可以直接对带名称空间的文档使用 XPath 查询。和通常一样,XPath 位置路径必须使用名称空间前缀,即使搜索的文档使用默认名称空间也仍然如此。registerXPathNamespace() 函数把前缀和后续查询中使用的名称空间 URL 联系在一起。

下面是使用xpath查询atom文档title元素的例子:


$atom =  simplexml_load_file('http://www.ooso.net/index.php/feed/atom');
$atom->registerXPathNamespace('atom', 'http://www.w3.org/2005/Atom');
$titles = $atom->xpath('//atom:title');
foreach ($titles as $title) 
  echo "

" . $title . "

";

用simplexml处理rss数据

wordpress可以输出rss2的数据源,这里面也有一些不同的namespace,比如dc。一个使用simplexml解析rss2的例子:

Continue reading “用php5的simplexml解析各种feed”

php5中的date函数

php5.1.1以后,date函数新增了以下常量。

自 PHP 5.1.1 起定义有以下常量来提供标准日期表达方法,可以用于日期格式函数(例如 date())。

DATE_ATOM(string)
原子钟格式(如:2005-08-15T15:52:01+00:00)

DATE_COOKIE(string)
HTTP Cookies 格式(如:Mon, 15 Aug 2005 15:52:01 UTC)

DATE_ISO8601(string)
ISO-8601(如:2005-08-15T15:52:01+0000)

DATE_RFC822(string)
RFC 822(如:Mon, 15 Aug 2005 15:52:01 UTC)

DATE_RFC850(string)
RFC 850(如:Monday, 15-Aug-05 15:52:01 UTC)

DATE_RFC1036(string)
RFC 1036(如:Monday, 15-Aug-05 15:52:01 UTC)

DATE_RFC1123(string)
RFC 1123(如:Mon, 15 Aug 2005 15:52:01 UTC)

DATE_RFC2822(string)
RFC 2822(如:Mon, 15 Aug 2005 15:52:01 +0000)

DATE_RSS(string)
RSS(如:Mon, 15 Aug 2005 15:52:01 UTC)

DATE_W3C(string)
World Wide Web Consortium(如:2005-08-15T15:52:01+00:00)

比如,要输出一个RSS需要的日期格式,就可以用下面的代码简单实现:

echo date(DATE_RSS);

[php5]将xml转换成json最简单的办法

在php5下,将xml转换成json最简单的办法,就是利用simplexml和json扩展。

废话不多说,贴代码:

<?php
$xml = <<

    
        Code Generation in Action
        JackHerrington
        Manning
    


    
        PHP Hacks
        JackHerrington
        O'Reilly
    


    
        Podcasting Hacks
        JackHerrington
        O'Reilly
    

EOF;

echo $json = json_encode(simplexml_load_string($xml));
?>

整个过程就是一行,灰墙之ez.

另:可以跟以前写的“用php将rss转化为json格式”比较一下.

PHP4的历史任务完成

PHP.net宣布,他们将在今年年底停止php4的开发,安全方面的更新也会于2008年8月结束。

PHP4发布于2000年五月,这一年我刚刚学会拨号上网,申请email帐号收发邮件。在2004年,php家族的老五出世, 而这个时候,支持php4的主机以及开源软件已经四处开花。3年后,php4仍然在各大主机上占据绝对份额的优势,尤其是在国内。因为大量的开源代码仍然是php 4 only的,你不知道客户会在hosting上跑什么样的程序。还有一大批的php程序员在维护前人留下的php 4代码,或者在这个基础上接着开发,比如俺… 这对主机商或开发人员来说都不是一件好事情,客户不在乎你用的是php 4还是php 5,这无关紧要,只要代码能跑,功能实现就皆大欢喜了。

前不久的GoPHP5活动,是php开源世界开发人员对现状的一种回应,也是在php核心开发人员推动下的结果。只有得到目前广泛的php开发人员的支持,PHP.net才有底气说2007年底停止php4的开发。

php4能够在如此之久的时间里长盛不衰,证明php 4是成功的。它的历史任务,完成了!

php5的一些参考资料

用simplexml解析rss出错

尝试用simplexml解析一个rss数据源,碰到了一个不小的麻烦。每次解析会碰到一个报错:

Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement—construct]: Entity: line 161: parser error : Entity ‘Acirc’ not defined in D:\xampp\htdocs\rss.php on line 11

这是解析rss的php代码片段:

try {
	$xml = new SimpleXMLElement($rss);
	var_dump($xml);
} catch(Exception $e) {
	echo $e->getMessage();
}

查看rss数据源,发现里面有一些乱字符,尝试过滤掉乱字符。

用下面的xmlSafe函数过滤字符,问题解决。

function xmlSafe(&$xml_str) {
	$xml_str =preg_replace("/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/",'',$xml_str);
}

ubuntu下安装php5 + pdo

这几天尝试把工作机迁到ubuntu上来做开发,系统安装好之后的首要任务是安装php+mysql的开发环境. 我打算直接安装php5, pdo_mysql, 下面是安装过程的记录

首先我直接用apt-get安装了apache2,php5,pear以及mysql5, 为了方便后续的安装,还加上了make和libmysqlclient

  • sudo apt-get install apache2-mpm-prefork
  • sudo apt-get install php5
  • sudo apt-get install php5-dev
  • sudo apt-get install php5-pear
  • sudo apt-get install mysql-server-5.0
  • sudo apt-get install make
  • sudo apt-get install libmysqlclient15-dev

pdo在ubuntu的apt里头似乎还找不到安装源,所以通过pecl来安装这个扩展,非常简单 —- 如果海底光纤能连通的话:

pecl install pdo

增加一行:

extension=pdo.so

到文件:

/etc/php/apache2/php.ini
/etc/php/cli/php.ini

接下来安装pdo_mysql碰到一些问题, 直接跑pecl install pecl_mysql会出现一些错误,搜索了一下发现是pecl本身的问题,下面是个比较简单的解决办法:

wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
tar xzvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2

注释掉configure里头判断是否已经安装pdo扩展的代码片段,继续跑:

phpize
./configure
make
make install

然后再次添加下面一行到前面提到的两个php.ini

extension=pdo_mysql.so

重启apache之后, php5 + pdo_mysql就在ubuntu上安装好了, documentroot是/var/www

后记

更简单的解决办法是运行:

PHP_PDO_SHARED=1 pecl install pdo_mysql

Pear的PHP_Compat包

Pear的PHP_Compat是个比较有趣的包,它提供了一些php4下也能使用的php5专有函数,比如file_put_contents,array_combine,str_split……….这样即使是在php4的主机上,也能提前享受一点php5函数的便利.

用法

<?php
require_once 'PHP/Compat.php';

// load file_put_contents
PHP_Compat::loadFunction('file_put_contents');

// load str_split, array_chunk and file_get_contents
PHP_Compat::loadFunction(array('str_split', 'array_chunk', 'file_get_contents'));
?>

上面的例子说明,可以一次载入n个php5特有函数

Package Information: PHP_Compat

http://pear.php.net/package/PHP_Compat

Embeder – 把php脚本编译成可执行文件

Embeder是一个命令行工具,可以将php脚本编译成windows下的可执行文件。从介绍上来看,它目前支持php5,所以也可以用来编译php-gtk2的程序文件。

使用前提

  • 把下面列出来的脚本全部复制一遍,并放在同一个目录
  • php5ts.dll必须在path下,或者在当前目录
  • php_win32std.dll必须安装在php的extension目录下(见php-embed.ini的配置)
  • embeder.exe也需要和上述文件在同一目录

测试文件

  • make.bat
    @echo off
    embeder.exe new myapp
    embeder.exe main myapp main.php
    embeder.exe add myapp include.inc
  • include.inc
  • main.php
  • 其实解压后就可以运行test目录下的make.bat做一个编译试验,上面所列文件已经存在。

  • 参考文档
  • http://wildphp.free.fr/wiki/doku.php?id=win32std:embeder

    PHP5的Simplexml

    php5新增了Simplexml extension,我们可以借助它来解析,修改XML。在IBM的知识库里找到一篇文章对此做了专门的介绍,而且比较详细,感兴趣的话可以看看最后的参考文档。

    一个RSS Feed

    下面是一个RSS的例子,我们准备用simplexml来解析它。
    [xml]< ?xml version="1.0" encoding="UTF-8"?>


    Mokka mit Schlag http://www.elharo.com/blog
    en

    Penn Station: Gone but not Forgotten

    The old Penn Station in New York was torn down before I was born.
    Looking at these pictures, that feels like a mistake. The current site is
    functional, but no more; really just some office towers and underground
    corridors of no particular interest or beauty. The new Madison Square…
    http://www.elharo.com/blog/new-york/2006/07/31/penn-station


    Personal for Elliotte Harold
    Some people use very obnoxious spam filters that require you
    to type some random string in your subject such as E37T to get through.
    Needless to say neither I nor most other people bother to communicate with
    these paranoids. They are grossly overreacting to the spam problem.
    Personally I won’t …

    http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/


    [/xml]

    解析XML

    首先载入一个xml

    $rss =  simplexml_load_file('http://www.ooso.net/index.php/feed/');

    Continue reading “PHP5的Simplexml”

    ppform简体中文patch

    上次拿到了最新的PPFORM,安装好之后会出现主窗体白屏的情况,到ppform.com一看,已经有简体中文操作系统的修正版出来。

    站长的说明:

    由於開發環境在繁體的作業系統,較缺少簡體平台的測試,因此對於簡體環境產生較多的問題,目前正設法裝設簡體作業系統的測試環境。請使用簡體的朋友予以見諒。

    目前就已知的問題,提供修正檔下載,請簡體的朋友不吝指教!

    把这个补丁打上以后,在我的WIN XP上的确能够正常运行,而且也能够正确编译成exe文件。