当前文章被分类为:PHP

用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元素的例子:
PLAIN TEXT
CODE:

$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 "<h2>" . $title . "</h2>";

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

评论 (2)

bom头的影响

前阵子有同事写了一段代码,在setcookie的时候出现下面错误。
Cannot modify header information - headers already sent by ....
这个错误非常之常见,如果在setcookie之前输出了任何文本内容,便会有上述错误提示。由于页面头部require了若干文件,一行行排查是很麻烦的事情,因此,我在页面顶部加上:
PLAIN TEXT
PHP:

ob_start();

在setcookie之前加上代码:
PLAIN TEXT
PHP:

ob_get_clean();

这是为了获取setcookie之前页面输出的内容。页面运行后,显示输出了一个空字符串,也就是说,setcookie之前没有任何输出。
继而用vim打开了源文件,发觉vim有打开bomb选项,怀疑因此给代码添加了隐藏的字符串,关闭之:
set nobomb
问题解决。
BOM是什么意思?
BOM是“Byte Order Mark”的缩写,用于标记文件的编码。并不是所有的文本编辑工具都能识别BOM标记

评论

CachegrindVisualizer

CachegrindVisualizer是一个xdebug的profile文件查看客户端,采用Adobe的AIR制作,很让人惊讶,因为目前我看到的采用AIR制作的软件少的可怜.
与CachegrindVisualizer具有类似功能的软件还有wincachegrind,相比之下,wincachegrind的功能更为强大,使用上也更方便.但是即便如此,我还是乐见CachegrindVisualizer发展的更好.
CachegrindVisualizer支持的操作系统
Windows 2000 SP4, Windows XP SP2, Windows Vista Home and Ultimate Edition, Mac OS 10.4.7 and above (Intel and PowerPC), Mac OS X Leopard.
运行时的抓图

相关连接

AIR RUNTIME下载
xdebug

评论 (2)

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 [...]

评论 (8)

在wordpress中方便的添加自定义标签

wordpress使用了kses作为xhtml/html的filter(见wp-includes/kses.php),因此多数可能有危害性的标签例如script,object会被wordpress过滤。对于某些个人wordpresser来说,安全问题显然不大,反正只是自己用,即便加入javascript脚本也是出于方便考虑。为了方便广大革命群众,俺提供一个简单的扩展标签的思路:
在wp-includes/kses.php中,有这样一行定义:
PLAIN TEXT
PHP:

if (!defined('CUSTOM_TAGS'))

    define('CUSTOM_TAGS', false);

 

// You can override this in your my-hacks.php file   

if (!CUSTOM_TAGS) {

    ....... 

}

由此可见,只要自定义CUSTOM_TAG常量为true,就可以使用额外的标签了。那么修改步骤可以总结如下:

新增一个my-hacks.php,放在wordpress根目录下,my-hacks.php中有如下定义
PLAIN TEXT
PHP:

define('CUSTOM_TAGS', true);

$allowedposttags = array(...你需要增加的标签..);

在wordpress后台开启my-hacks.php的支持

done.

评论 (4)

PriadoBlender可支持php-gtk2

PriadoBlender可以把你的php文件编译成.exe文件,这个东西很好玩。最近跑到它的论坛上看到有PriadoBlender2.0 beta版本放出来,虽然这个版本没有安装文件,没说说明,也没有更新记录,但是我还是把胆子放大了把这它抓了回来。
解压后的文件夹里有一个文件,运行结果出乎意料,见下图:

可支持的project有:

php-gtk1
php-gtk2
winbinder
command line

目前为止,我还就看过这一个compiler能够支持php-gtk2。我之前试过“Embeder”,也去试用过phc,但是从未有过象PriadoBlender这样的。在点击上图的compile以后,我成功的将之前写的一个php5 + php-gtk小程序编译为.exe文件。
经试用,PriadoBlender beta版本目前有一些缺点:

外部包含的.xml文件需要自己复制过来

可能还有一些缺陷,我打开编译完成的exe文件以后,关掉窗口也不能干掉php-win.exe
中文支持很烂,当然,这可能是php-gtk2本身的事情了。

不管怎么说,php-gtk2终于有了一个可用的编译器,这是个好事情。
BTW:PriadoBlender本身也是用php-gtk完成的。

评论 (10)

php的chm手册打不开怎么办

在网上下载的php的chm手册时常会有打不开的情况,也不是每次都发生。下面是找到的解决办法以及原因。
如果提示从网站打开或保存 .chm 文件,则仅在需要此文件且信任提供此文件的网站的情况下进行此操作。
在“文件下载”对话框中,单击“保存”,然后选择要保存此 .chm 文件的位置。然后,使用下面的方法之一:
方法 1
1. 双击此 .chm 文件。
2. 在“打开文件安全警告”对话框,单击以清除“打开此文件前始终询问”复选框。
3. 单击“打开”。
方法 2
1. 右键单击该 CHM 文件,然后单击“属性”。
2. 单击“取消阻止”。
3. 双击此 .chm 文件以打开此文件。
参考微软的说明:http://support.microsoft.com/kb/902225/zh-cn

评论 (7)