Focusheart's World new era is now

2Jun/100

Fleaphp与Oracle

折腾了一上午,google了半天终于把这种基础问题给解决了。

Fleaphp连接Oracle的问题其实很简单,但是要做好也不容易。

环境:Windows 7 + XAMPP 1.7.2

+ Apache 2.2.12 (IPV6 enabled)
+ MySQL 5.1.37 (Community Server) with PBXT engine 1.0.08-rc
+ PHP 5.3.0 + PEAR (PEAR, Mail_Mime, MDB2, Zend)

下来说步骤:

1 Oracle Instant Client

instantclient-basic-win32-11.2.0.1.0.zip

下载一个这个东西,然后随便解压到哪儿都行,下来是重点1:

重点1:将oracle instant client的一大堆dll啥的都解压到xampp的apache的bin目录下:比如我的是c:\xampp\apache\bin。不知道为什么按照wiki.oracle.com上配置系统环境变量path之类的没有用。

2 php.ini修改

这个简单,找到c:\xampp\php\php.ini,然后将extension=php_oci8.dll去掉注释。

3 测试

<?php
$conn = oci_connect('username', 'password', '192.168.1.121:1521/orcl');
if (!$conn) {
trigger_error("Could not connect to database", E_USER_ERROR);
}
?>

把这个代码运行一下,如果没有发生异常,就说明可以用了!

问题是通常就是会发生异常……下来说重点2:

重点2:

ORA-12154:连接字符串彻底写错了。请检查是不是ip:port/service_name这样的格式。

ORA-12514:这个通常是连接字符串写的不对,通常是service_name这个不对,去问你的数据库管理员oracle的那个service_name到底是啥。在tnsnames.ora里可以看到SERVICE_NAME = orcl这样的。

好像主要就是这两个错误。

4 Fleaphp DSN配置

如果前面都没有问题,这个就很简单了:

DSN文件写清楚配置:

return array(
'internalCacheDir' => dirname(__FILE__) . '/_Cache',
'dbDSN' => array(
'driver'    => 'oracle',
'host'      => '192.168.1.121',
'login'     => 'username',
'password'  => 'password',
'database'  => '192.168.1.121:1521/orcl'
)
);

如果'database' 那里不写port的话,好像是默认访问1521端口,不过建议别给自己找麻烦,该写就写上吧。

以上,然后自己写个Controller还有Model继续用吧。

对于程序而言,基本上不用做什么调整。

以上。

Tagged as: , No Comments
7May/100

FleaPHP~SQLite支持~

来自:http://www.cnblogs.com/banjia/archive/2008/10/28/1321123.html

Fleaphp是一个简便快捷、执行效率理想、并且得到良好文档化的基于PHP语言的开发框架(Framework)。在半甲项目启动的时候,即选择Fleaphp作为快速开发框架。在研究Fleaphp时,我发现SQLite的驱动程序在某些代码下无法正确的工作。以下是导致问题的源代码:

分析上面的源代码,我发现了以下问题:

1、  源代码中没有声明表结构。依靠Fleaphp的数据库驱动模块自动创建数据表。

2、  源代码中没有指明主键,因此,无法依靠SQLite的主键取值自增加的特性来维护主键取值的不同

3、  以上代码在执行过程中,报错:“LAST_INSERTED_ID”函数找不到。通过查找手册,发现该函数原始为从MySQL驱动程序中开始使用。但SQLite并未提供相同名称的函数。因此代码执行出错。而FleaPHP发行包中,有相关代码,只是存在Bug。

要避免上述情况出现,实现定义好表结构,并指定主键就可以避免相关问题的出现。不过通过分析源代码,SQLite驱动程序中对于上述代码是可以正常支持的。因此,我对代码进行了如下修改。

其实按照代码来说,我自己也需要测试一下,一个简单的项目试试看,能用Sqlite的话,可以在小的项目里替代MySQL吧?不过我啥时候遇到过这样的项目了?

嗯……总之……大部分时候还是用MySQL~

Tagged as: , No Comments
6May/100

FleaPHP 参数定制

FleaPHP很方便,可以节省很多时间,不过配置起来也有很多要注意的事情~

从 http://www.beyondidea.cn/archives/309 这里引用一些说明~

核心配置

  • namespace 应用程序的默认名字空间,默认值为空字符串这个设置会影响到应用程序所有类的名称定义。例如 namespace 设置为 FOO 时,应用程序所有控制器、模型的类名字都要加上前缀 FOO_。变成诸如 FOO_Controller_DefaultFOO_Model_News 等。

    为了让你的代码能够更容易的在其他应用程序中复用,最好将 namespace 设置为空字符串。

  • controllerAccessor 指示控制器的 URL 参数名,默认值为 controller这个设置指定在 URL 查询参数中,用什么名字的参数指定控制器名字。例如 controllerAccessor 设置为 “ctl” 时,就必须用 index.php?ctl=MyController 来指定要调用的控制器。
  • defaultController 指示默认控制器的名字,默认值为 Default当 url 参数中没有指定要调用的控制器时,将依据 defaultController 的设置调用默认的控制器。
  • actionAccessor 和 defaultAction,默认值分别为 action 和 index这两个设置的作用和 controllerAccessordefaultController 类似。只不过用于指定控制器动作的参数名和默认动作名。
  • urlMode 指定 URL 分析和构造模式,默认值为 URL_STANDARDURL 的分析和构造模式,目前支持三种,分别是:URL_STANDARDURL_PATHINFO 和 URL_REWRITE

    URL_STANDARD 模式中,URL 参数采用采用标准的方式,例如 index.php?controller=MyController&amp;action=MyAction&amp;class_id=2&amp;sort=1

    关于 URL_PATHINFO 和 URL_REWRITE 的详细说明,请参考使用 PATHINFO 和 URL 重写

  • urlLowerChar 指示是否将 url 参数中包含的控制器名字和动作名字强制转为小写字符,默认值为 false对于 Windows 系统来说,这个设置无关紧要。而对于 Linux/Unix 系统来说,这个设置会关系到控制器类定义文件的命名。

    当 urlLowerChar 为 true 时,控制器名字会被转为小写字符,而该控制器的类名字除第一个字母为大写外,其他全为小写。例如控制器名为 MyController,实际的控制器类名称为 Mycontroller,对应的类定义文件为 Mycontroller.php

    当 urlLowerChar 为 false 时,控制器名字和控制器的类名字完全对应,例如控制器名为 QuickBenchmark,实际的控制器类名称为 QuickBenchmark,对应的类定义文件为 QuickBenchmark.php

  • controllerClassPrefix 指示控制器类名称前缀,默认值为 Controller_
  • actionMethodPrefix 和 actionMethodSuffix 指示控制器动作的方法名要加上的前缀和后缀,默认值分别为 action 和空字符串使用前缀和后缀可以,让控制器动作方法的名称和控制器中的其他方法区别开来。同时也可以避免无意中造成控制器内的私有方法被浏览器访问到。
  • dispatcher 指示应用程序要使用的 URL 调度器,默认值为 FLEA_Dispatcher_SimpleURL 调度器分析 URL 参数,决定要调用的控制器和控制器动作方法,最后调用控制器动作方法。默认的 FLEA_Dispatcher_Simple 是一个简单的调度器,仅仅是分析 URL 参数,然后完成调用工作。而更复杂的 FLEA_Dispatcher_Auth 则可以结合 FleaPHP 自带的 RBAC(基于角色的访问控制)组件完成访问控制功能。

    如果开发者自己编写了调度器,那么修改这个设置即可让应用程序使用开发者自己编写的调度器。

  • dispatcherFailedCallback 指示调度器调度失败后,要调用的处理程序,默认值为 null如果希望应用程序处理调度失败的情况(例如控制器或控制器方法不存在),则需要覆盖这个设置。
  • internalCacheDir 指示 FleaPHP 内部及 cache 系列函数使用的缓存目录,默认值为 FLEA/_Cache/ 目录
  • autoLoad 指示要自动载入的文件,默认载入 FLEA_Helper_Array.phpFLEA_Helper_Html.php 和 FLEA_Controller_Action.php 三个文件这个设置必须是一个数组,数组中每一个项目为要自动载入的文件。
  • sessionProvider 指示要使用的 session 服务提供程序,默认值为 null如果设置为 null,则表示使用 PHP 自带的 session 服务。
  • autoSessionStart 指示是否自动起用 session 支持,默认值为 true如果该设置为 true,则每次 FleaPHP 框架初始化后都会自动执行 session_start() 函数。
  • requestFilters 指示使用哪些过滤器对 HTTP 请求进行过滤,默认值为空数组和 autoLoad 设置类似,该设置必须为数组。但数组中每一个项目为要运行的过滤器类名字。过滤器按照出现在数组中的顺序初始化和运行。

    每一个过滤器实际上都是一个脚本,无需要实现为一个类。可以参考 FLEA/Filter/ 目录中的过滤器代码实现自己的过滤器。

    FleaPHP 初始化时,会根据 PHP 运行环境设置和应用程序设置来决定是否自动运行 FLEA_Filter_MagicQuotes 和 FLEA_Filter_Uri 过滤器。因此开发者不应该在 requestFilters 设置中调用这两个过滤器。

    日志服务和错误处理

    • logEnabled 指示是否启用日志服务,默认值为 false如果该设置为 true,则会自动载入由 logProvider 设置指定的日志服务提供程序。
    • logProvider 指示日志服务的程序,默认值为 FLEA_Com_Log
    • logFileDir 指示用什么目录保存日志文件,默认值为 null最好将日志保存在浏览器无法访问的目录中。
    • logFilename 指示用什么文件名保存日志,默认值为 access.log
    • logFileMaxSize 指示当日志文件超过多少 KB 时,自动创建新的日志文件,单位是 KB,不能小于 512KB,默认值为 4096
    • logErrorLevel 指示哪些级别的错误要保存到日志中,默认值为 ‚warning, error, exception‘
    • displayErrors 指示是否显示错误信息,默认值为 true
    • friendlyErrorsMessage 指示是否显示友好的错误信息,默认值为 true
Tagged as: No Comments