获取当前php运行脚本所在目录

php技巧 1 Comment

怎么样知道,当前运行脚本所在目录呢,逛了一圈,找到个比较有用的函数,呵呵

1
2
 $patharray = pathinfo($_SERVER['PHP_SELF']);
 echo $patharray['dirname'];

pathinfo返回的是一个数组

大概返回是这个样子:

[dirname] => /abc/123

 [basename] => xxx.php

[extension] => php

结果很爽

实际上有些cms对url的处理的就是运用了pathinfo,回头我得好好研究

 

 

php 截取字符串(php 截取中文字符串也适用)函数

php技巧 1 Comment

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;
}

php字符串替换函数strtr str_replace preg_replace效率对比

php技巧 No Comments

前面一篇具体说了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浅谈

php技巧 No Comments

先来看看这个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等文件数量限制想到的file_exits使用

php技巧 1 Comment

一开始不知道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是哪天加入的。

俺的数字分割还是挺方便的。

有什么好的处理方式,给我留言。

Icons by N.Design Studio. Designed By Ben Swift. Powered by WordPress and Free WordPress Themes
Entries RSS Comments RSS Log in