CodeIgniter 入门

主页 http://codeigniter.com/

网上想要比较cakephp和CodeIgniter,答案是萝卜白菜各有所爱。

cakephp模仿ROR,没用过ROR的学习曲线要大些。

CodeIgniter适合小型项目,性能比较好,因为没有过多累赘。

cakephp中型项目,性能稍逊。但是特性较CodeIgniter多。

 

CodeIgniter文档较详细:

下载包中user_guide文件夹/index.html有,但是那个tablecontent一开始没注意到,它在页面顶部,点击出来下拉目录,囧。

照着文档读一遍,两个小时就够了,简单吧。

笔记:

以其index.php来作为你项目入口,

 

apache配置中需要配置文件夹

Options execCGI FollowSymLinks
AllowOverride All


  • 静态页面控制:

默认连接方式是http://example.com/[controller-class]/[controller-method]/[arguments]

那么 http://example.com/news/latest/10 就会找到news这个控制器类调用其latest方法,传入10这个参数。

这个配置是在application/config/routes.php中

注意,例如这样的配置

routes[‘welcome’] = ‘welcome’

将会在controller中寻找welcome 文件夹中(或下面的controller子文件夹)的welcome.php文件中的Welcome类。文件名必须小写,类名必须以大写字母开头。

 

URL Helper类问题:

这里面的方法都是依据config.php中配置的$config['base_url']来的,

因此如果你配置的是abc.com,那么即使用户使用www.abc.com访问,返回的都是不带www的url,包括

current_url()这个方法也是如此,显然这个方法是个鸡肋,遇到ajax请求就跨域了,因为www.abc.com和abc.com是跨子域的。

 

异常处理:

他的异常在index.php中设置,不知道是什么原因,在其他地方再设置就没什么作用了,一旦出错就显示一堆错误,只能使用ob_end_clean();把它的输出清除掉。

 

日志:

system\libraries\Log.php log_message('level', 'message')

日志显示级别在config.php中配置

$config['log_threshold'] = 4;

$config['log_path'] = ''; //空表示在站点目录下logs文件夹中,以php为扩展名

 

CI有个session过期的bug,因为它是每隔一段时间更新session对应的cookie(这是为了安全起见),所以可能造成前后两个ajax请求的session对应的cookie不一样:

1:请求A调用时正好导致更新cookie

2:请求B此时还是使用老cookie,由于A请求改了cookie,则会导致找不到session。

参见:http://codeigniter.com/forums/viewthread/102456/

这上面也没好的办法,要么是注释更新cookie的代码,要么将$config['sess_time_to_update']     = 300;设置为很长就不会调用更新cookie的方法。

参见http://www.path8.net/tn/archives/2526

CI可通过数据库保存session,但是无论怎样,都是依赖客户端的cookie配合的,所以定时更新cookie的方法让session长期不过期的目标不好实现。

下面是自定义的Session类,CI可以自定义核心类:

user_guide/general/core_classes.html

放在application/core/即可,会自动加载的,要以MY_开头,要继承想要扩展的父类。

下面是MY_Session类:

><?php <?php if (!defined('BASEPATH')) exit ('No direct script access allowed');

Continue reading CodeIgniter 入门

twilio杂记

https://www.twilio.com 

对于开发者不很友好,虽然目前是注册就送30$,但是注册号码的话需要付费却不能从这里面扣。

可以通过verify number将你的美国号码绑定,这样打出去的号码将会使用你绑定的号码。

对于开发者来讲,还是后起之秀tropo好用。

rest api见http://www.twilio.com/docs/api/rest/

同样它也需要http 基本验证,用户名是账户sid(不是app sid),密码是token。

http://readthedocs.org/docs/twilio-php/en/latest/index.html

它也有类似phono的客户端https://www.twilio.com/docs/client

不只是因为我测试时就是生产环境的缘故,感觉sms上twilio还是要比tropo快很多。我测试tropo都是它免费的开发环境,感觉sms比较慢。

 

client部分:

用它提供的脚本地址,因为它的脚本里还具有自动更新client js脚本库版本的功能,需要解析src中的域名部分来获得新js的地址。

这个需要服务端配合,首先setup需要app sid和token,这个token是要依据权限创建的,直接使用它的php-helper来创建就比较简单。Twilio/Capability.php

其次对于需要接听电话的情况,客户端需要初始化一个agent id,这个是可以随便取的,但是与电话号码绑定的入口必须要知道这个agentid才能将会话转接到这个client。

https://www.twilio.com/docs/client/device

流程:

client 的connect会请求app的call, url

此时请求参数中caller会是client:agentid的形式。

此时如果想转接到真实电话,必须要制定dial节点的callid属性。

如果是直接打电话这个app的号码,也会请求app的call url

上面两个的direction参数都是inbound

如果是rest api方式发起outbound会话,被呼叫方接通电话后,也会请求app的call url,这时direction参数是outbound-api

 

好笑的是如果client发起的请求被转接到client本身时,这也是可以的,那就变成了自己和自己对话了。

 

下面是对于twilio和tropo使用的对比

http://pardner.com/2011/04/tropo-not-ready-for-prime-time-went-with-twilio/

作者最终选择的是twilio:

主要是tropo无声的丢失了信息而twilio却保证了不丢失。

 

REST API中查询所有买入的号码是 https://www.twilio.com/docs/api/rest/incoming-phone-numbers

Continue reading twilio杂记

heidisql mysql工具介绍

之前使用navicat lite,感觉并不好操作,能使用mysql workbentch就用mysql workbentch,mysql workbentch要装.net,有的机器还装不好,而且在win7上ui不很好用。 但是现在才发现开源免费的heidisql操作很方便,速度很快。

介绍一下它的提示功能, 在sql编辑器中,打点号,就会出现自动提示了,表名,数据库名等等。

so good.

赶快试试吧.

Continue reading heidisql mysql工具介绍

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 纠结的java ssl请求

java请求https常常遇到证书问题,对于许多免费的自签名证书,需要手动导入到jdk keystore中去。见http://kazge.com/archives/400.html

今天却遇到GEOTrust认证的证书也需要导入的问题。

浏览器里面看这个证书是由GEOTrust认证的,浏览器没什么问题,使用java请求就抛异常。

我们知道jdk是自带GEOTrust根证书的,照理说这个认证的证书就不需要导入了。网上搜了一下,大概的原因是:这个证书域名以*开头,jdk不能handle

http://jasig.275507.n4.nabble.com/SSL-Error-td1749567.html

是不是这个原因,我没细看。

还是将证书导入到keystore保险。

导入后要重启运行在此jdk上的程序才能起效。

Continue reading sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 纠结的java ssl请求

php之毫秒

php的毫秒是没有默认函数的,它自带的是microtime,即微秒:

1 second = 1000 milli second = 1000,000 micro second = 1000,000,000 nano second

网上抄来抄去都是microtime自带的例子,返回的还是秒。

microtime() 返回 0.1111 131231秒,空白前部分是float形式的秒数 空白部分是秒的整数部分

故要得到毫秒:

 

<?php
function getmilliseconds() {
	list ($usec, $sec) = explode(" ", microtime());
	return (int)(((float) $usec + (float) $sec) * 1000);
}
?>

ok, 看清楚了,不是那些拷来拷去的秒函数哦。

Continue reading php之毫秒

tropo杂记

发短信:

有的号码是发不到中啊国的,找了半天原因才发现要换个大城市的号码较好。如芝加哥。

Continue reading tropo杂记

ie圆角,19px,挥之不去的最小高度

拿别人做的圆角模板,在非IE下好好地,到IE下就是变了形。原因是td中那个高度老是莫名其妙的有19px。

后来看到这篇文章:

http://dancewithnet.com/2007/07/26/ie6-height-bug/

在IE6中设置display:block的空容器一个较小高度时,如<p style="height:1px;"></p>,会发现其高度不能小于某个值,比如在字体大小为12px时这个值是15px,在浏览器默认字体大小时这个值为19px,你可以通过调整IE6中的“查看>字体大小”来观看这个高度的变化。解决方案:

  1. 设置font-size:0,但是这个容器的高度最小为2px,所以没有办法实现高度为1px的效果
  2. 在容器中增加内容或其他空标签,如&nbsp;、<br />,并设置line-height:0,但该容器会存在一个和其父容器字体大小有关的外边距,这个问题在IE7中也会出现,
  3. 在容器中增加内容或其他空标签,同时设置font-size:0,line-height:0,
  4. 上述解决方案在某些字体下会有非常大难以预料的变化,如font-family:fixedsys;时
  5. 设置zoom:0.03,这个会受到font-size、font-family的影响而显示不同效果,并且在IE7下不可见,如
  6. 设置overflow:hidden,这是目前看到的最完美的解决方案

 

照此,我将样式设置为overflow:hidden

将td中的img改为td背景图片,//使用img就会撑大

在td中增加&nbsp;

增加样式line-height:0

这才解决问题。

Continue reading ie圆角,19px,挥之不去的最小高度

bit单位大小

style="width: 858px; height: 363px">

1 kB = 1024 B (kB - kilobajt) 千 1 MB = 1024 kB (MB - megabajt) 兆 1 GB = 1024 MB (GB - gigabajt) 吉 1 TB = 1024 GB (TB - terabajt) 太 1 PB = 1024 TB (PB - petabajt) 拍 1 EB = 1024 PB (EB - eksabajt) 艾 1 ZB = 1024 EB (ZB - zettabajt) 皆 1 YB = 1024 ZB (YB - jottabajt) 佑 1 BB = 1024 JB (BB - brontobajt)

Continue reading bit单位大小

Pagination


Total views.

© 2013 - 2023. All rights reserved.

Powered by Hydejack v6.6.1