怎么样知道,当前运行脚本所在目录呢,逛了一圈,找到个比较有用的函数,呵呵
1 2 | $patharray = pathinfo($_SERVER['PHP_SELF']); echo $patharray['dirname']; |
pathinfo返回的是一个数组
大概返回是这个样子:
[dirname] => /abc/123
[basename] => xxx.php
[extension] => php
结果很爽
实际上有些cms对url的处理的就是运用了pathinfo,回头我得好好研究
a php new student
怎么样知道,当前运行脚本所在目录呢,逛了一圈,找到个比较有用的函数,呵呵
1 2 | $patharray = pathinfo($_SERVER['PHP_SELF']); echo $patharray['dirname']; |
pathinfo返回的是一个数组
大概返回是这个样子:
[dirname] => /abc/123
[basename] => xxx.php
[extension] => php
结果很爽
实际上有些cms对url的处理的就是运用了pathinfo,回头我得好好研究
php 截取字符串常规的截取函数是:substr(string, start int, end int);
这个substr()函数有两点说明
1.没法截取中文。
2.substr()字符串截取函数 end int参数可以超出string的实际范围,它会返回字符串最长部分,而不会有多余字符。
麻烦的中文又有gb2312,gbk,utf-8的编码分别,这样php 截取中文字符串要自己写函数
我搜索到了下面的php函数,用来截取中文字符串还是挺满意的,感谢作者,就是日子太久实在不知道谁写的了。
1 2 3 4 5 6 7 8 9 10 11 12 13 | function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) //各种编码的切割函数 { if(function_exists("mb_substr")) return mb_substr($str, $start, $length, $charset); $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; preg_match_all($re[$charset], $str, $match); $slice = join("",array_slice($match[0], $start, $length)); if($suffix) return "...".$slice."…"; return $slice; } |
前面一篇具体说了strtr这个函数的使用注意点,同时我知道有人说strtr比str_replace快4倍
然而我测试得到结果却是让人失望
strtr在strtr(string,array)用法的时候,它比str_replace更慢些。
10w次的两个词替换结果表明
str_replacece 耗时0.38 sec.
strtr 耗时0.52sec.
preg_replace 耗时0.97sec.
不需要测试都应该知道preg_replace肯定最慢
只是两个语句的执行
1 2 | $str_replace_str = str_replace('喜欢','非常喜欢',$str); $str_replace_str = str_replace('奥运','北京',$str_replace_str); |
却要比一句的
1 | $strtr_str = strtr($str,array('喜欢'=>'非常喜欢','奥运'=>'北京')); |
的速度还快
ps:被替换的句子
1 | $str = '我喜欢运动,我喜欢奥运,我更喜欢参加奥运,欢迎喜欢奥运的人齐聚北京!'; |
但是,strtr在strtr(string,from,to)这样的用法下仍然是最快的,只不过,没法常用罢了。
先来看看这个php字符串替换函数 strtr()的两种状态
strtr(string,from,to)
或者strtr(string,array)
首先针对strtr函数第一种方式
我们看看下面的举例:
1 2 3 | <?php echo strtr("I Love you","Lo","lO"); ?> |
得到的结果是
1 | I lOve yOu |
这个结果提醒我们
1.strtr它是区分大小写的
2.strtr的替换是很特殊的,你注意看后面那个yOu,中间的O被替换的,这显然不是我们的本意
再举一个特殊例子,说明这个php sttr函数的怪异
1 2 3 | <?php echo strtr("I Love you","Love",""); ?> |
结果是
1 | I Love you |
什么也不会改变,所以strtr需要注意的是:
3.不能被替换为空,也就是末位那个参数不能是空字符串,当然空格是可以的。
再次举例strtr函数的另一种情况
1 2 3 | <?php echo strtr("I Loves you","Love","lOvEA"); ?> |
结果是
1 | I lOvEs yOu |
注意看第三个参数的A,在结果中并没有出现
4.我不建议用strtr以少换多
ok,既然这个strtr函数挺麻烦为什么还要用呢?
原因是,它的速度很快
据说,strtr 比 str_replace 快四倍
所以
5.能用strtr函数的时候一定要用
那怎么用才舒服?
这就是它的第二种情况
strtr(string,array)
6.strtr符合意愿的使用方法
1 2 3 4 | <?php $table_change = array('you'=>'her sister'); echo strtr("I Love you",$table_change); ?> |
结果为
I Love her sister
7.小技巧:你想到替换什么你就往数组加什么
比如
1 2 3 4 5 | <?php $table_change = array('you'=>'her sister'); $table_change += array('Love' => 'hate'); echo strtr("I Love you",$table_change); ?> |
结果是
I hate her sister
再次提醒那个Love 写成love 是行不通的哦。
ok,乱七八糟说了一通,其实关于strtr最想说的就是这个后面的用法了
简单方便。
貌似后面的用法也忽略掉了前后字符长度不同的问题
以上php strtr函数实验,PHP5.2 测试通过。
一开始不知道godaddy一个文件夹有文件数量的限制,买了才发现
后来逐步了解,貌似monster也有类似规定只是没有那么严格
以前习惯了,一堆文件放在一个目录里,比如喜欢html文件放在html文件夹中,从1个文件到10w个文件都放一起
缺点是不言而喻的,在后台用ftp登陆打开这个html文件你会发现奇慢无比,那是因为它在列文件。
由此我想到,如果我手里有10w个用数字编码的文件名,该怎么放呢?(非顺序)。
比如每个文件都是不规则的 id_332137.html id_38786231299.html 都放在一个文件夹html中
假如我们要修改id_332137.html,一般之前都会判断文件是否存在file_exits(”id_332137.html”)
这样在10w份毫无规律的文件名执行这条该是什么速度,虽然我不了解这个函数file_exits的执行方式。
无意中,我发现前人的一个解决办法
我在使用主机的时候发现的一个有趣现象
假设你的用户名是jasonlee,那么主机给你的目录也许是 j/as/son/jasonlee
毫无疑问的,只要知道你的username,一下子就能找你所在的目录位置。
我说得挺乱的,,,,哈哈
简单说来就是,如果系统规定每个文件夹不能超过1000个文件(包括1000)
假若我有一个文件名为 1293823.html
学习上面的命名方式的话,它位置应该在 1/293/1293823.html
其他人还有用时间来分隔的,但是比如 /20080503/2389734.html 你还是要先知道2389734.html是哪天加入的。
俺的数字分割还是挺方便的。
有什么好的处理方式,给我留言。
Recent Comments