-
还是回点点吧!拜拜...
-
图片gif不能动?
-
为什么日志没有个性化设置啊! 最起码得给个颜色选项!
-
preg_replace()和ereg_replace()函数的使用的比较
解释:字符串比对解析并取代。 语法: mixed preg_replace(mixed pattern, mixed replacement, mixed subject); 返回值: 混合类型资料 函数种类: 资料处理 内容说明: 本函数以 pattern 的规则来解析比对字符串 subject,欲取而代之的字符串为参数 replacement。返回值为混合类型资料,为取代后的字符串结果。 <?php //preg_replace()和ereg_replace()函数的使用的比较 // -------preg_replace()-------------------------- //1.进行字符串的查找的替换 $str = "daoyu shi ge hao hai zi 5555"; $pattern = "/\s/"; //如果将变量定义为$pattern_1会出错 $str = preg_replace($pattern,'-',$str); echo $str." "; /*打印: daoyu-shi-ge-hao-hai-zi-5555 */ //2.对字符串的逆向引用 //方法一 $pat = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i"; $str =preg_replace($pat,"\$1",$str); echo $str." "; /*打印: daoyu */ //注意:如果是下面这种形式你会发现匹配的是:zi- 所以可以这样认为在有次数的{6}的情况下,他($1)匹配的是最后一次 $pat = "/((\w+)-){6}(\d+)/i"; $str =preg_replace($pat,"\$1",$str); echo $str." "; /*打印: zi- */ //方法二 $str = "daoyu-shi-ge-hao-hai-zi-5555"; $pat = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i"; $str =preg_replace($pat,"\\1",$str); echo $str." "; /*打印: daoyu */ //注意:当正则写成$pat= "/((\w+)-){6}(\d+)/i";时和上面的情况一样 //3 当参数是数组的情况(用下手册的例子) $string = "The quick brown fox jumped over the lazy dog."; $patterns[0] = "/quick/"; $patterns[1] = "/brown/"; $patterns[2] = "/fox/"; $replacements[2] = "bear"; $replacements[1] = "black"; $replacements[0] = "slow"; print preg_replace($patterns, $replacements, $string)." "; /*打印 The bear black slow jumped over the lazy dog. */ //或许你已经发现了,他是按“将以其键名在数组中出现的顺序来进行处理。这不一定和索引的数字顺序相同”按我的理解就是在按“写”的顺序而这并不一定是//索引的顺序(书册上还有还有ksort()后的例子,时间关系就不说了,有兴趣的兄弟可以自己找着看下) //好preg_replace()就扯到着,开是扯下一个ereg_replace() //---------------------ereg_replace()------------------ //1.进行字符串的查找的替换 $str = "daoyu shi ge hao hai zi 5555"; $pattern = "[a-zA-Z]+"; //如果写成$pattern= "/[a-zA-Z]+/"; 将不做任何替换也就是说这里不能用正则“/”(可能就是着两个函数的第一个区别 :)) $str = ereg_replace($pattern,'~',$str); echo $str." "; /*打印 ~ ~ ~ ~ ~ ~ 5555 */ //2.对字符串的逆向引用 //在用下书册上的例子 $string = "This is a test"; //echo ereg_replace("( )is", "\\1was", $string); //“\\1”匹配”(空格)is“ 这部分的空格,换句话说就是”替换为数字表示的的第几个括号内//的子串“ echo ereg_replace("(( )is)", "\\2was", $string)." "; /*打印 This was a test */ //对上面的使用还有疑惑的兄弟可参考写这篇文章[link url="http://elma.9iec.com/index.php?job=art&articleid=a_20051104_175700"] $string = "The quick brown fox jumped over the lazy dog."; $patterns[0] = "/quick/"; $patterns[1] = "/brown/"; $patterns[2] = "/fox/"; $replacements[2] = "bear"; $replacements[1] = "black"; $replacements[0] = "slow"; print ereg_replace($patterns, $replacements, $string)." "; //总结 //1 preg_replace()里面的正则可以写成型如:"/..../"而ereg_replace()里面的正则需写成型如"....."; //2 preg_replace()能操作数组,而ereg_replace()不可以 //3在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个 //在使用过程中感觉两者的区别不是很大,在功能上也比较相似.. ?> -
PHP查询MySQL大量数据的内存占用分析
先了解缓存信息的作用: 有些信息比方经常不变的,但是还是能变的信息放在缓存中以加快显示速度,这是很有价值的,所谓的缓存,通俗的理解就是一些保存在服务器端的共用信息. mysql_unbuffered_query()执行了一条返回大量结果集的SQL语句, 在遍历结果之前, PHP的内存是没有被结果集占用的. 而用mysql_query()来执行同样的语句的话, 函数返回时, PHP的内存占用便会急剧增加, 立即耗光内存. 回到PHP, 使用mysql_unbuffered_query(), 可以避免内存的立即占用. 如果在遍历的过程不对结果进行”PHP缓存”(如放到某数组中), 则整个执行过程虽然操作了十万条或者百万条或者更多的数据, 但PHP占用的内存始终是非常小的. -
php---走向高手
1.通用数据库处理函数 在网上,许多程序员都通过封装类解决了这个问题。他们编写了统一的函数用来处理任何流行的数据库——不管是在Linux世界深受欢迎的Mysql还是在Windows平台上广泛流行的SqlServer。 就笔者个人来说,非常喜欢使用这些函数,因为可以直接使用一些简单的诸如”query”、”next_record”之类的函数,而不需要考虑数据库的连接、数据库句柄这些复杂的东西,更不需要考虑使用的是何种数据库。如果你需要这些函数,你可以通过访问以下的几个网址而得到: ◆[link url="http://phplib.netuse.de/"] ◆[link url="http://phpclasses.UpperDesign.com/browse.html/package/20"] ◆[link url="http://phpdb.linuxbox.com/"] 2.变量调试函数 需要的时候,在程序中简单地加入下面的一条代码即可查看程序中的所使用的变量(包括数组和对象)的类型和值: echo ss_as_string($my_variable); 使用下面的语句,我们可以直接查看程序中所有的变量的值: echo ss_as_string($GLOBALS); 3. 控制Log信息的函数 调试PHP程序的另外一种重要的方法就是查看Log信息。如果能够方便地控制Log信息的级别以及Log信息的显示内容,将会给程序调试带来更多的便利。下面的几个函数可以方便地实现这个功能。 $ss_log_level = 0; $ss_log_filename = /tmp/ss-log; $ss_log_levels = array( NONE => 0, ERROR => 1, INFO => 2, DEBUG => 3); function ss_log_set_level ($level = ERROR) { global $ss_log_level; $ss_log_level = $level; } function ss_log ($level, $message) { global $ss_log_level, $ss-log-filename; if ($ss_log_levels[$ss_log_level] < $ss_log_levels[$level]) { // 不显示Log信息 return false; } $fd = fopen($ss_log_filename, "a+"); fputs($fd, $level. - [.ss_timestamp_pretty().] - .$message."n"); fclose($fd); return true; } function ss_log_reset () { global $ss_log_filename; @unlink($ss_log_filename); } 在上面的函数中,有四个Log级别变量。运行PHP程序时,只有当Log的级别低于预设的级别值时,Log信息才可以被记录和显示出来。例如,在程序中加入如下的一条语句: ss_log_set_level(INFO); 那么,运行PHP程序时,只有ERROR和INFO级别的LOG信息才能被记录和显示出来,DEBUG级的信息则被忽略了。除此之外,我们还可以设定显示的信息内容,其语句如下: ss_log(ERROR, "testing level ERROR"); ss_log(INFO, "testing level INFO"); ss_log(DEBUG, "testing level DEBUG"); 4.调试和优化数据库的操作 对于数据库来说,运行速度是至关重要的。尽管很多书籍和文章都讲授了一些快速运行数据库的方法,但是所有的方法都必须经过实践的检验。下面我们将把PHPLib函数库中的query()函数和上面介绍的几个函数综合起来编写成新的query()函数,和原先的函数相比,这个函数增加了运行时间的监测功能。 function query($Query_String, $halt_on_error = 1) { $this->connect(); ss_timing_start(); $this->Query_ID = @mysql_query($Query_String,$this->Link_ID); ss_timing_stop(); ss_log(INFO, ss_timing_current(). Secs - .$Query_String); $this->Row = 0; $this->Errno = mysql_errno(); $this->Error = mysql_error(); if ($halt_on_error && !$this->Query_ID) { $this->halt("Invalid SQL: ".$Query_String); } return $this->Query_ID; } 5.追求程序速度,而不是编程的速度 1.使用内嵌的HTML代码,而不是PHP的echo语句。 因为PHP是一门嵌入式Web编程语言,可以将HTML代码和PHP代码相互嵌入。但是很多程序员担心在HTML代码中过多的使用""嵌入PHP代码会多次调用PHP解释器,从而降低了PHP代码的运行速度,所以宁愿使用PHP的echo语句来输出HTML代码,而不直接使用HTML代码。 但事实却恰恰相反。每一个PHP页面只调用一次PHP解释器来解释所有的PHP代码,所以,只在需要时才嵌入PHP代码,而大多数的时候直接使用HTML代码输入结果,不但不会降低程序的运行速度,而且因为减少了对echo语句的解析,往往可以提高代码的运行速度。下面的一段代码证明了我们的结论。在这段代码中,我们使用了前面介绍的时间测试函数。 2.使用str-replace:字符串替换 3.注意字符串的引用 PHP和其它很多编程语言一样,可以使用双引号(" ")来引用字符串,也可以使用单引号(' ')。但是在PHP中,如果使用双引号来引用字符串,那么PHP解析器将首先分析字符串中有没有对变量的引用,有变量的话,将对变量进行替换。如果是单引号,则没有如此复杂——直接将单引号包含起来的所有字符串直接显示出来。显然,在PHP编程中,如果使用单引号引用字符串变量要比使用双引号快速一些。 4.注意include与require的区别 在PHP变成中,include()与require()的功能相同,但在用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如在下面的一个例子中,如果变量$somgthing为真,则将包含文件somefile: if($something){ include(\"somefile\"); } 但不管$something取何值,下面的代码将把文件somefile包含进文件里: if($something){ require(\"somefile\"); } 下面的这个有趣的例子充分说明了这两个函数之间的不同。 $i = 1; while ($i < 3) { require(\"somefile.$i\"); $i++; } 在这段代码中,每一次循环的时候,程序都将把同一个文件包含进去。很显然这不是程序员的初衷,从代码中我们可以看出这段代码希望在每次循环时,将不同的文件包含进来。如果要完成这个功能,必须求助函数include(); $i = 1; while ($i < 3) { include(\"somefile.$i\"); $i++; } 5.注意echo和print的区别 PHP中echo和print的功能也基本相同,但是两者之间也有细微差别。在PHP代码中可以把print作为一个普通函数来使用,例如执行下面的代码后变量$res的值将为1。 $ret = print \"Hello World\"; 这意味着print可用在一些复杂的表达式中,而echo则不行。同样,在代码中echo语句的运行速度要略微快于print语句,因为echo语句不要求返回任何数值。 -
PHP很有用的功能
1.序列化 JSON越来越流行,所以在PHP5.2以后,PHP开始支持JSON,你可以使用 json_encode() 和 json_decode() 函数. json_encode() :把一数组序列化,变成一字符串. json_decode() :字符串又换回成数组. 2.字符串压缩 当我们说到压缩,我们可能会想到文件压缩,其实,字符串也是可以压缩的。PHP提供了gzcompress() 和 gzuncompress() 函数. eg. $string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut elit id mi ultricies adipiscing. Nulla facilisi. Praesent pulvinar, sapien vel feugiat vestibulum, nulla dui pretium orci, non ultricies elit lacus quis ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pretium ullamcorper urna quis iaculis. Etiam ac massa sed turpis tempor luctus. Curabitur sed nibh eu elit mollis congue. Praesent ipsum diam, consectetur vitae ornare a, aliquam a nunc. In id magna pellentesque tellus posuere adipiscing. Sed non mi metus, at lacinia augue. Sed magna nisi, ornare in mollis in, mollis sed nunc. Etiam at justo in leo congue mollis. Nullam in neque eget metus hendrerit scelerisque eu non enim. Ut malesuada lacus eu nulla bibendum id euismod urna sodales. "; $compressed = gzcompress($string); echo "Original size: ". strlen($string)."\n"; /* 输出原始大小 Original size: 800 */ echo "Compressed size: ". strlen($compressed)."\n"; /* 输出压缩后的大小 Compressed size: 418 */ // 解压缩 $original = gzuncompress($compressed); 3.系统常量 得到当前的行号 (__LINE__),文件 (__FILE__),目录 (__DIR__),函数名 (__FUNCTION__),类名(__CLASS__),方法名(__METHOD__) 和名字空间 (__NAMESPACE__) require_once(dirname(__FILE__) . '/config/database.php'); 4.生成唯一ID md5() 来生成一个唯一的ID: md5(time() . mt_rand(1,1000000)); 其实,PHP中有一个叫?uniqid() 的函数是专门用来干这个的: uniqid();可能你会注意到生成出来的ID前几位是一样的,这是因为生成器依赖于系统的时间,这其实是一个非常不错的功能,因为你是很容易为你的这些ID排序的。这点MD5是做不到的。 -
收发电子邮件的协议
POP3协议: POP3(Post Office Protocol 3)即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。 SMTP协议: SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,我们就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转你发出的电子邮件 TCP/IP: [img src="http://catf.me/photos/bdfed2c52a2694b2c7a6246939181816.jpg" width="640" height="906"] -
定制性强,不知道公司还要人不!
-
这个真的不错!
-
初出茅庐,从事IT,广交朋友!
-
这个比点点好用!哈哈...过来先留个名!确实不错!
More