PHP特殊的函数调用方式

2011年12月29日 无风的飘逸 没有评论

<?php
$zencart="strlen";
echo $zencart('iash21iawhdj98UH3');
?>

以上代码等同于

<?php
$zencart="iash21iawhdj98UH3";
echo strlen($zencart);
?>

Share
分类: PHP 标签:

LINUX下IF的使用参数

2011年12月5日 无风的飘逸 没有评论

[ -a FILE ]  如果 FILE 存在则为真。
[ -b FILE ]  如果 FILE 存在且是一个块特殊文件则为真。
[ -c FILE ]  如果 FILE 存在且是一个字特殊文件则为真。
[ -d FILE ]  如果 FILE 存在且是一个目录则为真。
[ -e FILE ]  如果 FILE 存在则为真。

[ -f FILE ]  如果 FILE 存在且是一个普通文件则为真。
[ -g FILE ]  如果 FILE 存在且已经设置了SGID则为真。
[ -h FILE ]  如果 FILE 存在且是一个符号连接则为真。
[ -k FILE ]  如果 FILE 存在且已经设置了粘制位则为真。
[ -p FILE ]  如果 FILE 存在且是一个名字管道(F如果O)则为真。
[ -r FILE ]  如果 FILE 存在且是可读的则为真。
[ -s FILE ]  如果 FILE 存在且大小不为0则为真。
[ -t FD ]  如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILE ]  如果 FILE 存在且设置了SUID (set user ID)则为真。
[ -w FILE ]  如果 FILE 如果 FILE 存在且是可写的则为真。
[ -x FILE ]  如果 FILE 存在且是可执行的则为真。
[ -O FILE ]  如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ]  如果 FILE 存在且属有效用户组则为真。
[ -L FILE ]  如果 FILE 存在且是一个符号连接则为真。
[ -N FILE ]  如果 FILE 存在 and has been mod如果ied since it was last read则为真。
[ -S FILE ]  如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ]  如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真。
[ FILE1 -ot FILE2 ]  如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
[ FILE1 -ef FILE2 ]  如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
[ -o OPTIONNAME ]  如果 shell选项 “OPTIONNAME” 开启则为真。
[ -z STRING ]  “STRING” 的长度为零则为真。
[ -n STRING ] or [ STRING ]  “STRING” 的长度为非零 non-zero则为真。
[ STRING1 == STRING2 ]  如果2个字符串相同。 “=” may be used instead of “==” for strict POSIX compliance则为真。
[ STRING1 != STRING2 ]  如果字符串不相等则为真。
[ STRING1 < STRING2 ]  如果 “STRING1” sorts before “STRING2” lexicographically in the current locale则为真。
[ STRING1 > STRING2 ]  如果 “STRING1” sorts after “STRING2” lexicographically in the current locale则为真。
[ ARG1 OP ARG2 ] “OP” is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if “ARG1” is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to “ARG2”, respectively. “ARG1” and “ARG2” are integers.UNIX Shell 里面比较字符写法:

-eq   等于
-ne    不等于
-gt    大于
-lt    小于
-le    小于等于
-ge   大于等于
-z    空串
=     两个字符相等
!=    两个字符不等
-n    非空串

Share
分类: Linux 技术 标签:

最新实战讲解.htaccess文件rewrite规则

2011年12月4日 无风的飘逸 没有评论

.htaccess文件大家都不陌生吧。不认识的自己去搜一下……顺便告诉你,这是个好东西,值得一学。

似乎网上关于.htaccess编写方法的教程很有限,相信博主们也没有几个是自己写的吧?

我在这里就搜了几个常用规则,总结一下rewrite规则的用法。当然这只是.htaccess功能的一小部分,但是相当实用。

如果熟练掌握rewrite规则的编写,能够加强对网站URL的控制,对用户体验、SEO都十分有利。

 

一、防盗链功能

1 RewriteEngine On
2 RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]
3 RewriteCond %{HTTP_REFERER} !^$
4 RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

逐行讲解一下:

1.打开Rewrite功能。有可能服务器设置里已经是全局下打开了,但是多写也没事。

2.RewriteCond指令,定义生效条件,用于寻找匹配条件的地址。后面内容用正则表达式匹配。代表含义是发送的请求不由mysite.com而来,那就是盗链啦。末尾的[NC]代表忽略大小写。

3.发送请求的主机前缀不为空。

4.RewriteRule指令,定义重写规则,把匹配的地址按此规则重写。本例中把这些后缀为这些图片格式的,都替换到某一个图片下。[L]表示这是最后一段规则。

只这四行就实现了防盗链是不是很神奇(- -||),编写起来是不是又觉得复杂。

这里总结了几个常用参数(不是全部):

RewriteCond下:

[NC] 不分字母大小写

[OR] 用于连接下一条规则

 

RewriteRule下:

[R] 强制重定向,[R=code] code默认为302

[F] 禁用URL,返回HTTP 403 错误

[L] 这是最后一条规则,之后内容无用

还有一篇关于正则表达式的教程(很详细):http://www.unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm

 

二、网址规范化

1 Options +FollowSymLinks
2 rewriteEngine on
3 rewriteCond %{http_host} ^yourdomain.com [NC]
4 rewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

这个是把所有二级域名都重定向到www.yourdomain.com的例子,现在看来是不是很简单了?

需要注意的是,这里的Options +FollowSymLinks不是必须的,但在某些服务器如果不设置FollowSymLinks,可能引起500错误。

再来看一个好玩的重定向

1 RewriteEngine On
2 RewriteBase /
3 RewriteCond %{HTTP_USER_AGENT} (Googlebot)
4 RewriteRule ^ http://abc.com/ [R=301,L]

1.打开Rewrite功能。

2.RewriteBase指令,设置目录级重写的基准URL。可以理解成把该目录(这个.htaccess所在目录)假定为基准的URL前缀。本例中这样的写法无用。

3.RewriteCond指令。匹配所有USER_AGENT为Googlebot的发送请求。

4.RewriteRule指令。本例中把这些请求都重定向到了abc.com。

在本例中,这个配置应该是黑客所为,把google蜘蛛指向某个网站,等于伪造PR。

 

三、临时错误页面

当你的网站在升级、修改的时候,你最好让访客转到指定的页面,而不是没做完的页面或者是错误页。

这时我们做一个302转跳就好。

1 RewriteEngine on
2 RewriteCond %{REQUEST_URI} !/maintenance.html$
3 RewriteCond %{REMOTE_ADDR} !^123.123.123.123
4 RewriteRule $ /error.html [R=302,L]

1.继续打开Rewrite功能。- -|

2.REQUEST_URI,请求的URL值。这里指所有访问maintenance.html页面的请求。

3.REMOTE_ADDR,向服务器发送请求的IP地址。本例中此处应设为你自己的IP,这样就只有你能访问。

4.RewriteRule指令。本例中把这些请求都重定向到了error.html 。

在本例,我们总结几个常用的正则表达式和特殊符号。

(.*) 用于匹配某一区域内所有内容。如 abc/def/ghi 可用 (.*)/(.*)/(.*) 匹配。

([a-zA-Z_]+) 匹配英文单词,允许用-和_连接。

([0-9]+) 匹配多位数字,通常用于匹配ID。

([0-9]) 只匹配一位的数字。

^ 表示正则的开始

$ 表示正则的结束

 

四、重定向RSS地址到Feedburner

除了可以更改模板里的RSS地址外,.htaccess也能实现RSS地址的更改,并更加方便。

1 RewriteEngine on
2 RewriteCond %{HTTP_USER_AGENT} !FeedBurner    [NC]
3 RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
4 RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feed.onexin.net/yourname [R=302,NC,L]

有了上面的总结,本例其实就很简单了吧。

唯一要注意的是这样操作要确保填写正确的HTTP_USER_AGENT。其实你不常换模板的话。。可能还是直接改模板更省事。

在最后,为懒虫们推荐几个好东东:

在线.htaccess生成器http://tool.onexin.net/htaccess/

mod_rewrite模块中文参考手册http://help.onexin.net/apache/mod/mod_rewrite.html

P.S. 其实我以为rewrite也只是APACHE一个模块而已,做到边查边写足矣,实在不行直接去搜一个规则也未尝不可。没有必要费太大力气去学。不过其中的正则表达式还是非常实用的,值得深入学习

Share
分类: apache 标签:

关于css3在ie下的兼容性问题

2011年11月25日 无风的飘逸 没有评论

大家都知道现在已经是css3时代了,相信看到这篇文章的您也一定垂涎于

border-radius和box-shadow这样的属性吧。

虽然用上了ie-css3.htc 之后,可以感受到css3的强大,但是在实际使用中,大家一定非常头疼于不兼容

比如以下两段代码;

第一段:

.test {
width:560px;
height:400px;
background-color:#FFFFFF;
padding:10px 8px 6px;
border: 1px solid #ff0000;
margin-bottom:10px;
-moz-border-radius: 15px; /* Firefox */
-webkit-border-radius: 15px; /* Safari and Chrome */
border-radius: 15px; /* Opera 10.5+, future browsers, and now also Internet Explorer 6+ using IE-CSS3 */

-moz-box-shadow: 10px 10px 20px #000; /* Firefox */
-webkit-box-shadow: 10px 10px 20px #000; /* Safari and Chrome */
box-shadow: 10px 10px 20px #000; /* Opera 10.5+, future browsers and IE6+ using IE-CSS3 */

behavior: url(ie-css3.htc); /* This lets IE know to call the script on all elements which get the 'box' class */
}

<div id="sveinjoe">
<div>
这个页面是用以测试主机是否有正确的content-type。
</div>
</div>

经过测试,正常显示圆角和阴影,那么如果我对test的外围div设置背景之后,

#sveinjoe{
width:962px;
height:1000px;
margin:0 auto;
background-color:#FFFFFF;
}

 

效果就大大的不相同了,圆解和阴影都不见了,这里为了排除边框和底色颜色一致导致圆角看不到的可能,我把边框的颜色设置为了红色。但是还是没有显示。

所以初步结论是在多层DIV中,如果下一层的DIV设有背景的话,border-radius    box-shadow 失效;

Share
分类: CSS 标签:

excel取文本最后一个单词的命令

2011年11月23日 无风的飘逸 没有评论

=MID(TRIM(C2),FIND("$",SUBSTITUTE(TRIM(C2)," ","$",LEN(TRIM(C2))-LEN(SUBSTITUTE(TRIM(C2)," ",""))))+1,LEN(TRIM(C2)))

解释:

1.1 TRIM(C2)  把c2里头尾多余的空格去除,把文本中间的双空格或者多空格替换成单空格;

1.2 LEN(TRIM(C2))-LEN(SUBSTITUTE(TRIM(C2)," ","")) 通过比对文本的总长度和文本去掉空格之后的长度差来获取总共有多少个空格N

1.3 SUBSTITUTE(TRIM(C2)," ","$",LEN(TRIM(C2))-LEN(SUBSTITUTE(TRIM(C2)," ","")))

将c2中的文本进行1.1操作之后,以及获取到总空格数量N之后,将第N个空格替换成$

1.4 获取文本中$的位置,并用mid函数取从$开始到文本结尾的单词。

 

Share
分类: 未分类 标签:

莆田送入洞房用语、赞语

2011年11月18日 无风的飘逸 没有评论

1.今夜大家送孩儿,新郎新娘啼微微。燕尔新婚鱼得水,早生贵了耀门楣

2.洞房花烛小仙人,一对凤灯挂两边。东西接换入门喜,一刻千金乐多年。3.大家齐没门,单手掩房门。洞房初会见,妻妻情义绵。

新婚誓言:我们两人举讫手,从此成了小两心.我们两人一根筋,海枯石烂不变心.尔们两人共提高,多吃罗卜少吃醋.我们两人有寻求,共创美妙争上游.咱们两人情感佳,明年就生小宝宝.恭喜祝贺昨天两人走到一伏,恭贺恭贺明年两个变成三个.

新郎新娘抱出灯

这个消息大新颖

妇妻独特全尽力

明年确定贵子生

赞诵四句:

今请金杯且收起,今宵才郎配淑女;

夫妻洞房花烛夜,明年一定抱孩儿。

送赞四句:

洞房花烛小神仙,一对凤灯挂两边;

货色交流进门喜,一寸光阴一寸金乐青年。

今宵闹房喜苍苍,抱起新娘挂灯笼;

进灯是三元五桂,放下是百子千孙。

赞诵四句:

洞房花烛房中启,仙母亲身送子来;

土地举香去迎接,天赐文曲星投胎。

一对烛火笑微微,南海观音送子来;

新郎新娘亲手交,夫妻牢牢抱帐里。

Share
分类: 其他转载 标签:

浅淡mysql的tsql语句中的limit的用法

2011年10月29日 无风的飘逸 2 条评论

大家都知道mysql里有一个limit功能,用来限制数据库分页。那么limit如何使用呢?

使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已 经为我们提供了这样一个功能。

SELECT * FROM table   LIMIT [offset,] rows | rows OFFSET offset

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初 始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

mysql> SELECT * FROM table LIMIT 5,10;  // 检索记录行 6-15

//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行

//换句话说,LIMIT n 等价于 LIMIT 0,n。
Share
分类: 未分类 标签:

ultra edit如何匹配星号

2011年9月23日 无风的飘逸 没有评论

ultra edit有正则替换功能,

但是*本身代表多个字符,比如在下面的例子中,如何表达星号呢?

删除文本中所有

/*  与*/之间的字符(包含/* 与 */)

这里有一解
/[*]*[*]/
可用[*]来代表星号本身。题解!

Share
分类: Windows 实战 标签:

zen-cart细节图紊乱解决方案

2011年8月18日 无风的飘逸 2 条评论

zen cart对产品细节图的识别可谓是非常先进。

它是根据主图,然后只要是图片名字以主图的名字开头的,或者放在以主图文件名(不包含扩展名)为名的文件夹里的图片都可以被识别为产品的细节图。

但是今天我碰到一个问题。

产品主图:   image1.jpg

产品细节图: image1_1.jpg  image1_2.jpg .....

图片目录中还存在其它产品的主图和细节图:

image2.jpg,    image10.jpg   image10_1.jpg   image11.jpg ……

结果程序把image10.jpg   image10_1.jpg   image11.jpg 等以image1开头的图片全部识别为产品图片的细节图。

解决方案:

修改细节图识别的那断代码。

打开includes/modules/ (或者 includes/modules/当前模板文件夹/)additional_images.php

找到 if(preg_match("/" . $products_image_base . "/i", $file) == 1) {

修改为:

if(preg_match("/" . $products_image_base . "_/i", $file) == 1) {

Share
分类: zen-cart 标签:

chrome ie firefox同时崩溃

2011年8月13日 无风的飘逸 没有评论

在打开像www.aol.com   just-ping.com  部分比较大型的网站的时候,chrome crash   firefox重启.

检查后发现问题出现在hosts里,可能是因为我的hosts文件里有关于twitter或者 google.com部分插件服务器的设置,而这些服务器的数据出现错误才导致的。

仔细测试了一下,问题出在以下这一串代码中

#Twitter
199.59.149.243 oauth.twitter.com199.59.149.243 twitter.com199.59.149.243 www.twitter.com199.59.149.243 mobile.twitter.com199.59.148.201 search.twitter.com199.59.148.139 userstream.twitter.com199.59.149.243 ssl.twitter.com199.59.149.243 status.twitter.com199.59.149.243 assets0.twitter.com199.59.149.243 assets1.twitter.com199.59.149.243 assets2.twitter.com199.59.149.243 assets3.twitter.com199.59.149.243 static.twitter.com184.29.36.124 platform.twitter.com219.76.10.138 platform0.twitter.com199.59.148.206 help.twitter.com199.59.148.206 support.twitter.com209.84.4.102 si0.twimg.com209.84.4.102 si1.twimg.com209.84.4.102 si2.twimg.com209.84.4.102 si3.twimg.com209.84.4.102 si4.twimg.com209.84.4.102 si5.twimg.com184.29.20.124 platform.twitter.com 199.59.148.243 scribe.twitter.com 199.59.148.96 mobile.twitter.com 199.59.148.138 betastream.twitter.com 199.59.149.209 api.twitter.com 199.59.149.210 api.twitter.com 199.59.149.209 status.twitter.com 199.59.149.210 upload.twitter.com

哪位高人可以测试出来具体是哪一条吗?

Share