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继续用吧。
对于程序而言,基本上不用做什么调整。
以上。
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~
FleaPHP 参数定制
FleaPHP很方便,可以节省很多时间,不过配置起来也有很多要注意的事情~
从 http://www.beyondidea.cn/archives/309 这里引用一些说明~
核心配置
- namespace 应用程序的默认名字空间,默认值为空字符串这个设置会影响到应用程序所有类的名称定义。例如
namespace设置为FOO时,应用程序所有控制器、模型的类名字都要加上前缀FOO_。变成诸如FOO_Controller_Default、FOO_Model_News等。为了让你的代码能够更容易的在其他应用程序中复用,最好将 namespace 设置为空字符串。
- controllerAccessor 指示控制器的 URL 参数名,默认值为
controller这个设置指定在 URL 查询参数中,用什么名字的参数指定控制器名字。例如 controllerAccessor 设置为 “ctl” 时,就必须用index.php?ctl=MyController来指定要调用的控制器。 - defaultController 指示默认控制器的名字,默认值为
Default当url参数中没有指定要调用的控制器时,将依据 defaultController 的设置调用默认的控制器。 - actionAccessor 和 defaultAction,默认值分别为
action和index这两个设置的作用和 controllerAccessor、defaultController 类似。只不过用于指定控制器动作的参数名和默认动作名。 - urlMode 指定 URL 分析和构造模式,默认值为
URL_STANDARDURL 的分析和构造模式,目前支持三种,分别是:URL_STANDARD、URL_PATHINFO和URL_REWRITE。URL_STANDARD模式中,URL 参数采用采用标准的方式,例如index.php?controller=MyController&action=MyAction&class_id=2&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.php、FLEA_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
- logEnabled 指示是否启用日志服务,默认值为