第 8 章 杂项

目录

8.1. 引入外部类库
8.1.1. class-path
8.1.2. include-path
8.2. IHttpClient - HTTP客户端
8.3. cookie
8.4. session
8.5. IO
8.5.1. 创建
8.5.2. 写入
8.5.3. 读文件
8.6. Cache
8.6.1. 加入缓存
8.6.2. 访问缓存条目
8.6.3. 删除和清空
8.6.4. 一个缓存查询内容的例子
8.7. 本地化
8.7.1. 取得客户端支持的语言
8.7.2. 设置默认的语言
8.7.3. 配置对应的语言
8.7.4. 取得最近一次设置的区域
8.7.5. 调用语言对应的配置
8.8. 日志
8.8.1. 日志的级别
8.8.2. 输出自定义的日志
8.8.3. 将日志写入文件
8.8.4. 写自己的日志写入器和过滤器
8.9. 异常/错误处理

I-F提供了其他一些比较简单但是有用的类,可以帮助我们实现一些常用的应用,如果你需要更多类库的话,我们建议你使用PEAR和Zend Framework,I-F确信不会和他们冲突。

8.1. 引入外部类库

在一个项目中,如果只使用I-F往往是不够的,当然我们也不提倡这样,有一些现成的成熟的类库可以提供我们使用,比如Smarty,PEAR或Zend Framework,它们会帮助我们实现更丰富的功能。

在I-F中导入第三方类库相当简单,且有两个方法分别处理不同的情况:

8.1.1. class-path

可以修改config/application.conf.php中的class-path,加入类库的地址。默认地,只要类放在/lib、/app/models、/app/controllers、/app/views、/app/filters、/app/filters任一目录下,无需做任何事情,都可以在控制器访问的到,比如有一个类MyClass放在 /lib目录下,

/lib/MyClass.php

那么在控制器中可以直接使用:

class HelloWorldController extends IApplication {
    public function 
appIndex() {
        
$my = new MyClass();
    }
}

所以我们可以添加更多的地址到class-path中。

对于class-path中的子目录中的类/lib/a/b/c/MyClass.php,可以使用import函数导入:

import("a.b.c.MyClass");
$my = new MyClass();

也可以使用

import("a.b.c.*");

一次性地将a/b/c目录下的所有类导进来。

而且无论a/b/c放在哪一个class-path,都可以这样使用。

8.1.2. include-path

include-path是对php.ini的include_path的一个运行时的扩充,可以将一个目录添加到include-path中,然后系统查找文件时会自动在这些目录下查找,我们可以将Smarty等类库放到/lib下,然后将/lib加入到include_path中。修改application.conf.php中的include-path为:

    /**
     * 程序文件的查找路径
     */
    
"include-path" => array(
        
"lib",//可以是Z-F、Smarty、PEAR等框架的所在目录
    
),

然后把smarty类库放进去,目录结构为:

/lib
    /smarty-2.6.19
       Smarty.class.php

现在就可以在程序中使用:

//包含文件
require_once "smarty-2.6.19/Smarty.class.php";

//设置smarty选项
IModelAndSmarty::setSmartyOptions(array(
    
"compile_check" => true,
    
"debugging" => false,
    
"cache_dir" => IFRAMEWORK_APP_ROOT "/view/cache/",
    
"left_delimiter" => "{",
        
"right_delimiter" => "}"
));