欢迎访问shooting's blog,转载请注明原文URL!

关于css 绝对/相对定位 absolute与relative

2009年12月2日

一个朋友问过我css的定位属性中,absolute与relative到底有什么区别?我们都知道absolute是绝对定位,relative是相对定位,但是这个绝对与相对是什么意思呢?但是他们绝对和相对又是参照什么基点来的呢?
position:absolute; 他的意思是绝对定位,他是参照浏览器的左上角,配合TOP、RIGHT、BOTTOM、LEFT是个属性(简称TRBL)进行定位,在没有设定TRBL,默认依据父级的坐标原始点为基点(注意,仅仅是父级,而不是祖父级、曾祖父级。。),如果设定TRBL并且父级没有设定position属性,那么当前的absolute则以浏览器左上角作为基点参照TRBL属性进行定位,此时对象不再具有外补丁( margin ),但仍有内补丁( padding )和边框( border )。
position:relative; 他的意思是相对定位,他是参照父级的原始点为原始点,无父级则以文本流的顺序在上一个元素的底部为原始点,配合TRBL进行定位,当父级内有padding等CSS属性时,当前级的原始点则参照父级内容区的原始点进行定位,此时对象不可层叠,即设置z-index属性无用。

作者: shooting 分类: 学习笔记 标签: , 521次浏览

自己制作的umd电子书thinking in java中文版下载

2009年11月28日

先说下这本书确实很不错,先是因为朋友的推荐,下了电子版,立即被其中深入透彻的内容吸引了,然后从当当买了纸质的,这也是我买过的最贵的几本书之一了,后来为了方便在上下班路上用手机阅读,又自己根据电子版的pdf文件转成了txt格式的,无奈txt格式的没有目录结构,阅读查找起来实在是很不方便,于是又弄成了umd格式的,目录做到了每一章,呵呵,因为涉及到文件切割,编码问题,这个umd还是花了不少时间,当然好东西怎能一个人分享呢,下面是下载地址,喜欢的朋友可以留个脚印。
Think in java中文版

作者: shooting 分类: 全部文章, 学习笔记, 生活点滴 标签: , 478次浏览

强大的php魔术,类方法的overload,cakephp中findby的实现

2009年11月19日

今天又摸了下cakephp,突然想研究一下cakephp中modle所提供的findbyfieldname..这样的方法,深入研究了一下,又发现了php的一个新技能!这确实是一个很有魔力的东西,简单代码如下
class OverLoadable{
//这个方法,当调用类中不存在的的方法时会调用这个方法,php自动把这个不存在的方法名和这个方法里的变量数组填充进这个方法并自动调用,于是我要findbyUsername时, 我就可以简单的通过正则提取出方法名中的Username这个字符串,然后传递给类中真正存在的方法findbyfield($field),这样就间接的实现了findbyUsername方法
于是这里,我就可以通过正则提出出方法名
function __call($method, $params){
if(preg_match(“/findby(?P.*)/i”,$method,$preg))
return $this->findbyfield($preg['field']);
}
function findbyfield($field)
{
echo $field;
}
//当读取类的成员变量不存在时,触发这个方法,以你要读取的变量名作为参数
function __get($name){
echo “Your val is $name,and is not exsit in this class!”;
}
//当写入类的成员变量不存在时,触发这个方法,以你要写入的变量名和值作为参数
function __set($name,$value){
echo ‘Your val is ‘.$name.’=>’.$value;
}
}
$oo = new OverLoadable();
$oo->findbyusername();
$oo->i = 5;
?>

作者: shooting 分类: 全部文章, 学习笔记 标签: , , 807次浏览

php采集类

2009年10月29日

一个自己写的php采集类,充分利用正则的强大字串处理能力,使用简单,功能也比较简单,能满足一般应用,功能也在不断完善中,使用过程:设置一个初始url,添加导航规则,添加采集字段和规则,保存输出即可

使用代码如下

$spider = new spider();
$spider->addStartUrl(‘http://www.onlinedown.net/hits/week_{2,3}.htm’);
$spider->addLayer(0,’list’,’../soft/{*}.htm’);
$spider->addField(‘title’,’‘,array(‘华军软件园’,'安风信息网’));
$spider->run();
$spider->output();

作者: shooting 分类: 全部文章, 学习笔记 标签: , , 659次浏览

php变量类型?内存指针?

2009年10月28日

这个问题在C/C++语言中是个常见的问题,然而在php这种弱类型的语言中却并不被关注,个人觉得在php中探讨这个问题有点空中楼阁的感觉,因为php本身就是一种运行在Zend engine解释器基础上的一种语言,如果非要探讨这个问题,需要了解下php在zend引擎上的运行原理。
我们都知道C是强类型的语言,定义了的变量,在它的生命周期类就无法改变的,php这种弱类型的语言怎么能在C中完美运行呢?实际上php中的变量,在C中都是通过一个结构体来表示的,此结构体的定义是:
typedef struct _zval_struct {
zvalue_value value;
zend_uint refcount;
zend_uchar type;
zend_uchar is_ref;
} zval;
其中zvalue_value是真正保存数据的关键部分zvalue_value又是个联合体(union),结构如下
typedef union _zvalue_value {
long lval;
double dval;
struct {
char *val;
int len;
} str;
HashTable *ht;
zend_object_value obj;
} zvalue_value;
这个联合体中保存着一个弱类型的值常用的多种类型
zend engine根据 struct _zval_struct中的type来取union _zvalue_value中相应的单元,这就实现了php的多种类型间的自动转化。
总结,在php中探讨内存指针的问题没有意义,这应该是C/C++爱好者需要深入研究的问题!
深入内容参考 http://www.laruence.com/2008/08/22/412.html

作者: shooting 分类: 全部文章, 学习笔记 标签: , 616次浏览

我的wordpress图形验证码插件Wp-validcode

2009年10月25日

今天一天收到了65个垃圾评论,于是在前一个php验证码的基础上做出了自己的第一个wordpress插件,case见本站,下载地址在下面
wp-validcode
解压上传到wp-content/plugins目录,从后台安装即可!

作者: shooting 分类: 全部文章, 学习笔记 标签: , , , , 1,074次浏览

mysql group by排序问题【转】

2009年10月18日

类如 有一个 帖子的回复表,posts( id , tid , subject , message ,  dateline ) ,
id为 自动增长字段, tid为该回复的主题帖子的id(外键关联),  subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳表示,
现在要求 选出 前十个来自不同主题的最新回复
SELECT * FROM posts GROUP BY  tid  LIMIT 10
这样一个sql语句选出来的并非你想要的 最新的回复,而是最早的回复,实际上是某篇主题的第一条回复记录!
也就是说 GROUP BY 语句没有排序,那么怎么才能让 GROUP 按照 dateline 倒序排列呢?加上 order by 子句?
看下面:
SELECT * FROM posts GROUP BY  tid  ORDER BY dateline DESC LIMIT [...]

作者: shooting 分类: 全部文章, 学习笔记, 经典网摘 标签: , 2,020次浏览

preg_match 匹配中文出现错误bug的解决办法

2009年9月28日

论坛上的一个网友提出的问题,在ascii编码的php文件中,定义的一个函数,简单描述如下:
function checkpost()
{
global $subject
$censoww=array(‘婊”);
preg_match(‘/’ . implode(‘|’, $censoww) . ‘/i’, $subject,$matches) ) { echo “非法内容”;}
这是一个简单的禁字检测程序,广泛应用在bbs等程序中.可是这里出现了个问题,但$subject=’存活’ 或者 ‘存货’等时,这个程序竟然也提示非法内容。首先我提倡在程序中统一使用utf-8编码,当然这个程序在utf-8编码下应该没有问题的,可是在ascii下,就会有一些奇怪的bug。这位网页的程序都是基于gbk的,不可能全部转码,只能打打补丁了,下面是简单的解决方案:
mb_internal_encoding(‘gbk’);//指定网络编码为gbk,这同时也作为正则匹配的编码
function checkpost()
{
global $subject
$censoww=array(‘婊”);
//这里使用mb_eregi 代替preg_match,mb_eregi本身支持多字节的正则匹配
if(mb_eregi( implode(‘|’, $censoww) , $subject,$matches) ) { echo “非法内容”;}
顺便翻译了下手册中关于这个函数的简单说明
mb_eregi() executes the regular expression match with multibyte support, and returns 1 if matches are found. This function ignore case. If the optional third parameter was specified, the function returns [...]

作者: shooting 分类: 全部文章, 学习笔记 标签: , , , 745次浏览

div+css 图片垂直居中解决办法

2009年9月27日

一个简单的问题实现在div+css中实现起来可没有那么轻松,参考网上找到的一些资料,找到了一个相对比较简单,而且效果还不错的方案,如下:
html结构很简单如下
<div class=”img_wrap”><img src =”http://www.baidu.com/img/baidu_logo.gif” /></div>
css样式
.img_wrap{/*非IE的主流浏览器识别的垂直居中的方法*/
display: table-cell;
vertical-align:middle;
text-align:center;
*display: block;
*font-size: 131px;/*约为高度的0.873,150*0.873 约为131*/
width:150px;
height:150px;
border: 1px solid #ccc;}
.img_wrap img{vertical-align:middle;}

作者: shooting 分类: 全部文章, 学习笔记 标签: , , 397次浏览

php mkdir 递归创建多级目录

2009年9月14日

php默认的mkdir一次只能创建一层目录,如果在当前目录下创建一个div/css/layout 的目录就需要逐层逐层的先创建div,再创建div/css 再创建 div/css/layout,然而我们希望能让程序自动帮我们完成这个过程。
其实思路也很简单,1.先判断 div目录是否存在,不存在则创建;2.判断子目录 div/css 是否存在,不能存在则创建,3.在第二步中以子目录作为参数递归调用函数本身。也可以按相反顺序来,1.先判断最底层目录div/css/layout是否存在;2.判断div/css/layout的上层目录div/css是否存在,不存在则以div/css作为参数递归进行。。
下面是程序代码:

function mkdirs($dir)
{
if(!is_dir($dir))
{
if(!mkdirs(dirname($dir))){
return false;
}
if(!mkdir($dir,0777)){
return false;
}
}
return true;
}
mkdirs(‘div/css/layout’);

同样的思路,php用rmdir和unlink递归删除多级目录的代码:
function rmdirs($dir)
{
$d = dir($dir);
while (false !== ($child = $d->read())){
if($child != ‘.’ && $child != ‘..’){
if(is_dir($dir.’/’.$child))
rmdirs($dir.’/’.$child);
else unlink($dir.’/’.$child);
}
}
$d->close();
rmdir($dir);
}

作者: shooting 分类: 全部文章, 学习笔记 标签: , , , , , 884次浏览