第 00 天,客户:我们以前一个系统由于做得比较仓促,都没有做登录验证,你帮我们做一个吧。程序员:最近没空呢。客户:这个东西很简单,就一个用户名、密码登录,对你们来说分分钟的事情,这样吧,加个班,给你一千块钱,怎么样?程序员:好吧。
第 01 天,功能做好了。
第 02 天,客户说:增加一个用户名记住功能吧,免得每次都输。
第 03 天,客户说:用户名记住都做了,密码记住也做了吧。
很多程序员在使用codeigniter CLI下执行一个大批量数据导入的问题时,会一直出现内存过高的情况,下面对此分析器原因及解决办法。
CI db会将所有的查询sql和和sql执行时间保存下来,对于类似百万级大数据量的导入问题来说,其执行的sql记录都会被保存在内容中,这就占用了大量的内容直至脚本结束。
解决办法:
当你执行大数量的db操作时,记得设置:
$this->db->save_queries = FALSE;
让我们以Hello World为例,首先创建一个简单的控制器。使用你的文本编辑器,创建一个叫做 tools.php 的文件,并且输入如下代码:
<?php
class Tools extends CI_Controller {
public function message($to = 'World')
在开启smarty缓存的情况下,第一次执行时会将其编译好的输出文件保存到cache目录中,然后在程序中通过smarty的is_cache()函数检测其 cache文件是否过期,如果过期会更新缓存,如果没有过期会自动调用cache文件,这样就省去了编译的过程。检测cache过期是看模板文件是否在指定的生命周期内是否更改,这里的更改是通过检测文件的最近修改时间实现的,不是通过检测模板文件内容。
防止一个模板文件的整篇都被缓存:
index.php文件:
require('smarty.class.php');
很多时候我们在用smarty时,并不希望缓存整个页面,例如天气、股票等这类即时更新的信息。那么我们可以让其不缓存,常见的实现有如下3种方法:
1.insert 法:
Insert 函数类似于 inluce 函数,不同之处是 insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数。比如说我们定义一个显示时间的函数:
function insert_get_current_time() {
ThinkPHP内置了表单令牌验证功能,可以有效防止表单的远程提交等安全防护。
表单令牌验证相关的配置参数有:
'TOKEN_ON'=>true, // 是否开启令牌验证
'TOKEN_NAME'=>'__hash__', // 令牌验证的表单隐藏字段名称
'TOKEN_TYPE'=>'md5', //令牌哈希验证规则 默认为MD5
如果开启表单令牌验证功能,系统会自动在带有表单的模板文件里面自动生成以TOKEN_NAME为名称的隐藏域,其值则是TOKEN_TYPE方式生成的哈希字符串,用于实现表单的自动令牌验证。
通常volist标签多用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,对此可以直接使用volist标签进行输出。
在控制器中首先对模版赋值,如下例所示:
$User = M('User');
$list = $User->limit(10)->select();
$this->assign('list',$list);
在模版定义如下,循环输出用户的编号和姓名:
<volist name="list" id="vo">
weebox是一个基于jquery的弹窗插件,一开始只是拿了一个 jQuery Modal Dialog 来用,但那位任兄写的支持太有限了,于是就着手修改代码,但改到后面,发现基本上看不到原来的代码了,只有css样式中几张背景图留下来了,我就改了个名字。
ThinkPHP的I方法是众多单字母函数中的新成员,其命名来自于英文Input(输入),主要用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:
I('变量类型.变量名',['默认值'],['过滤方法'])
变量类型是指请求方式或者输入类型。
各个变量类型的含义如下:
一、基础知识
1.手机APP的类型
移动端的应用有这几种:WebApp,NativeApp,HybridApp。
WebApp 就是手机网站,需要用手机浏览器访问。
NativeApp是用原生语言开发,用户需要下载安装的手机应用。 NativeApp的开发成本很高,每个平台的开发语言都不一样, 比如IOS的开发语言是object C , Android系统的APP需要用Java开发, WindowsPhone 则需要用 C# 开发。那么我们如果需要做一个多平台都能运行的APP,需要用多种语言