嗨,新朋友,很高兴认识你,欢迎来到我的博客。

js函数内获取event对象,非参数传递

通常获取event对象会给函数传递一个event参数,默认是第一个参数,最近公司项目需要在函数里面获得event然后调用jquery的stopPropagation()阻止事件冒泡,查阅了很多资料都没有找到JQUERY支持非参数传递获取event,或许我不知道吧,后来直接看sina微博的源码,发现了core.Events.getEvent()函数,仿照给jquery的event对象加了一个功能,$.event.get()

$.event.get = function(){
	if(!$.browser.msie){
		if (window.event) {
			return window.event;
		}
		var o = arguments.callee.caller;
		var e;
		var n = 0;
		while (o != null && n < 40) {
			e = o.arguments[0];
			if (e && (e.constructor == Event || e.constructor == MouseEvent)) {
				return $.event.fix(e);
			}
			n++;
			o = o.caller
		}
		return $.event.fix(e);
	}else{
		return $.event.fix(window.event);
	}
};

采用Snoopy.class.php抓取网页

snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务。

官方网站 http://snoopy.sourceforge.net/

有些网站可能采取了措施,禁止了file_get_contents抓取页面,这个时候我们可以用这个类模拟WEB浏览器,模仿head请求,得到页面数据,简单的例子

首先用firebug查看要抓取网页的请求头信息,在网络中可以看到

Host	www.chibaole.com
User-Agent	Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 FirePHP/0.4
Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language	zh-cn,zh;q=0.5
Accept-Encoding	gzip,deflate
Accept-Charset	GB2312,utf-8;q=0.7,*;q=0.7
Keep-Alive	115
Connection	keep-alive
Cookie	rtime=1; ltime=1280995426695; cnzz_eid=71384490-1278900475-; cnzz_a1806332=2; sin1806332=
If-Modified-Since	Sun, 04 Jul 2010 08:18:25 GMT
If-None-Match	"6d352-1a2b-48a8b76cc47dc"
Cache-Control	max-age=0

对应的代码是

<?php
include('Snoopy.class.php');
$s = new Snoopy();
$s->host = 'www.chibaole.com';
$s->agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 FirePHP/0.4';
$s->referer = 'http://www.chibaole.com/';
$s->cookie = array('rtime'=>'1','ltime'=>'1280995426695','cnzz_eid'=>'71384490-1278900475-','cnzz_a1806332'=>'2','sin1806332'=>'');
$s->fetch('www.chibaole.com');
echo $s->results
?>

symbain V5手机安装php服务器pamp

拥有Nokia5530已经快一年了吧,刚买的时候还挺激情的装这装那得,后来手机速度感觉越来越慢了,就不在折腾了,其实除了几个常用的软件,其他的游戏啥的大都动都没有动过,最近Google的手机操作系统越来越火了,也不觉开始关注一下手机行情,双休再次到塞班上下载自己的签名(我的是水货机),安装了之前需要签名才能安装的几个游戏和滑动解锁软件,最后想了之前安装的一个php服务器没有安装成功,就顺便找找有没有相关文章,结果找到一个帖子,按照上面的方式果然安装成功,分享一下!
http://www.dospy.com/bbs/thread-3080112-1-8.html
大家一定用过LAMP,LAMP是由Linux,Apache,Mysql,Php组成的高效服务器,比如XAMPP。

另人震惊的是现在AMP环境可以在S60的机器上运行了,它就是PAMP,即Personal,Apache,Mysql,Php。只要是使用S60第三版以上,机身Ram超过128M的都可以运行。目前它的最新版为1.0.2。

最令人惊讶的是,在Symbian Series60 3rd 上运行的Apache和Mysql并不是什么迷你版或者低版本,而是目前应用得比较普遍的5.X版。1.0.2使用的是 PHP/5.2.2 + Mysql/5.0.67 + Apache/2.2.4。而且常用的Curl和GD库都已经整合到PAMP了。

本人使用的是诺基亚5800XM,已经成功运行PAMP。

下载地址: http://sourceforge.net/project/showfiles.php?group_id=212597&package_id=255753

有两个包,一个是sdk的25M不用下载,下载那个8M的解压之后又三个sis文件安装如下
安装方法:先安装pips_nokia_1_3_SS.sis,然后安装ssl.sis,最后安装 pamp_1_0_2.sis ,以上程序都无需签名。

运行方法:
1.打开PAMP:应用程序 -> Pamp。
2.选项 -> start -> Pamp,中途会询问是否打开WLan,如果想要局域网能够访问就开启吧。
3.在手机浏览器中输入 http://localhost 就可以了。htdocs默认存储在E:/data/apache/htdocs
4.根据手机获取的IP地址,在局域网电脑上输入IP可以访问手机的PHP服务器

我传了一个phpmyadmin但是没有运行成功,不知道什么原因,后来在电脑上使用Navicat for MySQL连上的,mysql的用户名是root密码为空,如果要修改mysql密码连接上去之后运行sql:update mysql.user set password=PASSWORD(“密码”) where user=’root’;

mysql导入到oracle

没有找到合适的工具,就自己用PHP来导,前提是先在oracle上建立和mysql表结构完全相同的表,其中text字段采用blob字段替代,必须保证表名和字段名都相同,程序我采用的adodb操作的oracle,这样在处理blob字段时比较容易!

$db2 = $this->initDb('pps_cdn');//采用的adodb连接oracle数据库
$db3 = mysql_connect('localhost', 'root', 'root');
mysql_select_db('dns') or die ('数据库选择失败!');
mysql_query("SET NAMES 'gbk'");

$dbarr = array('test1','test2');
if(isset($_GET['dbname']) && in_array($_GET['dbname'],$dbarr)){
	$rs = mysql_query("select * from ".$_GET['dbname']) or die("Invalid query: " . mysql_error());
	$quest = $meta = $blobmeta = array();
	$is_blob = false;
	for($i=0;$i < mysql_num_fields($rs);$i++) {//得到字段名
		$field = mysql_fetch_field($rs);

		if($field->type == 'blob'){//由于oracle没有text类型,所以要采用blob代替,然而blob需要单独更新处理
			$blobmeta[] = $field->name;
			$is_blob = true;
		}else{
			$meta[] = $field->name;
			$quest[] = '?';
		}
	}
	$metastr = implode(',',$meta);//得出insert的字段
	$queststr = implode(',',$quest);//得出adodb的替换符号"?"

	//$dataarr = array();
	$db2->Execute("delete from ".$_GET['dbname']." where ".$meta[0]."!=0");//清空原来oracle对应表的数据,前提是主键为整型,如果表为空也可省略
	while($row = mysql_fetch_assoc($rs)){
		$rowarr = array();
		foreach($meta as $v){
			$rowarr[] = $row[$v];
		}
		$db2->Execute("insert into ".$_GET['dbname']."(".$metastr.") values(".$queststr.")",$rowarr);
		//$dataarr[] = $row;
	}
	mysql_data_seek($rs,1);//将指针定到开始位置
	if($is_blob){//如果mysql中含有text字段,则将text字段更新为blob
		while($row = mysql_fetch_array($rs)){
			foreach($blobmeta as $v){
				$row[$v] = trim($row[$v]);//空数据无法插入blob
				if(!empty($row[$v])){
					$db2->UpdateBlob($_GET['dbname'],$v,$row[$v],"$meta[0] = $row[0]");
				}
			}
		}
	}
	print_r($meta);
	print_r($quest);
	//print_r($dataarr);
	mysql_free_result($rs);
}

Flex入门指南—PHP开发者

本文出处:http://blog.csdn.net/lihe111/archive/2010/01/14/5189485.aspx
作者: Mihai Corlan— Adobe  Platform Evangelist

从上个世纪 90 年代末开始,我一直从事与 Web 相关的技术,而且我接触的第一个服务器端技术是 PHP 。后来,我转向 ColdFusion  和 Java  的开发工作,但我始终认为自己是一个 PHP 开发人员。当 AJAX 技术出现时,我开始与 Prototype 和  script.aculo.us 等架构打交道,并且着手创建自己的架构。

2006 年底,我开始体验进行 Flex 开发。这有点类似速成学习班,因为我需要在大约 4-6 个星期内为 FDS (( Flex Data Services,  现在称为 LiveCycle Data Services )将要问世的版本创建一个演示应用程序。尽管当 时我是一个 Flex  和 FDS 的新手,但该项目进展顺利,而且我非常享受这次 开发以及学习过程。

然而,在享受的同时,我感觉到 Flex 的不同之处。我的意思是当我在进行 ColdFusion  或 Java Web  的开发工作时,我并没有觉得其与 PHP 相比有不同之处。这仅仅是一个寻找正确的 API 以及适应特定语言的问题。后来,当我开始在 DHTML 之上进行 AJAX 开发时,我感觉也没有不同之处。你仍然使用相同 的技巧、利用服务器端语言来创建大多数网站,以及在网站各处插入一些趣味画面(对于本案例来说,它们是一些 AJAX widgets )。

当我使用 Flex 创建我的第一个 Web 项目时,我的天啊,这是一个巨大的转变。客户端 和服务器之间的清晰分离(除了服务器侧的业务逻辑之外的客户端侧业务逻辑)、需要进行编译而不是翻译的客户端侧技术、以及客户端的两种语言等,所有这些均 需要用一种不同于传统 Web 开发的思维方式进行思考。

这就是我写作本文的原因。我希望与你分享一些与 PHP 相关的 Flex 特定的技巧。同时,我还希望通过将 Flex 与 PHP 进行比较引入 Flex 概念,当然它们的比较必须是有意义的。因此本文 的目标读者是:

·  希望学习更多关于 Flex  和 Action Script 3  而不只是通过简单定义能够提供的内容的 PHP 开发人员

·  已经进行 Flex 应用程序编码尝试并且希望更广更深地了解 Flex 的 PHP 开发人员

本文没有涉及的内容是什么?试图改变你或说服你让你相信 Flex 优于 X 或 Y 不是我的本意。我坚信项目具有各种各样的类型, 并且利用不同的工具能够完成这些项目。

另外,本文没有为 Flex  或 ActionScript 3 提供完整的文件资料。目前,市面上有几十本专著 的数百页资料论述该主题。关于 Flex 的文章也有成千上万篇。而我的意图是在将 Flex 概念与 PHP 类似概念进行关联是有意义的情形下,针对最重要 的议题为你提供足够的信息。为了使得本文更为实用,我对其结构进行适当的安排并且尽力避免对细节进行过多的赘述。在本文的结尾部分,我提供了 Adobe AIR  的简介和一些附加参考资料,以便于你能够查阅与 本主题相关的更多详细信息。

最后需要说明的是,对于本文给出的大部分范例, 我选择使用 Flex 3 进行编程。作出这样的选择有如下几个原因:首 先,在写作本文时, Flex 4 仍然是 beta 版本。其次,由于 Flex 4 主要是 Flex 3 的演化版本,因此这里涉及的大部分应用程序能够 适用于 Flex4 ,只需进行少许更改即可。在一些范例中,我将指 出这些不同之处。对于 PHP 范例,我选择使用 PHP 5.3 作为编程参考语言。前面已经给出说明,现在让我 们来看看下面的本文目录,然后开始用功学习。

1.  什么是 Flex ?

1.  Flex:  一个框架绑定的两种语言

2.  为什么你需要关注 Flex

3.  从瘦客户端向智能 / 富客户端演化

2.  MXML 语言简介

1.  MXML 和 ActionScript 3 之间的混合

2.  CSS  式样

3.  在运行时修改 MXML 代码

3.  ActionScript 3 语言简介

1.  隔离语句

2.  数据类型、变量和常量

3.  函数和匿名函数(闭包)

4.  OOP :类和 接口

5.  变量作用域

6.  数组

7.  命名空间

8.  与 XML 的配合

9.  动态 ActionScript

4.  Flex  是异步的

5.  Data  绑定、元数据标签和 反射

6.  我的数据在哪里?将它显示出来 !

7.  Flex 和 PHP  项目的用户鉴权

8.  建立 Flex 和 PHP  项目

1.  Flex SDK

2.  Flex Builder / Flash Builder

3.  调试 Flex  应用程序

9.  什么是 Adobe AIR?

10.  下一步计划是什么  ?

11.  总结

高级PHP应用程序漏洞审核技术

作者:膘叔(http://www.neatstudio.com)

原文地址:http://www.neatstudio.com/show-1379-1.shtml

不管是初学者还是老鸟,了解一下会有很多好处,比如里面介绍的,从URL传递global变量,比如5.26前的mt_rand的BUG等等。比如urldecode处理%2527会变成单引号,比如。。。实在太多了,或许程序真的没问题,但有问题的可能是PHP自己。
了解一下,可以让代码中更少漏洞吧?

原文很长,我这里也只是把目录贴一下,如果你真的有兴趣,不妨去看看全文

高级PHP应用程序漏洞审核技术

  • 附录
  • 如果你有自己的想法,也可以尝试提交你的建议到该项目中去

    PHP获取browser信息类

    在小熊的网站看到关于PHP获取browser信息的文章:http://crazyphper.com/wblog/?p=945 其中第三种的Browser类是外国人写的,以后估计会用到,先收藏一下!

    http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php/

    javascript遍历字符串

    在PHP中一个字符串变量$a = ‘teststring’;可以通过数组的访问方式来访问单个字符,$a[0]==t,那么JS里面也可以这样

    var a = 'teststring';
    for(var i = 0; i < a.lenght; i ++)
    {
        alert(a[i]);
    }

    事实上上面的代码在FF下运行正常,在IE下得不到想要的结果,其实这里需要使用一个函数charAt(),如下

    var a = 'teststring';
    for(var i = 0; i < a.lenght; i ++)
    {
        alert(a.charAt(i));
    }

    ob_start()调用callback是类的成员函数

    通常使用ob_start()缓冲输出的时候会调用一个回调函数如:

    <?php
    
    function callback($buffer)
    {
      // replace all the apples with oranges
      return (str_replace("apples", "oranges", $buffer));
    }
    
    ob_start("callback");
    
    ?>
    <html>
    <body>
    <p>It's like comparing apples to oranges.</p>
    </body>
    </html>
    <?php
    
    ob_end_flush();
    
    ?>

    如果这个时候需要调用一个类的成员函数该怎么办,可能你会觉得这样ob_start(‘cai->callback’),事实上这样是不行的,真正的方式这里需要传入一个数组,数组有两个参数,array(&类的实例,成员函数),例子如下:

    <?php
    class MyClass {
    	public function callback($buffer) {
    		// replace all the apples with oranges
    		return (str_replace("apples", "oranges", $buffer));
    	}
    }
    $cai = new MyClass();
    ob_start(array(&$cai,'callback'));
    ?>
    <html>
    <body>
    <p>It's like comparing apples to oranges.</p>
    </body>
    </html>
    <?php
    ob_end_flush();
    ?>

    如果要类里面使用ob_start则可以将this作为第一参数:ob_start(array(&$this,’callback’));

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

    作者:刘春龙(http://www.longbill.cn/)

    本文地址:http://www.longbill.cn/blog/mysql_fulltext/

    比如我们有一句话:你好我是刘春龙 那么我们可以这样来分词: 你好 好我 我是 是刘 刘春 春龙
    这样虽然看起来有点傻,但是实际应用起来确实可行,因为我们搜索时候输入的关键词也是按照这个方法分词。 下面有个我自己写的函数,可以实现这种分词。传入三个参数,分别是:
    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;
            }
    }
    

    另附一个中文分析系统:

    http://www.hightman.cn/index.php?scws