邪罗刹的菠萝阁


> 最近在研究RSS聚合程序,个人觉得相对最好的程序是Gregarius,效率高、负载低、口碑不错。
> 由于此程序的最后更新时间是 2008-11-26,那就要考虑到新版本PHP不支持函数的问题。

> 像上图一样,此函数在 PHP 5.3.0 中会被屏蔽,在 PHP 6.0.0 里会被删除掉,同时可被替代。
> 因为PHP团队将删除支持 Portable Operating System Interface (POSIX) 正则表达式的扩展。

> 1. Eregi 函数的语法

int eregi(string pattern,string string [,array regs]);

> 2. Eregi 函数的解释

> 搜寻string来和pattern的正规表示比对。
> 若找到比对则会呼叫第三个参数regs,比对的结果会储存在regs的元素之中。
> $regs[1]为符合第一个左边括弧(parenthesis)的部份字符串,$regs[2]为符合第二个括弧的部份字符串。
> 以此类推,$regs[0]为参数string。

> 如果ereg( )找到比对,则$regs会被十个元素来填满,即使是多于或少于十个括弧内的部份字符串。
> 也可以比对,这将不影响ereg( )去比对更多部份字符串的能力。如果比对不到,$regs将不会被ereg( )改变。
> 搜寻是不区分大小写的。
> 如果在string中比对到pattern则传回true,如果比对不到或是发生错误则传回false。

> 3. Eregi 函数的官方范例

<?php
    $date="2009-02-12";
    if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {
          echo "$regs[3].$regs[2].$regs[1]";
    }
       else {
               echo "Invalid date format: $date";
       }
?>

> 以上的范例会将日期格式YYYY-MM-DD切断,并且把它显示成DD.MM.YYYY的格式。

> 4. 如何使用新的函数

> 新的函数是 preg_match(),语法如下。

int preg_match ( string $pattern , string $subject [,
array &$matches [, int $flags [, int $offset ]]] )

> 5. 如何修复 Gregarius0.6.1

function getPath($path='') {
    static $ret;
    if ($ret === NULL) {
        $ret = dirname($_SERVER['PHP_SELF']);
        if (defined('RSS_FILE_LOCATION') && eregi(RSS_FILE_LOCATION."\$", $ret)) {
            $ret = substr($ret, 0, strlen($ret) - strlen(RSS_FILE_LOCATION));
        }
        if (substr($ret, -1) == "\\") { // Take off trailing backslash
            $ret = substr($ret, 0, -1);
        }
        if (substr($ret, -1) != "/") {  // Add a frontslash
            $ret .= "/";
        }
    }
    return $ret . $path;
}
$dummy = getPath();
eregi(RSS_FILE_LOCATION."\$", $ret)

> 以上的函数修复如下,即把POSIX表达式修改成PCRE表达式:

preg_match(RSS_FILE_LOCATION."\$/i", $ret)
Leave a comment
6 Comments.
  1. 阿士 Internet Explorer Windows 坐沙发!#1

    我使用过这个,但是感觉反应很慢就放弃了

    @
  2. 对这个没概念

    @
  3. 崔凯 Mozilla Firefox Windows 躺地板!#3

    在我那,外网测试数据库中文乱码,研究中......

    @

Leave a Reply


[ Ctrl + Enter ]