存档: 标签: ‘PHP’

[原创]PHP实现类似ASP里的Application对象

15 条评论 2010年1月21日

以前搞过一段时间的asp,觉得application这个对象很爽。。可以很容易的写一个聊天室。。。后来逐渐转到php,就一直为这事郁闷。。因为php里面没有对应的东西。数据只能往数据库或者文件里面写才能实现共享。 今天在公司做聊天室的时候,灵机一动,居然让我发现了一神奇的方法~~哈哈:

PHP里面的$_SESSION变量可以实现类似Application的功能,但重点在它不能跨浏览器进程,或者说是跨用户。。只能是单个用户操作不同页面时候的变量传递,是一种cookie的替代方案。

众所周知,php里,调用session_start()之后,客户浏览器会收到一个大概名叫PHPSESSID的cookie,这个叫session_id。不同页面的参数共享就是靠这个变量实现的。

有时,由于客户端浏览器或者其他什么神奇的原因,导致无法正常发送 PHPSESSID的时候,我们可以手动发送,然后在php里面的session_start();之前,调用session_id(”sessionid在这里”);手工指定session_id ,这样,就可以让session工作正常。(比如浏览器不支持cookie,或用flash上传文件的时候)

好了,关键的东西来了。 继续阅读…

做了一个山寨的Omegle。。chendian.net

20 条评论 2009年9月30日

由于最近omegle很火。于是就想copy一个到国内。 正好我以前做过聊天室~哈哈。2天就搞定了。 先是在学校内部测试,修正了一些bug 。然后就放到外网。 因为聊天过程中会建立很多长连接。所以把服务器上的apache换成了nginx。希望能扛得住那么多的并发。

域名: http://chendian.net 沉淀时光。

网站的功能是跟一个陌生人聊天,随机配对。而且是只能2个人聊。不是传统的聊天室。

Chendian.net

Chendian.net

关于PHP输出文件给浏览器下载时的编码问题

4 条评论 2009年8月1日

    做文件管理器的时候会遇到让PHP输出一个文件给浏览器下载。我们都知道要发一下一些header:


$filename = "下载文件名";
$filesize = filesize('文件地址'); //获得文件大小
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: pre-check=0, post-check=0, max-age=0');
header('Content-Transfer-Encoding: binary');
header('Content-Encoding: none');
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-length: '.$filesize);

然后再用readfile把文件内容输出给浏览器。但是会遇到一个很烦的问题:弹出文件下载框时,显示的文件名在不同的浏览器下面是不一样的。有的是乱码,有的是空白。 为了解决这个问题,我找了查了很多资料。最终找到一个好的解决办法:

文件名统一使用utf-8编码,然后针对ie浏览器进行一次rawurlencode编码。
比如:
if (preg_match(’/MSIE/’,$_SERVER['HTTP_USER_AGENT'])) $filename = rawurlencode($filename);
这样在不同操作系统,不同浏览器里面,下载文件的时候,中文文件名都能正确显示了。
测试通过:Safari4(MAC) ,Firefox3.5(MAC), Firefox3(Win), IE7/8(Win), Chrome(Win)

加入CMSTOP开发团队。

38 条评论 2009年7月19日

  跟淡淡风很早就认识。这次他开始弄cmstop,正好我是暑假,他就叫我过来了。现在在北京,刚搬进新写字楼,环境不错。这边也有很多高手,要多多向他们学习。
  印象最深的是比我小的陶秋丰(EndTo)。做站高手,SEO高手。还出了本书的:《年入10万–17岁草根少年的网赚实战》~~以后要多像他学习SEO才是。。
  每周有一天休息。正好我可以逛逛北京~。北京给我的第一印象就是很大。成都才只有4环,我都觉得太大了,北京都6环了。。。。还好有地铁,挺快的。

有邮箱了:liuchunlong@cmstop.com

MySQL中文全文搜索:PHP简单中文分词函数

10 条评论 2008年10月19日

前段时间研究中文全文搜索,结果发现mysql不支持中文的全文搜索。但是有一些解决办法,就是手动把中文单词用空格分开,然后搜索的时候加上 in boolean mode。 但是这就带来一个问题,就是中文分词。这个是个很大的难题,貌似中科院有个小组就是专门做中文分词技术的。我们用php来分词的话,要实现真正语义上的分词是非常困难的,就算实现了效率也不高。一般情况下,我们采用的是如下方法分词:

比如我们有一句话:你好我是刘春龙

那么我们可以这样来分词: 你好 好我 我是 是刘 刘春 春龙

这样虽然看起来有点傻,但是实际应用起来确实可行,因为我们搜索时候输入的关键词也是按照这个方法分词。

下面有个我自己写的函数,可以实现这种分词。传入三个参数,分别是:

1.需要分词的字符串,必须,英文,标点,数字,汉字,日语等都可以。编码为UTF-8

2.是否返回字符串,可选,默认是。如果传入false,那么将返回一个数组。

3.是否base64_encode中文,可选,默认是。Mysql的全文搜索有个配置是 ft_min_word_len 这个值一般是4,而我们分成的中文词语是两个字,就不会被mysql认为是一个词。而base64_encode过后,词语的长度为8,就不存在最小长度问题了。 base64_encode过后数据量会增大 50%。

注意,这里输入和输出的字符串编码都是UTF-8


function string2words($s,$return_string = true,$encode64 = true)
{
        $re = '';
        //匹配汉字
        if (preg_match_all("/([x{4e00}-x{9fff}]{2,})/u",$s,$ms))
        {
                foreach($ms[0] as $w)
                {
                        //关键部分:分词
                        $l = strlen($w)/3;
                        for($i=0;$i<$l;$i++)
                        {
                                $wi = substr($w,$i*3,6);
                                if (strlen($wi) > 3)
                                {
                                        $re .= ($encode64)?' '.str_replace(',','@',base64_encode($wi)):' '.$wi;
                                }
                        }
                }
        }
        //匹配数字
        if (preg_match_all("/(d+[.]?d+)/",$s,$ms))
        {
                foreach($ms[0] as $wi)
                {
                        if(strlen($wi) >= 2)
                        {
                                $re .= ($encode64)?' '.str_replace(',','@',base64_encode($wi)):' '.$wi;
                        }
                }
                $s = preg_replace("/(d+[.]?d+)/",' ',$s);
        }
        //去掉所有双字节字符
        $s = preg_replace("/([^x{00}-x{ff}]+)/u",' ',$s);
        $re = $s.' '.$re;
        if (!$return_string)
        {
                $re = preg_replace("/([^d])([,.-?n])([^d])/",'$1 $3',$re);
                $re = trim(preg_replace("/[s]{2,}/",' ',$re));
                $arr = explode(' ',$re);
                $re = array();
                foreach($arr as $a)
                {
                        if (strlen($a) >= 2) $re[] = $a;
                }
                return $re;
        }
        else
        {
                $re = trim(preg_replace("/[s,.]{2,}/",' ',$re));
                return $re;
        }
}

用PHP获取photoshop写入图片的文字信息

1条评论 2008年10月14日

有些摄影师喜欢把图片的标题,内容,关键词等用photoshop直接写入图片文件里面。

用以下代码可以读取。


$image_info = array();
$size = getimagesize('图片文件.jpg', $info);
if(isset($info['APP13']))
{
    $iptc = iptcparse($info['APP13']);
    foreach (array_keys($iptc) as $s)
    {
        $c = count ($iptc[$s]);
        for ($i=0; $i <$c; $i++)
        {
            @$image_info[$s] .= $iptc[$s][$i];
        }
    }
}
print_r($image_info);

发布MiniAJAX聊天室程序 1.2 beta

143 条评论 2008年3月25日

Mini AJAX Chatroom By Longbill 1.02 beta

作者: Longbill  http://www.longbill.cn

longbill.cn@gmail.com

Longbill all rights reserved

2008-03-26

协议

—————————–

创作共用(Creative Commons)

你可以免费:

   * 拷贝、分发、呈现和表演当前作品

   * 制作派生作品

但是必须基于以下条款:

  * 署名。你必须明确标明作者的名字。.

  * 非商业用途。 你不可将当前作品用于商业目的。

  * 保持一致。 如果你基于当前作品更改、变换或构造新作品,你应当按照与当前协议完全相同的协议分发最终作品

  * 对于任何二次使用或分发,你必须让其他人明确当前作品的授权条款

  * 在得到作者的明确允许下,这里的某些条款可以放弃

此约定是法律文本 (完整的协议)的简单易读概要

演示

—————————–

http://longbill.cn/down/sample/chat.php

特点

—————————–

1.小巧,整个程序只有一个20多KB的php文件

2.高效,使用ajax技术传输数据,服务器负担较小

3.保存聊天记录到php文件(不会被下载)

4.可以设置文字样式

5.显示在线用户

6.支持发送图片

7.完全支持IE6+ ,Firefox,Opera,Safari等主流浏览器

改进

—————————–

1.完全解决1.0版客户端内存泄露问题

2.大大减少了用户丢话的概率

3.优化了用户在线的判断标准

4.增加用户关闭聊天窗口的警告,防止误操作

5.增加发图片时候的url验证,防止发送恶意代码

设置

—————————–

使用文本编辑器打开程序文件进行具体设置

安装

—————————–

将这个程序传到服务器上,输入对应的url就可以了。

如果是Linux主机,请先自行建立 rooms 文件夹,并将此文件夹属性设置成0777

使用

—————————–

默认的聊天数据保存路径为 rooms/ 目录(如果没有,程序会自动创建)

调用时后加参数 room=房间名 , 比如 chat.php?room=happy,此时就程序就会自动创建 rooms/happy.php 文件来保存聊天数据。

下载

—————————–

http://longbill.cn/down/miniajaxchatroom.zip

推荐一个国外开源免费轻量级MVC框架 CodeIgniter

12 条评论 2008年2月20日

    CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而“优雅”的工具包,它可以为 PHP 程序员建立功能完善的 Web 应用程序。如果你是一个使用共享主机,并且为客户所要求的期限而烦恼的开发人员,如果你已经厌倦了那些傻大笨粗的框架

那么 CodeIgniter 就是你所需要的,如果…

你想要一个小巧的框架。
你需要出色的性能。
你需要广泛兼容标准主机上的各种 PHP 版本和配置(例如 PHP4)。
你想要一个几乎只需 0 配置的框架。
你想要一个不需使用命令行的框架。
你想要一个不需坚守限制性编码规则的框架。
你对 PEAR 这种大规模集成类库不感兴趣。
你不希望被迫学习一门模板语言(虽然可以选择你要求的模板解析器)。
你不喜欢复杂,热爱简单。
你需要清晰、完善的文档。   

  前段时间不小心发现的,觉得非常不错,就尝试使用了一下。但是开始遇到一些问题,主要是 CI 的 index.php 必须放到一个网站的根目录下(不知道这个bug现在修复没有),否则load一些库的时候会出问题。除了这个问题之外,感觉CI真的非常不错。  他们的中文网站是 www.codeigniter.org.cn 我还帮忙翻译了几篇手册。呵呵

发布 O-blog 3.0 beta

96 条评论 2008年2月19日

O-blog 3.0 beta

—————————————————–
 作者  风色 & Longbill
 版本  3.0 beta
 发布 2008/2/20
 环境 php mysql

——————————————————
 下载  : http://www.longbill.cn/down/o-blog3beta.rar
 演示 :  http://www.longbill.cn

 Email:   longbill.cn@gmail.com

 支持 :  http://bbs.phpBlog.cn 
  http://www.longbill.cn

 论坛 :  http://bbs.phpBlog.cn
——————————————————

 创作共用(Creative Commons)
 —————————————————–
     你可以免费: 拷贝、分发、呈现和表演当前作品;制作
 派生作品 ;
     但是必须基于以下条款:

     * 署名。你必须明确标明作者的名字。
     * 非商业用途。 你不可将当前作品用于商业目的。
     * 保持一致。 如果你基于当前作品更改、变换或构造新
 作品,你应当按照与当前协议完全相同的协议分发最终作品。

     对于任何二次使用或分发,你必须让其他人明确当前作
 品的授权条款

 

 特点
 —————————————————–
  高效,简洁
  支持生成静态页面
  非常亲和用户的评论表单
  AJAX调用动态数据,使静态与动态完美结合
 

主要新增功能
——————————————————
//全部使用UTF-8编码
//优化后台运行速度
//新增数据缓存功能
//新增html编辑器
//新增防垃圾留言功能
//新增静态页ajax调用动态数据功能
//新增文章列表ajax显示阅读次数
//新增文章的上下文章链接
//新增归档按年分组闭合功能
//新增针对搜索引擎的副标题功能
//添加 关闭 trackback 选项
//增加后台清空cache功能。
//增加 设置 评论后发表的在前 (最后用户可自定义)。
//调整大图片出现滚动条为自动调整图片大小
//修改后台显示日志列表为置顶的排在前
//后台登陆防暴力破解
//集成PHPCMS文件管理器的编辑器作为模板编辑器
//增加自定义模板变量功能,可以添加广告,备案等自定义变量
//增加热门文章显示
//去掉 rss1 优化rss2.0
//很多其他细节优化

交流 
—————————————————-
  http://bbs.phpblog.cn
  http://www.longbill.cn

模板升级方法
—————————————————–
http://www.longbill.cn/blog/archives/2008/02/moban.html

 安装(Install)
 —————————————————–
     1.如果您用的是 LINUX 类型的主机,请设置以下目录
 和文件的权限为 777 ; 如果您用的 WINDOWS 类型的主机,
 那么请直接到第2步。

     ./
     ./cache
     ./archives
     ./admin/mysql.php
     ./admin/class/autolink.php
     ./uploadfiles
     ./templates 及此文件夹下的所有文件(夹)
     ./bak

     2.运行 install.php 文件,安装程序会一步步指导您
 完成安装
     3.删除 install.php 文件。

 管理(Manage)
 —————————————————–
 后台登陆地址:http://您的 BLOG 地址/admin/
 用户名和密码就是您在安装时填的用户名和密码。

 技术支持(Technology Support)
 —————————————————–
 如果您在使用的过程中遇到问题,
 请到  http://bbs.phpBlog.cnhttp://www.longbill.cn 寻求帮助

O-blog 2.6 自建模板 转 3.0 模板方法

2 条评论 2008年2月19日

由于 O-blog 3.0 增加了 静态页面ajax方式调用动态数据 和 防垃圾评论的功能。原来 2.6 的模板需要按照下面的方式转换方能在 O-blog 3.0 中使用。

  1. 首先把所有页面的编码 改成 UTF-8, 很多编辑软件都有这个功能。
  2. 然后把所有页面里的 rss2.php 换成 rss.php(一般在sort.htm header.htm里面)
  3. header.htm

    在 <head> 与 </head> 之间增加:

    
    
    

    此外,导航按钮可以使用动态的数据(admin/config/navigator.php),原来的静态导航按钮不变也可以

    <ul>

    <!– BEGIN navi –>

    <li><a href=”{url}”  target=”{target}”>{name}</a></li>

    <!– END navi –>

    </ul>

  4. articleList.htm

    显示阅读次数的地方用 <span id=”count_{id}”>0</span>

  5. bo.htm

    在统计的代码(如果有的话)之前,加上。这样有些缓慢的统计代码就不会影响页面数据加载的时间了。

    <script type=”text/javascript”>

    on_load();

    </script>

  6. remark.htm

    这里增加了一个模板变量 allow_trackback (是否开启trackback ping),可以把原来显示 引用的部分用

    <!– IF allow_trackback –>

    <!– ENDIF –>

    括起来

    另外,还有非常重要的 评论表单

    关键部分像这样:

    <form name=”自定义” method=”post” action=”自定义” id=”blog_form” onsubmit=”return checkform(this)”>

    <input type=”text” name=”username” value=”自定义” size=”自定义” />

    <p id=’email_c’><input type=”text” name=”email” value=”" size=”自定义” /> E-mail </p> (注意,email的 那行请用一个 id=’email_c’ 的元素包起来,不一定非要用 p )

    <textarea rows=”自定义” cols=”自定义” name=”content” ></textarea>

    <input type=”hidden” name=”inblog” value=”{inblog}” />

    <input type=”submit” value=”提交评论” />

    </form>

  7. guestbook.htm

    这里的 form 要求和 remark.htm 基本一样。唯一不同的是 email 的那行不需要 一个 id=’email_c’ 的元素包围。因为 留言本的 email 是必填项。

  8. show_article.htm

    请确保有下面的代码

    <script type=”text/javascript” src=”{blogurl}count.php?do=add&id={id}”></script>

AJAX方式调用动态数据的方法:

在页面任何地方,只需要写 <div id=’lastblog’></div> 即可调用最新发表的数据。此外id还可以是:

previousblog 上一篇文章

nextblog 下一篇文章

lastblog 最新发表

lastremark 最新评论

hotestblog 最热文章

archive 文章归档

calendar 日历

还有后台可以设置“自定义变量”,这些变量都是全局变量,在任何一个模板文件都可以调用。 比如我在自定义变量里面设置了一个 header_ad (值为广告代码),那么可以在 header.htm中用 {header_ad} 来显示此变量。

暂时就这么多。希望大家升级愉快!

视觉系火星播报河蟹娱乐朝花夕拾牛人很牛灰太狼软白沙八月洗澡火影那些事儿热豆腐