使用helper时指定文件路径
在使用 $html->css和$html->image时,例如$html->css('style'),cake会指向webroot\css目录下的style.css文件,同样$html->image('pic.png')会指向webroot\img\目录下的pic.png。
可是有时由于各种原因,我们的文件资源不一定放在CSS或者IMG等cake默认指向的文件夹下,比如我们要指向webroot\myimg目录下的mypic.png应该如何指向呢?
通过查看html helper的源码或者官方API文档可以看到这么一句注释:
If `$path` is prefixed with '/', the path will be relative to the webroot of your application.
Otherwise, the path will be relative to your CSS path, usually webroot/css.
这样一来,我们使用 $html->image('/myimg/mypic.png');就可以指向我们想要的图片。css等函数同理
Mongo 初探
最近留意NOSQL相关的资讯,对Mongo比较感兴趣,好像使用php比较容易操作mongo。
简介:
MongoDB是一个基于分布式文件存储的数据库开源项目。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。
*模式自由。
*支持动态查询。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性
*支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
*文件存储格式为BSON(一种JSON的扩展)
*可通过网络访问
安装和配置:
一、到官方网站下载相应的程序。在这里我选择了Windows 32 bit的1.4.1版本。
下载页面:http://www.mongodb.org/display/DOCS/Downloads
二、将下载的文件解压到D:\mongodb(路径按个人喜爱^_^),mongo算是绿色软件了,直接解压就可以使用。
三、到PHP官方网站下载mongo的扩展。
下载页面:http://www.php.net/manual/en/mongo.installation.php
根据自己PHP的环境,我选择了PHP 5.3 VC6 Thread-Safe Mongo extension
四、将下载后的文件解压,得到php_mongo.dll文件,将这个dll文件放大PHP环境的ext文件夹中,然后在php.ini添加php_mongo.dll扩展,加上extension=php_mongo.dll
成功添加扩展后,在phpinfo中可以看到mongo扩展已经添加,如下图
五、在D:\mongo目录下新建一个文件夹data(路径和文件夹名称随意,用于存储数据库文件)
运行数据库服务
打开命令行工具(CMD),进入mongo的bin目录,我这里举得例子是D:\mongodb\bin。
运行 mongod –dbpath “d:\mongodb\data”,运行结果如下:
看到如上的界面,说明mongo服务已经启动
PHP使用实例
下面开始简单介绍怎么用PHP操作mongo数据库。PHP官方网站有更详细的使用API
http://www.php.net/manual/en/book.mongo.php
插入数据
// collection 相当于 一般数据库中的 表 概念 // $conllection = $db->collection; // 或者这样写更方便理解 : $table = $db->tableName; // mongo中document可以 理解为 一般数据库中的一条数据 $document = array( 'title' => 'Mongo 初探', 'author'=> 'Lu', 'body' => '这是内容' ); $table->insert($document);
查找数据
$cursor = $table->find(); //var_dump($cursor); while ( $cursor->hasNext() ) { var_dump($cursor->getNext()); }
删除数据
// condtion 是要删除的document的描述(条件),可理解为sql中的where $table->remove($condition);
更新数据
$updateData = array(‘$set’=>array(‘body’=>’新内容’)); $table->update(array(‘author’=>’Lu’), $updateData);
第一个参数是条件,第二个参数是要更新的内容
这小段的代码的意思是,将author为Lu的记录中的body更新为“新内容”
小结
这是一篇没什么技术性的文章,只是稍微介绍了一下mongo,有兴趣的朋友可以自己google相关资料。初步了解,Php操作mongo还是比较简单和形象的。从代码层面上来看,和平时的数据库操作没有太大的区别。但实质上当然不仅仅是这样的,NOsql,值得深究的技术。希望大家也来讨论讨论。
PS: 有一个很轻巧的mongo管理工具,大家可以体验一下:mymoadmin
substr中文乱码问题的解决
今天使用substr打算截取一串中文字符,发现截取之后文字末尾出现乱码,搜寻相关者资料后。发现使用mb扩展库函数可以解决。
使用其中的mb_substr可以解决乱码问题,做了php时间不算短,可是到了今天发现这个问题。惭愧之极!
补充:mb_strcut也可以达到同样的效果。
参考文章:http://hi.baidu.com/aaxh/blog/item/17565a8240d91aa00cf4d2b0.html
CSV导入的处理
最近都在忙着完成项目CSV导入的问题。以前做过一个CSV导入,但那是单表导入,这次是多表导入。脑子里一直没有清晰地思路。
昨天和Wandiy讨论了一下处理逻辑的问题。在判断有效性方面的逻辑上,
我提出的方案:
遍历CSV每一行,判断该行的有效性,如果有效,就处理该数据,依次对每一行做判断,最后将无效的数据行返回给用户,提示用户修改CSV文件。
Wandy 对我的做法表示反对,她提到一般来说,向用户提示用户信息后,用户一般都是会在原版的CSV文件上做修改,如果按照我所说的那样,当用户把CSV修改之后,重新执行导入操作,就会出现许多重复数据需要用户操作。比如用户的CSV文件有1000行,前面999行都么有问题,可以正常插入,但是偏偏在第 1000行的数据出现了问题,当用户重新修改第1000行重新导入的时候,就要重新处理之前的999行数据。
想想看这样做不合理。经验还是严重不足,很多东西要学。John要Wandy帮我把backend的Tag管理做了。还得加强自己的工作效率才行。
