PHP域名授权代码

<?php
$geturl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if(isset($geturl)&&!empty($geturl)){
$fromHost = array(
'localhost'
);
$urlArr = parse_url($geturl);
$host = isset($urlArr['host'])?$urlArr['host']:'';
$host = strtolower(str_ireplace('www.','',$host));
if(!in_array($host,$fromHost)){
echo "禁止访问";
} else {
echo "正常访问";
}
}

以上是PHP域名授权代码,可以把域名授权文件放到核心文件,所有文件都需要引用核心文件,核心文件可以是核心类库或者数据库链接文件等,其次文件里还可以加一句话木马哦,如果删掉就不能用了,方式程序被盗增加了程序安全性。

浅谈软件框架MVC模式开发

想用PHP做一个行业网站,代码要规范,功能也要都实现,如果用PHP语言开发的话怕时间太久,如果用CMS的话,实现一些功能不好实现,而且还有很多冗余代码,不如自己开发的好,于是让我想到了Thinkphp,还认识一个php高手,人称“冉冉”,小女孩可好了,技术也好,人也好 ,先说下MVC模式开发吧。
记得几个月前,我浅薄的看过Thinkphp文档,那段时间用过vbscript和phpcms,然后看Thinkphp发现很不一样,看了点时间也没看懂什么,只是觉得他 的URL与普通的网站不一样,为什么会在目录形式下加参数访问呢,里面怎么实现的就不晓得了。今晚我互相起了MFC的MVC模式框架,因为最MFC比其他 的了解一些,说起MFC想起胡师傅了,听说你去上海了,不晓得还会回来么,记得有段时间你跟我讲过操作系统DOS的模式也是mvc,那时我没能理解了,咦,现在你人却走了,不然去请教请教你,mvc网上很多介绍 的,但是没实际应用过,只能简单的了解下大概了,既然Thinkphp与Mfc都一样是mvc模式,mfc是拥有文档类 CDocument ,视图类 CView 和应用程序类 CWinApp组成的,thinkphp也不特殊,只不过他的是web形式访问的。这样想就好了。就可以理解一个新框架的思路了,然后进一步去学习应用了。
mvc指的是模型(Model),视图(View)和控制(Controller),模型(Model)就是mfc的文档类 CDocument,视图(View)就是mfc的视图类 CView ,就是mfc的应用程序类 CWinApp。 一一对应,相辅相成。实现了界面与功能分离。
Thinkphp App::run(); 运行试试。。。

Thinkphp 去掉index.php详细步骤

1、在Apache-20\conf文件夹下找到httpd.conf配置文件 搜索mod_rewrite.so模块 去掉前面的‘#’号;
2、在httpd.conf配置文件中搜索
Options FollowSymLinks
AllowOverride None
将第一行的Options FollowSymLinks改为AllowOverride ALL 即:
AllowOverride ALL
AllowOverride None
3、在Thinkphp项目配置文件里面添加配置: ‘URL_MODEL’ => ‘2’,
4、用editplus或者其他工具创建.htaccess文件,保存内容为:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

ThinkPHP构造函数与前后置方法执行顺序

在使用ThinkPHP过程中,保存了Session作为公共类,提供其他类继承,公共类使用前置方法_before_index最session进行了判断,发现其他模块不用通过session就可以直接进入了,如果别人知道action中类的方法就可以直接打开了,这种验证是不健全的,前置方法和后置方法不是构造函数与析构函数,想使用构造函数还是要用php原生的构造与析构函数,或者内置提供的。简单的测试了一下前置方法和后置方法与index的执行顺利和作用域。前置方法和后置方法与index方法的作用域仅限当前方法,而构造函数适用于整个类。

__Construct() 或者 _initialize 为构造函数,在整个类文件中都是有作用域,就是每一个方法都会去验证。而前置和后置与index方法只会验证当前方法。

前置方法与后置方法与index方法官方有文档有写过执行顺序:

_before_index()  //前置方法;
index() //默认第一个执行方法;
_after_index() // 后置方法。

ThinkPHP模版总结

模版配置:
‘TEMP_FULE_DEPR’->’_’, //模版文件目录层次 Index_index.html
‘DEFAULT_THENE’->My, // My文件夹为模版主题
‘TMPL_DETECT_THENE’->true, //开启动态模版主题
‘THENE_LIST’->’My,app,test,demo’, //支持的模版主题列表
模版操作函数:
//模版不同方法间访问
display(主题:类名或文件夹名:方法名);
//验证码点击刷新:
<input class=wenbenkuang name=”verifycode” type=text value=”” maxLength=4 size=10>
<img src=”__URL__/verify/” onclick=’this.src=this.src+”?”+Math.random()’/>
//模版数组和对象输出
{$变量名[索引]} {$对象名:类成员或$对象名->类成员}
//模版中使用函数(MD5加密)
{$password|MD5} == echo MD5($password);
//模版中使用变量默认值(如果不存在变量取默认值输出)
{$name|default=’默认值’}

Thinkphp用户验证模块代码

<?
/**
*本类是用户登陆验证模块
**/
class IndexAction extends Action {
 
//显示登录页
public function index(){
$this->display();
    }
 
//验证码验证+用户验证+密码验证-方法
Public function iflogin(){
$username=$_POST['username'];
$password=$_POST['pasword'];
$verify=$_POST['verifycode'];
if($_SESSION['verify']!==md5($verify)){
$this->error('验证码输入错误!');
}
if(isset($_POST['username']) && $_POST['username'] == null){
$this->show('<script language="JavaScript">alert("请输入用户名!");location.href="__URL__/login";</script>;');
}
 
$admin=M('User');
$where['username']=$_POST['username'];
$where['password']=$_POST['password'];
$i=$admin->where($where)->count();
if($i>0){
$this->redirect('Index/index');
}
else{
$this->error('你输入的用户名或密码不正确,请重新输入!');
}
$this->diaplay();
 
}
 
 
//用户登陆页面
    Public function login(){
    $this->display();
    }
 
 
//验证码-方法
Public function verify(){
import('ORG.Util.Image');
Image::buildImageVerify();
}
 

}

//验证码点击刷新:

<input class=wenbenkuang name="verifycode" type=text value="" maxLength=4 size=10>
<img src="__URL__/verify/"  onclick='this.src=this.src+"?"+Math.random()'/>

Thinkphp留言板模块Demo

首先在在Mysql数据库中新建一个数据库,配置下Thinkphp数据库链接,详细就不说明了,创建一个表,新建三个字段,id,name,guestbook,其中id为自增字段且为唯一主键,也可以通过下面代码执行sql语句:

CREATE TABLE IF NOT EXISTS `0535coder_guest` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(2000) NOT NULL,
  `guest` varchar(2000) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;
 
--
-- 转存表中的数据 `joys_guest`
--
 
INSERT INTO `0535coder_guest` (`id`, `name`, `guest`) VALUES
(1, 'name', 'guest'),
(2, 'lida', 'dage'),
(4, 'yueyue', 'dijiangyue'),
(5, 'xiaobai', 'wangjing'),
(11, 'test', 'test'),
(7, 'wxz', 'wwzzxx1233'),
(13, 'demo', 'demo');

其次是创建一个类文件UserAction.class.php 文件代码如下:

<?php
class GuestAction extends CommonAction{
public function index(){
$guest = M('Guest');
$arr = $guest->order('id')->select();
$this->assign('guestdate',$arr);
$this->display();
//echo '查询留言';
}
Public function displayadd(){
$guest = M('Guest');
$this->display();
//添加留言页面
}
public function guestadd(){
$guest = M('Guest');
$guest->id=$_POST['id'];
$guest->name=$_POST['name'];
$guest->guest=$_POST['guestbook'];
$count=$guest->add();
if($count>0){
$this->success('添加数据成功','__URL__');
 
}
else{
$this->error('添加数据失败');
}
$this->display();
//添加留言处理程序
}
 
public function guestdel(){
$guest = M('Guest');
$id=$_GET['id'];
$count = $guest->delete($id);
if($count>0){
$this->success('数据删除成功!');
}else{
$this->error('数据删除失败!');
}
//删除留言
}
 
public function guestup(){
$guest = M('Guest');
$id=$_GET['id'];
$arr=$guest->find($id);
$this->assign('data',$arr);
$this->display();
//修改留言-显示
}
 
Public function guestupload(){
$guest = M('Guest');
$data['id']=$_POST['id'];
$data['name']=$_POST['name'];
$data['guest']=$_POST['guestbook'];
$count=$guest->save($data);
//var_dump($data);
if($count>0){
$this->success('数据修改成功!','__URL__');
}
else{
$this->error('数据修改失败');
}
//修改留言-添加数据库
}
}
?>

剩下的就是模版文件了,这里比较简单的一个表格,分为三个文件,依次是:

1.index.html 文件内容为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>留言板查询页面</title>
</head>
<body>
<table width="75%" border="1" align="center">
  <tr>
    <td>唯一ID</td>
    <td>网名</td>
    <td>留言内容</td>
<td><a href='__URL__/guestup'>修改留言</a> </td>
<td><a href='__URL__/guestdel'>删除留言</a></td>
  </tr>
  <volist name='guestdate' id='vo'>
  <tr>
    <td><{$vo['id']}></td>
    <td><{$vo['name']}></td>
    <td><{$vo['guest']}></td>
<td><a href="__URL__/guestup/id/<{$vo['id']}>">修改留言</a> </td>
<td><a href="__URL__/guestdel/id/<{$vo['id']}>">删除留言</a></td>
  </tr>
  </volist>
</table>
<p><a href='__URL__/displayadd'>添加新留言</a></p>
</body>
</html>

2.guestup.html文件内容为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>留言板修改页面</title>
</head>
<body>
<form action='__URL__/guestupload/id/<{$data.id}>' method='post'>
  <p> ID:
    <input type="text" name="id" value="<{$data.id}>"/>
  </p>
  <p> 网名:
    <input type="text" name="name" value="<{$data.name}>" />
  </p>
  <p>留言:
    <textarea name="guestbook"><{$data.guest}></textarea>
  </p>
  <p>
    <input type="submit" name="Submit" value="提交" />
  </p>
</form>
<p></p>
</body>
</html>

3.displayadd.html文件内容为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>留言板增加页面</title>
</head>
<body>
<form action='__URL__/guestadd/' method='post'>
  <p> ID:
    <input type="text" name="id" />
  </p>
  <p> 网名:
    <input type="text" name="name" />
  </p>
  <p>留言:
    <textarea name="guestbook"></textarea>
  </p>
  <p>
    <input type="submit" name="Submit" value="提交" />
  </p>
</form>
<p></p>
</body>
</html>

Thinkphp数据库操作CURD

Thinkphp数据库操作CURD增删改查操作代码:

Public function selectdata(){
$m = M('User');
$arr  = $m->select();
//var_dump($arr);
$this->assign('data',$arr);
$this->display();
//查询数据
}

Public function addsql(){
$m = M('User');
$m -> username='root';
$m -> add();
//添加数据
}
 
Public function delsql(){
$m = M('User');
$m -> delete(2);
//$m -> where('id=2')->delete(); 与上面作用一样,不同写法
//删除数据
}
 
Public function updatesql(){
$m = M('User');
$data['id']=1;
$data['username']='admin';
$m -> save($data);
var_dump($arr);
//修改数据
}

Thinkphp数据库查询

创建data方法,实现代码如下:

Public function data(){
$m = M('User');
$arr  = $m->select();
//find($id); 只显示一条数据的方法,Selece获取所有数据.getfield($字段名);获取一个具体字段的名字, $arr  = $m->where(‘id=2’)->getfield(name); 获取指定id的列数据,即连贯操作。
//var_dump($arr);
$this->assign('data',$arr);
$this->display();

}

在Tpl模版文件夹中写入对应的data.html文件,调用代码如下:
测试输出:

<volist name='data' id='vo'>
ID:<{$vo['id']}><br/>
用户名:<{$vo['username']}><br/>
密码:<{$vo['password']}><br/>
姓名:<{$vo['name']}><br/>
邮箱:<{$vo['email']}><br/>
注册时间:<{$vo['reg_date']}><br/>
登陆时间:<{$vo['last_login_date']}><br/>
用户组:<{$vo['active']}><br/>
备注:<{$vo['params']}><br/>
一维数组采用<{id[字段名]>访问;
二维数组采用<{id.字段名}>访问。
</volist>