此文件时入口文件index.php
此文件时入口文件index.php
<?php //定义一下ThinkPHP框架存放的路径
define('THINK_PATH','./ThinkPHP/'); //定义当前的项目的名称,此处的项目可理解为模块home理解为前台部分
define('APP_NAME','protal'); //定义项目的路径
define('APP_PATH','./protal/'); define('APP_DEBUG', true); require THINK_PATH.'ThinkPHP.php';
conf/config.php
<?php
//包含定义配置数据库连接的配置文件
$dbConf=include './config.inc.php'; //定义项目本身常规配置
$Conf=array(
//'配置项'=>'配置值' 'URL_MODEL'=>2,//2表示是URL重写模式 );
return array_merge($dbConf,$Conf); ?>
与入口文件同级的有一个配置文件config.inc.php
<?php
return array(
//'配置项'=>'配置值'
'DB_TYPE'=>'mysql', 'DB_HOST'=>'localhost',
//数据库名
'DB_NAME'=>'think',
//数据库用户
'DB_USER'=>'root',
//数据库密码
'DB_PWD'=>'',
//数据库端口
'DB_PORT'=>'3306',
//表前缀
'DB_PREFIX'=>'t_', )
?>
控制器IndexAction.class.php
<?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
public function index(){
header("Content-Type:text/html; charset=utf-8");
$this->display("reg");
} function add(){ if(md5($_POST['verify'])!=$_SESSION['verify']){ $this->error("验证码错误");
} //实例化自定义模型 M('User')实例化基础模型
$user=D("User"); if($user->create()){ //执行插入操作,执行成功后,返回新插入的数据库的ID
if($user->add()){ $this->success("注册成功");
}else{ $this->error("注册失败");
} }else{
//把错误信息提示给用户看 $this->error($user->getError()); } } //生成图片验证码
function verify(){
/**
* 在thinkPHP中如何实现验证码
*
* ThinkPHP已经为我们提供了图像处理的类库ThinkPHP\Extend\...
*
* 如何导入类库?
* 导入类库用"import(文件路径)来导入,但是注意文件的路径中的\要替换成 . 号"
* 1)导入系统的类库 import(从library开始算起) import('ORG.Util.Image')注意大小写
* 2)导入项目类库 import("@.ORG.Image") 我们需要在我恩的项目的Lib目录中存放
*/
//导入图形处理类库
import("ORG.Util.Image"); //import("@.ORG.Image"); //生成图形验证码
/*
length:验证码的长度,默认为4位数 mode:验证字符串的类型,默认为数字,其他支持类型有0 字母 1 数字 2 大写字母 3 小写字母 4中文 5混合(去掉了容易混淆的字符oOLl和数字01) type:验证码的图片类型,默认为png width:验证码的宽度,默认会自动根据验证码长度自动计算 height:验证码的高度,默认为22 verifyName:验证码的SESSION记录名称,默认为verify */
//实现英文验证码
image::buildImageVerify(4,1,'gif',60,22,'verify'); //实现中文验证码
//image::GBVerify();
} }
模型UserModel.class.php
<?php
class UserModel extends Model{ //自动验证
protected $_validate=array(
//每个字段的详细验证内容
array("username","require","用户名不能为空"),
array("username","checkLength","用户名长度不符合要求",0,'callback'),
array("password","require","密码不能为空"),
array("password","checkLength","密码长度的要求是5~15位之间",0,'callback'),
array("password","repassword","两次密码输入不一致",0,'confirm'),
array("qq","require","qq必须填写"), //array("cdate","require","时间不能为空",callback), ); //自动填充
protected $_auto=array( array("password","md5",3,'function'),
array("cdate","shijian",3,'callback'),
array("dizhi","getIp",3,'callback'), ); //自定义验证方法,来验证用户名的长度是否合法
//$date形参 可以写成任意如 $AA $bb
function checkLength($data){
//$data里存放的就是要验证的用户输入的字符串
if(strlen($data)<5||strlen($data)>15){ return false;
}else{ return true;
} } //返回访问者的IP地址
function getIp(){ return $_SERVER['REMOTE_ADDR'];
} function shijian(){ return date("Y-m-d H:i:s");
} }
模板reg.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
</head>
<body>
<form action="__URL__/add" method="post" >
<table width="407" height="424" align="center">
<th height="95"><H2>请认真填写以下注册信息</H2></th>
<tr>
<td><table height="273" align="center">
<tr>
<td width="74" align="right">用户名:</td>
<td width="304" align="left"><input type="text" name="username"></td>
</tr>
<tr>
<td height="70" align="right">密码:</td>
<td align="left"><input type="password" name="password"></td>
</tr>
<tr>
<td align="right">确认密码:</td>
<td align="left"><input type="password" name="repassword"></td>
</tr>
<tr>
<td align="right">QQ:</td>
<td align="left"><input type="text" name="qq"></td>
</tr>
<tr>
<td align="right">验证码:</td>
<td align="left"><input type="text" name="verify" >
<img id="verify" alt="验证码" onClick="show()" src="__URL__/verify"><a href="javascript:show()">看不清楚</a></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="提交"></td>
</tr>
</table></td>
</tr>
</table>
</form>
</body>
</html> <script> function show(){
document.getElementById("verify").src="__URL__/verify/random"+Math.random(); } </script>
如果还有不明白的地方,可以给我留言,我会详细解答您留下的问题,谢谢关注
目录结构如下
TP
--------ThinkPHP 文件夹
--------protal.php 这个文件叫protal.php
当运行protal.php时,会出现ThinkPHP的欢迎页面,证明已经配置成功,同时目录结果会发生变化
此时的目录为
TP
--------ThinkPHP 文件夹
--------protal.php 入口文件(上边那个文件)
--------protal 文件夹
生成的项目目录结构和系统目录类似,包括:
Common |
项目公共文件目录,一般放置项目的公共函数 |
Conf |
项目配置目录,项目所有的配置文件都放在这里 |
Lang |
项目语言包目录(可选 如果不需要多语言支持 可删除) |
Lib |
项目类库目录,通常包括Action和Model子目录 |
Tpl |
项目模板目录,支持模板主题 |
Runtime |
项目运行时目录,包括Cache(模板缓存)、Temp(数据缓存)、Data(数据目录)和Logs(日志文件)子目录,如果存在分组的话,则首先是分组目录。 |
mysql> SELECT FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> SELECT UNIXTIME_TIMESTAMP('1997-10-04 22:23:00');
-> '875996580'
此文件时入口文件index.php的更多相关文章
- 百度编辑器ueditor批量上传图片或者批量上传文件时,文件名称和内容不符合,错位问题
百度编辑器ueditor批量上传附件时,上传后的文件和实际文件名称错误,比如实际是文件名“dongcoder.xls”,上传后可能就成了“懂客.xls”.原因就是,上传文件时是异步上传,同时进行,导致 ...
- 下载文件时-修改文件名字 Redis在Windows中安装方法 SVN安装和使用(简单版) WinForm-SQL查询避免UI卡死 Asp.Net MVC Https设置
下载文件时-修改文件名字 1后台代码 /// <summary> /// 文件下载2 /// </summary> /// <param name="Fil ...
- How to:如何在调用外部文件时调试文件路径(常见于使用LaunchAppAndWait和LaunchApp函数)
原文:How to:如何在调用外部文件时调试文件路径(常见于使用LaunchAppAndWait和LaunchApp函数) IS里调用外部文件的时候,一般都是用LaunchAppAndWait函数,比 ...
- U盘删除文件时提示“文件或目录损坏且无法读取”的解决方法
U盘删除文件时提示“文件或目录损坏且无法读取”的解决方法 出现原因:在写入或读取文件时,进行复制操作,此时复制到的文件是不完整的!或者移动硬盘/U盘中途被拔出,导致文件损坏 异常现象:被删文件(夹)属 ...
- Spring Boot 在接收上传文件时,文件过大异常处理问题
Spring Boot 在接收上传文件时,文件过大时,或者请求过大,spring内部处理都会抛出异常,并且捕获不到. 虽然可以通过调节配置,增大 请求的限制值. 但是还是不太方便. 之所以捕获不到异常 ...
- 关于PHP include文件时的文件查找顺序
常常被include文件的路径搞晕. 看来是要理一理的时候了. PHP官方文档关于include搜索路径的解释是:先查找工作目录下相对于include_path设置所对应的路径,然后再搜索执行文件所在 ...
- C# 创建文件时,文件夹不存在,如何自动创建文件夹
c# 创建文件时怎么创建文件夹?strhtml=......StreamWriter sw=new StreamWriter("D:/test/1.aspx",false);sw. ...
- Python中通过open()操作文件时的文件中文名乱码问题
最近在用Python进行文件操作的时候,遇到创建中文文件名的乱码问题. Python默认是不支持中文的,一般我们在程序的开头加上#-*-coding:utf-8-*-来解决这个问题,但是在我用open ...
- PHP上传文件时,文件过大$_FILES为空
在php中判断上传文件的大小,但是文件一但过大,print_r($_FILES);的值就变为null了,有时候大家会遇到这么一个问题,上传小文件时,PHP能正常获取到,但是文件一超过8M就变为空了,我 ...
随机推荐
- myeclipse 写java代码提示 dead code 原因
经常使用MyEclipse要么Eclipse编辑写java程序猿代码.您可能经常会遇到一个黄色警戒线:dead code:一般程序猿遇到这些问题都会置之不理,反正也不影响程序的编译运行.对,这不是bu ...
- 自己动手写CPU之第七阶段(7)——乘累加指令的实现
将陆续上传本人写的新书<自己动手写CPU>.今天是第30篇.我尽量每周四篇 亚马逊的销售地址例如以下.欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8 ...
- bind的例子
10.24 给定一个string,使用bind和check_size在一个int的vector中查找第一个大于string长度的值. #include<iostream> #include ...
- 写个 Hello World 而已,要不要这么震撼?!
Atom 编辑器的一个插件,可以让你写代码的时候体验狂拽酷炫的效果! 如果来点音乐.再配上机械键盘的话,写代码是不是爽到爆呢? 这货全名叫: activate-power-mode atom pack ...
- c# 枚举基础有[flags]和没有的的区别
枚举提供成组的常数值,它们有助于使成员成为强类型以及提高代码的可读性.在 C# 中,使用 enum 来声明枚举. 枚举分为简单枚举和标志枚举两种. 基本语法示例 enum Day { Sun, Mon ...
- 在Android应用程序使用YouTube API来嵌入视频
在Android版YouTube播放器API使您可以将视频播放功能到你的Android应用程序.该API允许您加载和播放YouTube视频(和播放列表),并自定义和控制视频播放体验. 您可以加载或暗示 ...
- Mac通过以太网共享网络
在日常工作和学习中,需要WiFi热点而没有路由器,这个时候我们可以用我们工作的Mac来共享网络. 系统偏好设置->共享->互联网共享:设置共享来源和共享端口->WiFi选项:设置网络 ...
- 获取tcl开发工具
本篇文章对tcl脚本的解释工具获取和编辑工具进行一个简单的介绍,工欲善其事,必先利其器,掌握好解释工具的用法,能够使后续的脚本开发工作更加顺利.从源代码的获取到编译,详细解释在linux和window ...
- poj 1007 DNA Sorting
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 95437 Accepted: 38399 Des ...
- 闲话:你今天OO了吗?
如果你的分析习惯是在调研技术的时候最先弄清楚有多少业务流程,先画出业务流程图,然后顺藤摸瓜,找出业务流程中每一步骤的参与部门或岗位,弄清楚在这一步参与者所做的事情和填写表单的结果,并关心用户是如何把这 ...