php 归档

  • 在采集程序或者蜘蛛程序中经常会遇到一类问题,就是将网页中相对路径形式的URL转换为绝对路径形式的URL。例如在http://www.msphome.cn/blog/1/这个页面中,有一个URL链接为../index.php,那么我们要将它转换为http://www.msphome.cn/blog/index.php。下面给出了解决这类问题的代码。该程序能够成功处理各种URL,将其变成绝对形式。 <?php $a = 'http://www.abc.com/a/index.html'; $b = '../abc/a.js'; echo format_url($b, $a); function format_url($srcurl, $baseurl) {   $srcinfo = parse_url($srcurl);   if(isset($srcinfo['scheme'])) {     return $srcurl;   }   $baseinfo =...

    PHP将相对路径URL转换为绝对路径URL (转)

    在采集程序或者蜘蛛程序中经常会遇到一类问题,就是将网页中相对路径形式的URL转换为绝对路径形式的URL。例如在http://www.msphome.cn/blog/1/这个页面中,有一个URL链接为../index.php,那么我们要将它转换为http://www.msphome.cn/blog/index.php。下面给出了解决这类问题的代码。该程序能够成功处理各种URL,将其变成绝对形式。 <?php $a = 'http://www.abc.com/a/index.html'; $b = '../abc/a.js'; echo format_url($b, $a); function format_url($srcurl, $baseurl) {   $srcinfo = parse_url($srcurl);   if(isset($srcinfo['scheme'])) {     return $srcurl;   }   $baseinfo =...

    继续阅读...

  • <?php $string ="帅朱好cc变c态啊,2!"; $arr1 = str_split_utf8($string,'gbk'); var_dump($arr1); /**  * 将汉字字符串分割为数组  *  * @param string $str  * @param string $charset 字符编码 默认gbk  * @return Array  */ function str_split_utf8($str,$charset='gbk') {     $str...

    PHP分割汉字为数组

    <?php $string ="帅朱好cc变c态啊,2!"; $arr1 = str_split_utf8($string,'gbk'); var_dump($arr1); /**  * 将汉字字符串分割为数组  *  * @param string $str  * @param string $charset 字符编码 默认gbk  * @return Array  */ function str_split_utf8($str,$charset='gbk') {     $str...

    继续阅读...

  • 服务器上一直用着mysql_pconnect,之前听说它会出现各种各样的问题,但服务器一直没事,也就没去管。今天看这篇文章,才知道原来mysql_pconnect有这么多的道道。 原文地址:http://www.cnblogs.com/funlake/archive/2011/09/08/2171822.html   php的mysql持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之。这到底是为啥么。近距离观察后发现,这家伙也不容易啊,要看apache的脸色,还得听mysql指挥。   对于做为apache模块运行的php来说,要实现mysql持久化连接,首先得取决于apache这个web服务器是否支持Keep-Alive。   Keep-Alive   Keep-Alive是什么东西?它是http协议的一部分,让我们复习一下没有Keep-Alive的http请求,从客户在浏览器输入一个有效url地址开始,浏览器就会利用socket向url对应的web服务器发送一条tcp请求,这个请求成功一次就得需要来回握三次手才能确定,成功以后,浏览器利用socket tcp连接资源向web服务器请求http协议,发送以后就等着web服务器把http返回头和body发送回来,发回来后浏览器关闭socket连接,然后做http返回头和body的解析工作,最后呈现在浏览器上的就是漂亮的页面了。这里面有什么问题呢?tcp连接需要三次握手,也就是来回请求三次方能确定一个tcp请求是否成功,然后tcp关闭呢?来回需要4次请求才能完成!每次http请求就3次握手,4次拜拜,这来来回回的不嫌累啊,多少时间和资源都被浪费在socket连接关闭上了,能不能一次socket tcp连接发送多次http请求呢?于是Keep-Alive就应运而生,http/1.0里需要客户端自己在请求头加入Connection:Keep-alive方能实现,在这里我们只考虑http1.1了,只需要设置一下apache,让它默认就是Keep-Alive持久连接模式(apache必须1.2+才能支持Keep-Alive).在httpd.conf里找到KeepAive配置项,果断设置为On,MaxKeepAliveRequests果断为0(一个持久tcp最多允许的请求数,如果过小,很容易在tcp未过期的情况下,达到最大连接,那下次连接就又是新的tcp连接了,这里设置0表示不限制),然后对于mysql_pconnect最重要的选项KeepAliveTimeout设置为15(表示15秒).   好了,重启apache,测试一下,赶紧写行东西 <?php echo

    [转]mysql_pconnect的水挺深,apache下的数据库长连接

    服务器上一直用着mysql_pconnect,之前听说它会出现各种各样的问题,但服务器一直没事,也就没去管。今天看这篇文章,才知道原来mysql_pconnect有这么多的道道。 原文地址:http://www.cnblogs.com/funlake/archive/2011/09/08/2171822.html   php的mysql持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之。这到底是为啥么。近距离观察后发现,这家伙也不容易啊,要看apache的脸色,还得听mysql指挥。   对于做为apache模块运行的php来说,要实现mysql持久化连接,首先得取决于apache这个web服务器是否支持Keep-Alive。   Keep-Alive   Keep-Alive是什么东西?它是http协议的一部分,让我们复习一下没有Keep-Alive的http请求,从客户在浏览器输入一个有效url地址开始,浏览器就会利用socket向url对应的web服务器发送一条tcp请求,这个请求成功一次就得需要来回握三次手才能确定,成功以后,浏览器利用socket tcp连接资源向web服务器请求http协议,发送以后就等着web服务器把http返回头和body发送回来,发回来后浏览器关闭socket连接,然后做http返回头和body的解析工作,最后呈现在浏览器上的就是漂亮的页面了。这里面有什么问题呢?tcp连接需要三次握手,也就是来回请求三次方能确定一个tcp请求是否成功,然后tcp关闭呢?来回需要4次请求才能完成!每次http请求就3次握手,4次拜拜,这来来回回的不嫌累啊,多少时间和资源都被浪费在socket连接关闭上了,能不能一次socket tcp连接发送多次http请求呢?于是Keep-Alive就应运而生,http/1.0里需要客户端自己在请求头加入Connection:Keep-alive方能实现,在这里我们只考虑http1.1了,只需要设置一下apache,让它默认就是Keep-Alive持久连接模式(apache必须1.2+才能支持Keep-Alive).在httpd.conf里找到KeepAive配置项,果断设置为On,MaxKeepAliveRequests果断为0(一个持久tcp最多允许的请求数,如果过小,很容易在tcp未过期的情况下,达到最大连接,那下次连接就又是新的tcp连接了,这里设置0表示不限制),然后对于mysql_pconnect最重要的选项KeepAliveTimeout设置为15(表示15秒).   好了,重启apache,测试一下,赶紧写行东西 <?php echo "Apache进程号:".getmypid(); ?> 很简单,获取当前php执行者(apache)的进程号,用浏览器浏览这个页面,看到什么?对,有看到一串进程号数字,15秒内,连续刷新页面,看看进程号有无变化?木有吧?现在把手拿开,交叉在胸前,度好时间,1秒,2秒,3,…15,16。好,过了15秒了,再去刷新页面,进程号有没有变化?变了!又是一个新的apache进程了,为什么15秒后就变成新的进程了?记得我们在apache里设置的KeepAliveTimeout吗?它的值就是15秒.现在我们应该大致清楚了,在web服务器默认打开KeepAlive的情况下,客户端第一次http成功请求后,apache不会立刻断开socket,而是一直监听来自这一客户端的请求,监听多久?根据KeepAliveTimeout选项配置的时间决定,一旦超过这一时间,apache就会断开socket了,那么下次同一客户端再次请求,apache就会新开一个进程来相应。所以我们之前15内不停的刷新页面,看到的进程号都是一致的,表明是浏览器请求给了同一个apache进程。   浏览器是怎么知道不需要重新进行tcp连接就可以直接发送http请求呢?因为http返回头里就会带上Connection:keep-alive,Keep-alive:15两行,意思就是让客户端浏览器明白,这次socket连接我这边还没关闭呢,你可以在15内继续使用这个连接,并发送http请求,于是乎浏览器就知道应该怎么做了.   php怎么做   那么,php的mysql连接资源是怎么被hold住的呢,这需要查看php的mysql_pconnect的函数代码,我看了下,大概的做法就是根据当前apache进程号,生成hash key,找hash表内有无对应的连接资源,没有则推入hash表,有则直接使用。有些代码片段可以说明(具体可查看php5.3.8源码ext/mysql/php_mysql.c文件690行php_mysql_do_connect函数) #1.生成hash key user=php_get_current_user();//获取当前php执行者(apache)的进程唯一标识号 hashed_details_length = spprintf(&hashed_details, 0, "mysql__%s_", user);//hashed_details就是hash key #2.如果未找到已有资源,就推入hash表,名字叫persistent_list,如果找到就直接使用 /*...

    继续阅读...

  • 在搜索结果的显示中,我们通常要把关键字高亮,对于中文,直接用strtr把关键字替换成加<font color=red><b>关键字</b></font>就可以了。 但对于英文,存在大小写的问题,比如用户搜iphone,我们需要把结果中的iPhone/IPHONE之类的单词都要高亮;简单的用strtr直接替换就不行了。 下面是自己写的一个函数: <?php //搜索结果,要高亮替换的文字,如文章标题等(为演示效果,选的字符串比较乱) $str = "sdfdiphoneabIPHoNEipHONE"; //搜索关键字 $key_arr = array("fd","iphone"); //返回高亮结果 echo highlight($str,$key_arr); function highlight($str,$key_arr) { $param_temp = array(); preg_match_all('/'.join('|',$key_arr).'/i',$str,$matches); foreach($matches[0] as $value) { $param_temp[$value] = "<font...

    用于搜索结果的关键字高亮显示(不区分大小写)

    在搜索结果的显示中,我们通常要把关键字高亮,对于中文,直接用strtr把关键字替换成加<font color=red><b>关键字</b></font>就可以了。 但对于英文,存在大小写的问题,比如用户搜iphone,我们需要把结果中的iPhone/IPHONE之类的单词都要高亮;简单的用strtr直接替换就不行了。 下面是自己写的一个函数: <?php //搜索结果,要高亮替换的文字,如文章标题等(为演示效果,选的字符串比较乱) $str = "sdfdiphoneabIPHoNEipHONE"; //搜索关键字 $key_arr = array("fd","iphone"); //返回高亮结果 echo highlight($str,$key_arr); function highlight($str,$key_arr) { $param_temp = array(); preg_match_all('/'.join('|',$key_arr).'/i',$str,$matches); foreach($matches[0] as $value) { $param_temp[$value] = "<font...

    继续阅读...

  • 转发一篇文章,来源:http://coolshell.cn/articles/5132.html 实在太丰富了,忍不住要转发一下 下面是一个Web应用的开源列表。没什么可说的,太疯狂了。尤其是Web 2.0那一堆。我不知道你怎么想,有些开源项目的源码写得挺不好的,尤其是性能方面。或许你会以为改一改他们就可以成为为自己所用,不过,改这些开源的项目还真不容易。玩玩还可以。 数字媒体 相册(Flickr, Picasa) Gallery,基于PHP + MySQL的Web相册。非常易于使用,包括一个配置向导,对于相片的操作包括自动生成缩略图、相片的大小改变、选择、排序等。 Piwigo,基于PHP + MySQL。配备了强大的功能,发布和管理您的照片,可扩展性和智能浏览功能,如类别,标签,或年表。这是网络和照片的标准要求。扩展使Piwigo更可扩展性和可定制的。 UberGallery,一个简单易用的相册。PHP。不需要数据库。 Zenphoto,一个简单的web相册程序,它能够简单的展示你的图片,并含有你所需要的所有功能和特点。可以和Wordpress集成。 视频(YouTube) Flowplayer,一个用Flash开发的在Web上的视频播放器,可以很容易将它集成在任何的网页上。支持HTTP以及流媒体传输。 Plumi,一个建立在Plone 内容管理系统上的视频分享系统,可帮助你轻松建立视频分享网站。 音乐电台社区(last.fm, ulike) Libre.fm,对Last.fm 的克隆。 视频电影社区(netflix, criticker) Filmaster,fileaster.com的源码。 书(LibraryThing, Shelfari, Goodreads) O’Reilly...

    疯狂的 Web 应用开源项目

    转发一篇文章,来源:http://coolshell.cn/articles/5132.html 实在太丰富了,忍不住要转发一下 下面是一个Web应用的开源列表。没什么可说的,太疯狂了。尤其是Web 2.0那一堆。我不知道你怎么想,有些开源项目的源码写得挺不好的,尤其是性能方面。或许你会以为改一改他们就可以成为为自己所用,不过,改这些开源的项目还真不容易。玩玩还可以。 数字媒体 相册(Flickr, Picasa) Gallery,基于PHP + MySQL的Web相册。非常易于使用,包括一个配置向导,对于相片的操作包括自动生成缩略图、相片的大小改变、选择、排序等。 Piwigo,基于PHP + MySQL。配备了强大的功能,发布和管理您的照片,可扩展性和智能浏览功能,如类别,标签,或年表。这是网络和照片的标准要求。扩展使Piwigo更可扩展性和可定制的。 UberGallery,一个简单易用的相册。PHP。不需要数据库。 Zenphoto,一个简单的web相册程序,它能够简单的展示你的图片,并含有你所需要的所有功能和特点。可以和Wordpress集成。 视频(YouTube) Flowplayer,一个用Flash开发的在Web上的视频播放器,可以很容易将它集成在任何的网页上。支持HTTP以及流媒体传输。 Plumi,一个建立在Plone 内容管理系统上的视频分享系统,可帮助你轻松建立视频分享网站。 音乐电台社区(last.fm, ulike) Libre.fm,对Last.fm 的克隆。 视频电影社区(netflix, criticker) Filmaster,fileaster.com的源码。 书(LibraryThing, Shelfari, Goodreads) O’Reilly...

    继续阅读...

Page 1 of 121234510...Last »