Sep 04
FleaPHP虽然好用,但并不是每个程序都要开启MVC功能,有时只是几个页面,加载MVC功能,不仅浪费性能,写代码时也麻烦。所以,这里介绍一种方法,既可以利用FleaPHP强大的TDG等功能,又不用打开MVC,是小型系统的一个不错的选择。
写一个_common.php文件,内容如下
<?php
/**
* 本文件头用于开启FleaPHP的nonMVC模式,同时加载必要的设置
*
*/
//部署模式
define('DEPLOY_MODE', true);
//定义APP的路径
define('LIB_DIR', realpath(dirname(__FILE__) . '/../APP/'));
//加载FLEA的主文件
require('../FLEA/FLEA.php');
//加载设置
FLEA::loadAppInf('../Config/common.php');
//加APP加载到FLEA之中
FLEA::import(LIB_DIR);
//FLEA初始化
//这里是关键,一般来说我们用FLEA::runMVC();来初始化并开启MVC,
//但不要MVC的时候,可以只用init()就够了,runMVC()实际也是调用init()来进行初始化
FLEA::init();
//加载要用的Helper
FLEA::loadFile('FLEA_Helper_Array.php');
FLEA::loadFile('FLEA_Helper_Pager.php');
有了这个,以后的程序只要require_once一下这个_common.php,就能实现非MVC模式了,非MVC除了没有调度器,其他功能跟一般的FLEA程序没什么大的不同。
Aug 10
前幾天接的一個小項目,要用Google Map API做擴展二次開發,之前沒怎麽接觸過這東西,有也只是粗略看過,畢竟我不是那些無聊沒事上網人肉蜘蛛做小白鼠寫部落格的家裏蹲。
Google Map API的用法還算簡單,對著官方文檔及中文文檔看了一會再看幾個Example基本上就沒問題。
測試地址
中文版API
ScreenShot

Read the rest of this entry »
May 03
之前给学院弄的两个站都需要数据迁移,一个是Access to Mysql,一个是Excel to Mysql。后者可以把Excel转成Access,所以说到底还是Access to Mysql。
Access to Mysql主要途径有二:工具法和脚本法。前者可以用Navicat等Mysql批量转换,简单又快但不灵活;后者虽然比较麻烦,但效果好,且灵活,这里用到的是第二种。
由于远程服务器不能在PHP上使用Access,所以我是在本机上使用APM Express,把数据导入到本地数据库,再用Navicat迁移到远程数据库,现实使用的效果还不错。
我的目录设置为
根目录为/site
FleaPHP程序目录为/site/APP
迁移数据的原理基本上就是,同时打开ADODB(连接Access)和FleaPHP下的TDG(连接Mysql),再同时读数据和写数据。
先建立一个/site/inc/_common.php文件,由于用不上MVC,所以要用这个来启动非MVC模式的FleaPHP。
<?php
/**
* 将FleaPHP以non-MVC模式启动,用于传统开发方式
*
* @author Hicrokee hicrokee@gmail.com
* @version 1.0
* @date Thu Mar 13 15:33:02 CST 2008
*/
define('DEPLOY_MODE', true);
define('LIB_DIR', realpath(dirname(__FILE__) . '/../APP'));
require('../FLEA/FLEA.php');
FLEA::loadAppInf(LIB_DIR.'/Config/common.php');
FLEA::import(LIB_DIR);
FLEA::init();
再建立/site/TOOLS/db.php文件,把ACCESS数据库放在同一目录,这个示例代码包含了编码转换,时间STAMP转换,文本替换等常用功能。$rs->Fields($field)的$field值是从0开始,从左到右数的字段序号。
<?php
include('../inc/_common.php');
//初始化mdb数据库
$conn = new com("ADODB.Connection");
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("ncms.mdb");
$conn->Open($connstr);
$rs = new com("ADODB.RecordSet");
//初始化Mysql数据库
$tblArticles = FLEA::getSingleton('Table_Articles');
/* @var $tblArticles Table_Articles */
$rs->Open("select * from NCMS_news",$conn,1,1);
$rows = array();
while(! $rs->eof) {
$row = array();
$row['title'] = iconv('GB2312','UTF-8',$rs->Fields(2));//新数据库所有的字段比原数据库长,所以都不用截
$row['content'] = iconv('GB2312','UTF-8',str_replace('new/tools/loadimg.asp?FileName=','site/upload/news/oldimg/',$rs->Fields(3)));
$row['author'] = iconv('GB2312','UTF-8',$rs->Fields(4));
$row['source'] = iconv('GB2312','UTF-8',$rs->Fields(5));
$row['created'] = iconv('GB2312','UTF-8',strtotime($rs->Fields(16)));//时间STAMP转换
$row['updated'] = $row['created'];
$row['class_id'] = 58;//因为迁移时分类改变了,干脆重置为同一个数字
$rows[] = $row;
$rs->MoveNext();
}
$tblArticles->saveRowset($rows,false);
echo '数据转换成功,为了安全,请删除或重命名本文件。';
?>
转换后记得检查是否正确,这里演示用的数据量很少,所以直接用数组缓存了再导入Mysql,如果数据多的话,可以不用TDG而用回原生的PHP代码,另外也要读一部分数据写一部分数据。本例仅适用于少数据的情况。
Recent Comments