Tag: ThinkPHP

TP中连贯操作的实现原理

没有评论

2010 年 12 月 10 日 at 下午 4:40分类:PHP | WEB开发

之前在用TP框架的时候,感觉到TP的那个关于数据库操作的连贯操作很是喜欢,最近在学习CI的时候发现在CI中也用到了连贯操作,但是还不是很多,
但是在即将面世的CI2.0中好像基本上都是采用连贯操作实现的额!今天有时间看了TP的源代码,弄懂了所谓神奇的连贯操作,其实主要依靠一个在
面向对象中作为错误处理的函数__call();下面是自己写了一个实现连贯操作的代码实例,只是为了说明原理:

<?php
class Users
{
	protected $options = array();

	public function select()
	{
		$fields = $this->options['field'] ? $this->options['field'] : "*";
		$query = "select ".$fields." from ";
		$query .= $this->options['table']." where ";
		$query .= $this->options['where']." limit 0,";
		$query .= $this->options['limit']." order by ";
		$query .= $this->options['order'].";";;
		echo $query;
		//do something for select data from database;
	}
	public function __call($methods,$vars)
	{
		$this->options[$methods] = $vars[0];
		return $this;			//关键在这里是返回对象
	}
}
$p = new Users();
$p->table('users')->field('username,passwd')->where("uid = 12")->limit('10')->order("uid asc")->select();

THINKPHP+JS缩放图片式截图的实现

没有评论

2010 年 12 月 02 日 at 下午 10:19分类:PHP | WEB开发

原始链接:http://www.cnblogs.com/scotoma/archive/2010/03/05/1679477.html

声明
本博文转载请注明作者和出处,鄙视转载文章还删改内容的LJ,在TP论坛潜水很久了,光看不做点贡献是不行的,呵呵!在这里得到了老大和国的照顾,这段时间将原来的项目里面的一些值得分享的拿出来和大家一起分享了!希望多多各位指教!THINKPHP,I love you.
今晚TP论坛的一位大哥加我了,说也遇到这个方面的问题,呵呵!想想其实很多东西都遇到了,是不是应该分享出来呢?其实自己的很多东西都是别人那来的,取之于网络用之于网络!只有大家多分享,才能够提高!

实现方式
上传图片 — 保存并显示图片 — JS获取缩略图参数 — 提交位置参数 — 图片缩放保存类处理图片 — 保存截取的图片–更新数据库 — 跳转
主要代码一:

public function cutimg()
 {
  $result = $this->upload('temp');
  if (!is_array($result))
  {
   $this->redirect('index');
  }
  else
  {
   $this->assign('imgurl', '__ROOT__/' . C('ATTACHDIR') . '/temp/' . $result[0]['savename']);
   $this->assign('imgname', $result[0]['savename']);
   $this->display();
  }
 } 

主要代码2:

public function setavatar()
 {
  if (!empty($_REQUEST['cut_pos']))
  {
  // import('ORG.Util.ImageResize');
   require('ImageResize.class.php');
   $imgresize = new ImageResize(); 
   // use the full path
   $url = C('ATTACHDIR') . '/temp/' . trim($_POST['imgname']);
   $imgresize->load($url);
   dump($url);
   $posary = explode(',', $_REQUEST['cut_pos']);
   foreach($posary as $k => $v)

   $posary[$k] = intval($v);

   if ($posary[2] > 0 && $posary[3] > 0) $imgresize->resize($posary[2], $posary[3]);

   dump($posary); 
   // create filename rule
   $uico = time() . '.jpg';
   dump($uico);
   $path = C('AVATAR'); 
   // save 120*120 image
   $imgresize->cut(120, 120, intval($posary[0]), intval($posary[1]));
   $large = 'l_' . $uico;
   $imgresize->save($path . $large);

   echo '<img src="'.__ROOT__.'/' . $path . $large . '" />'; 
   // update database
  }
  else
  { 
   // error reporting
  }
 }

源代码下载地址: 点击下载 其他的自己去完善了,运行需要TP框架请访问 http://www.thinkphp.cn 下载,然后下载扩展包,因为用到Upload类!

TP隐藏了网站的入口文件index.php

没有评论

2010 年 11 月 19 日 at 上午 8:30分类:CSS | PHP

今天使用伪静态将网站的入口文件index.php隐藏起来了,按照thinkphp官方手册上面讲的方法,我试了N次都没有成功,我也找不出是什么原因,最后实在没得办法只得自己手动一条一条的写.htaccess文件里面的规则,但是当我上传到虚拟主机上面去的时候发现,还是没有效果index.php文件依然没有隐藏,然后问了主机提供商,他们讲iis是不支持.htaccess文件的,iis只支持httpd.ini,然后又将.htaccess修改成httpd.ini文件。

值得注意的是.htaccess与httpd.ini之间的规则还是有些区别的,如果伪静态的文件不对还可能会出现错误500或错误404。

以下是我的httpd.ini文件中的两条
[ISAPI_Rewrite]
RewriteRule /Index/index/p/([0-9]+)/ /index.php/Index/index/p/$1
RewriteRule /blog/([0-9]+) /index.php/blog/$1

对应的.htaccess的规则则是

RewriteRule ^/blog/([0-9]+)$ /index.php/blog/$1

我在网上查找了一些资料,有的资料讲httpd.ini的文件中的特殊字符必须要转义才可以,但是我的没有转义也可以,不知道是不是服务器上面的伪静态软件的版本的问题。