你是像我一样?还是很有自制力?

2011年10月25日 hxsying 1 条评论

你是像我一样?还是很有自制力?
本文是从 Are you like me? Or do you have discipline? 这篇文章翻译而来。
如果你做事都跟我一样,你一定是做的事情很多,但很少能完成的。

我们天生就对周围的事务有一种好奇心,每当遇到有人在什么事情上取得成就时,我们都会受到鼓舞。我们看到有人干了很好、很漂亮的事情后会想,“兄弟,这看起来不是那么难,如果我要是花点时间去做这些,我也能做到。”随后就是几天或几周用心的学习研究。这样我们确实取得了一些进步,但不是很多。事实上,我们做的这些事情只是让我们走到近前,开始真正的理解我们正在做的事情有多么的复杂。作为旁观者看起来如此容易的事情开始显露出我们无法看到的复杂性、开始受到我们的赞叹。我们开始意识到,这事需要我们付出真正的努力才能实现!此时这个阶段,就是我们开始对它失去兴趣的时候了,就是我们开始让自己消失在我们是怎样和我们想怎样的鸿沟里。很快,我们就不再向我们的这个新目标上投入时间,几乎忘了我们曾经开始过。

很快一两年后,我们开始认识到,如果当时我们能够坚持下来,不停止我们的努力,我们很可能也会成为当初让我们精神鼓舞的人那样的人!两年对于当时的我们来说似乎是遥不可及的岁月,而如今回首,那只是弹指一挥间。为什么当初我们就不能坚持下来?如果那事不是那么难该多好…

我想,很多人都遇到过这种情况——事实上,我认为大多数人都是这样。我在学习乐器,写博客,做木工,编程,以及很多事情是都是这样。发生这些不能有始有终的事情,最大的拦路虎就是缺乏自制力。缺乏那种当遇到的事情看起来自然而简单但实际上很难时,能够让自己坐下来、坚持下去的自制力。人遇到这种事情是很难做出正确的判断,因为这种事情不会有立即的回报——就像学习任何值得学习的技能一样。

四个星期前,我开始(再次)自学Ruby on Rails。我希望这次不要再犯好高骛远的错误,否则我会落得上次同样的结局。我每天学一点,用我最大的努力坚持住每天都学一点。如果有人有能帮助我完成这项任务的建议和忠告,我愿洗耳恭听。

【转】http://www.aqee.net/are-you-like-me-or-do-you-have-discipline/

分类: php 标签:

美苹果在线商店首现翻新版iPad2 中国区无出售

2011年9月4日 hxsying 6 条评论

晨报讯 9月伊始,iPad2首次出现在了苹果在线商店的翻新产品目录中,在中国官网上则有iPad、Mac和iPod等多款产品。在国内市场上,如此正大光明出售翻新产品的,目前只有苹果一家。
在美国官网的在线商店中,翻新版的iPad2产品共有32GB和64GB两个版本。网站上明确标明,只有在美国的消费者才可购买。
记者在中国官网上没有看到翻新的iPad2出售,但却有翻新的iPad一代,还有Mac和iPod等多款产品。根据网站显示,翻新的iPad一代产品的16GB版本暂时售罄,而32GB、Wi-Fi版本的售价为2984元人民币,64GB、Wi-Fi版本的售价则是3718元人民币,相比原价分别便宜了1550元人民币和1570元人民币。
一位苹果的销售人员表示,原厂翻新机主要是一些召回和退货产品,苹果对这些产品存在问题的外壳和零件进行彻底清洗和更换,并经过质量检测后才重新出售。至于这些翻新产品曾更换过哪些零部件,销售人员表示“查不到”,“所有苹果认证的翻新产品都包含为期1年的有限保修,也可以在14天内无条件退换货。”
据悉,早在2009年1月起,苹果原厂翻新机就开始在中国官网上公开销售,也是首家在国内通过官方正规渠道销售翻新机的商家。

分类: it资讯 标签:

Google+会取代Facebook吗?

2011年9月4日 hxsying 没有评论

人们往往会问这样一个问题:“Google+会如同Facebook取代Myspace一样取代Facebook吗?”

答案是“不”,但这不是因为,Google+无法取得重大的成功。

从某种意义来说,无论是服务、技术还是公司,它们从未杀死竞争对手或相互替代。一些公司未能跟随客户需求,不断创新,这才是它们衰败的原因。举例来说,电视从未真正取代广播电台,因为广播电台有其专门的用途,拥有坚实的技术基础。同样的原因,互联网也不可能取代电视。

Facebook“取代”了Myspace并不是因为Facebook是更好的社交网络,而是因为Myspace的表现实在糟糕。Myspace只所以衰败怪不得别人,只能怪自己。不过,丢了3个亿的用户,不弄出几个敌人来做替罪羊,这不正常。

社交网络有着足够的空间,Facebook、LinkedIn和Google+可以共存,这就像一条街上的两个酒吧一样,这不是一个你死我活的游戏。

Google会取代Facebook吗?不会,不过,如果Facebook自己犯错,那将会给Google+机会。

Via TNW

转[雷锋网]

分类: it资讯 标签:

5条鲜为人知的Windows小技巧

2011年8月24日 hxsying 1 条评论

1. 双击窗口左上角关闭窗口

2. 在错误信息窗口激活时按下Ctrl+C复制错误信息

Windows时不时会傲娇一下,蹦几个错误信息给你看。当你想拷贝错误信息去Google一下时却发现,丫的这些字居然没法选蓝复制!没关系,直接Ctrl+C就行了

3. Shift+左键点击“否”=“全否”

Windows XP里只有“全是”而没有“全否”,难道要我一个一个点下去?没关系,慢慢来,按住Shift点“否”就成了。

4. 看看到底是哪个坑爹程序占这么大地方?

在控制面板中的卸载程序页面上,让他们按照程序占的空间大小进行排序,马上你就能知道了。

5. Ctrl+Shift+N创建新文件夹

这个确实很方便,不过好像只有win7下是能这样的,vista和之前的XP貌似都不行?

分类: it资讯 标签:

地震了怎么办?手机电话不稳定 上社交网站交流

2011年8月24日 hxsying 1 条评论

发表:新浪科技 思远


  在今年日本的地震、海啸以及核电站处理危机,再一次将全球社交网络平台推向了一个新的使用高度。(TechWeb配图)

  新浪科技讯 北京时间8月24日早间消息,在美国弗吉尼亚州周二遭遇地震后,Verizon电信、AT&T和Sprint Nextel三大运营商的通话量都大幅飙升,社交网站的活动同样出现增长。

  Verizon电信发言人彼得·松尼斯(Peter Thonis)说:“通话量很高。在一些繁忙地区,需要打好几遍才能接通。持续时间很短。据我所知,固话和无线网络当前都没有出现问题。”

  本次的地震震中位于弗吉尼亚州里士满西北部40英里(约合65公里)处,震级为里氏5.8级,是弗吉尼亚州一个多世纪来震级最高的地震,华盛顿到波士顿一线均有震感。震区居民使用手机传递地震状况,并利用Facebook和Twitter等网站交流相关信息。

  Facebook在声明中称,地震发生后,约有300万美国用户在状态更新中提及了“earthquake”(地震)一词。而在Twitter中,“#earthquake”也成为了热门话题之一。

  Sprint发言人斯科特·斯劳特(Scott Sloat)表示,该公司的网络在震后经历了短暂的通话激增,但网络并未受到影响。不过,他仍然鼓励用户发送短信与亲友取得联系,而不要直接通话。

  AT&T也未收到网络破坏的报告,但该公司发言人马克·西格尔(Mark Siegel)同样表示,该公司的“通话量激增”。(思远)

分类: it资讯 标签:

php 取拼音

2011年8月20日 hxsying 4 条评论

//使用
$cs = new ChineseSpell() ;
echo $cs->getFirstLetter(‘爱我中华’).’<br>’ ;
echo $cs->getFullSpell(‘爱我中华’).’<br>’ ;


<?php
class ChineseSpell {
/**
* @var array $chineseSpellList 拼音编码对应表
* @access private
*/
private $chineseSpellList = array(
'a'=>-20319,
'ai'=>-20317,
'an'=>-20304,
'ang'=>-20295,
'ao'=>-20292,
'ba'=>-20283,
'bai'=>-20265,
'ban'=>-20257,
'bang'=>-20242,
'bao'=>-20230,
'bei'=>-20051,
'ben'=>-20036,
'beng'=>-20032,
'bi'=>-20026,
'bian'=>-20002,
'biao'=>-19990,
'bie'=>-19986,
'bin'=>-19982,
'bing'=>-19976,
'bo'=>-19805,
'bu'=>-19784,
'ca'=>-19775,
'cai'=>-19774,
'can'=>-19763,
'cang'=>-19756,
'cao'=>-19751,
'ce'=>-19746,
'ceng'=>-19741,
'cha'=>-19739,
'chai'=>-19728,
'chan'=>-19725,
'chang'=>-19715,
'chao'=>-19540,
'che'=>-19531,
'chen'=>-19525,
'cheng'=>-19515,
'chi'=>-19500,
'chong'=>-19484,
'chou'=>-19479,
'chu'=>-19467,
'chuai'=>-19289,
'chuan'=>-19288,
'chuang'=>-19281,
'chui'=>-19275,
'chun'=>-19270,
'chuo'=>-19263,
'ci'=>-19261,
'cong'=>-19249,
'cou'=>-19243,
'cu'=>-19242,
'cuan'=>-19238,
'cui'=>-19235,
'cun'=>-19227,
'cuo'=>-19224,
'da'=>-19218,
'dai'=>-19212,
'dan'=>-19038,
'dang'=>-19023,
'dao'=>-19018,
'de'=>-19006,
'deng'=>-19003,
'di'=>-18996,
'dian'=>-18977,
'diao'=>-18961,
'die'=>-18952,
'ding'=>-18783,
'diu'=>-18774,
'dong'=>-18773,
'dou'=>-18763,
'du'=>-18756,
'duan'=>-18741,
'dui'=>-18735,
'dun'=>-18731,
'duo'=>-18722,
'e'=>-18710,
'en'=>-18697,
'er'=>-18696,
'fa'=>-18526,
'fan'=>-18518,
'fang'=>-18501,
'fei'=>-18490,
'fen'=>-18478,
'feng'=>-18463,
'fo'=>-18448,
'fou'=>-18447,
'fu'=>-18446,
'ga'=>-18239,
'gai'=>-18237,
'gan'=>-18231,
'gang'=>-18220,
'gao'=>-18211,
'ge'=>-18201,
'gei'=>-18184,
'gen'=>-18183,
'geng'=>-18181,
'gong'=>-18012,
'gou'=>-17997,
'gu'=>-17988,
'gua'=>-17970,
'guai'=>-17964,
'guan'=>-17961,
'guang'=>-17950,
'gui'=>-17947,
'gun'=>-17931,
'guo'=>-17928,
'ha'=>-17922,
'hai'=>-17759,
'han'=>-17752,
'hang'=>-17733,
'hao'=>-17730,
'he'=>-17721,
'hei'=>-17703,
'hen'=>-17701,
'heng'=>-17697,
'hong'=>-17692,
'hou'=>-17683,
'hu'=>-17676,
'hua'=>-17496,
'huai'=>-17487,
'huan'=>-17482,
'huang'=>-17468,
'hui'=>-17454,
'hun'=>-17433,
'huo'=>-17427,
'ji'=>-17417,
'jia'=>-17202,
'jian'=>-17185,
'jiang'=>-16983,
'jiao'=>-16970,
'jie'=>-16942,
'jin'=>-16915,
'jing'=>-16733,
'jiong'=>-16708,
'jiu'=>-16706,
'ju'=>-16689,
'juan'=>-16664,
'jue'=>-16657,
'jun'=>-16647,
'ka'=>-16474,
'kai'=>-16470,
'kan'=>-16465,
'kang'=>-16459,
'kao'=>-16452,
'ke'=>-16448,
'ken'=>-16433,
'keng'=>-16429,
'kong'=>-16427,
'kou'=>-16423,
'ku'=>-16419,
'kua'=>-16412,
'kuai'=>-16407,
'kuan'=>-16403,
'kuang'=>-16401,
'kui'=>-16393,
'kun'=>-16220,
'kuo'=>-16216,
'la'=>-16212,
'lai'=>-16205,
'lan'=>-16202,
'lang'=>-16187,
'lao'=>-16180,
'le'=>-16171,
'lei'=>-16169,
'leng'=>-16158,
'li'=>-16155,
'lia'=>-15959,
'lian'=>-15958,
'liang'=>-15944,
'liao'=>-15933,
'lie'=>-15920,
'lin'=>-15915,
'ling'=>-15903,
'liu'=>-15889,
'long'=>-15878,
'lou'=>-15707,
'lu'=>-15701,
'lv'=>-15681,
'luan'=>-15667,
'lue'=>-15661,
'lun'=>-15659,
'luo'=>-15652,
'ma'=>-15640,
'mai'=>-15631,
'man'=>-15625,
'mang'=>-15454,
'mao'=>-15448,
'me'=>-15436,
'mei'=>-15435,
'men'=>-15419,
'meng'=>-15416,
'mi'=>-15408,
'mian'=>-15394,
'miao'=>-15385,
'mie'=>-15377,
'min'=>-15375,
'ming'=>-15369,
'miu'=>-15363,
'mo'=>-15362,
'mou'=>-15183,
'mu'=>-15180,
'na'=>-15165,
'nai'=>-15158,
'nan'=>-15153,
'nang'=>-15150,
'nao'=>-15149,
'ne'=>-15144,
'nei'=>-15143,
'nen'=>-15141,
'neng'=>-15140,
'ni'=>-15139,
'nian'=>-15128,
'niang'=>-15121,
'niao'=>-15119,
'nie'=>-15117,
'nin'=>-15110,
'ning'=>-15109,
'niu'=>-14941,
'nong'=>-14937,
'nu'=>-14933,
'nv'=>-14930,
'nuan'=>-14929,
'nue'=>-14928,
'nuo'=>-14926,
'o'=>-14922,
'ou'=>-14921,
'pa'=>-14914,
'pai'=>-14908,
'pan'=>-14902,
'pang'=>-14894,
'pao'=>-14889,
'pei'=>-14882,
'pen'=>-14873,
'peng'=>-14871,
'pi'=>-14857,
'pian'=>-14678,
'piao'=>-14674,
'pie'=>-14670,
'pin'=>-14668,
'ping'=>-14663,
'po'=>-14654,
'pu'=>-14645,
'qi'=>-14630,
'qia'=>-14594,
'qian'=>-14429,
'qiang'=>-14407,
'qiao'=>-14399,
'qie'=>-14384,
'qin'=>-14379,
'qing'=>-14368,
'qiong'=>-14355,
'qiu'=>-14353,
'qu'=>-14345,
'quan'=>-14170,
'que'=>-14159,
'qun'=>-14151,
'ran'=>-14149,
'rang'=>-14145,
'rao'=>-14140,
're'=>-14137,
'ren'=>-14135,
'reng'=>-14125,
'ri'=>-14123,
'rong'=>-14122,
'rou'=>-14112,
'ru'=>-14109,
'ruan'=>-14099,
'rui'=>-14097,
'run'=>-14094,
'ruo'=>-14092,
'sa'=>-14090,
'sai'=>-14087,
'san'=>-14083,
'sang'=>-13917,
'sao'=>-13914,
'se'=>-13910,
'sen'=>-13907,
'seng'=>-13906,
'sha'=>-13905,
'shai'=>-13896,
'shan'=>-13894,
'shang'=>-13878,
'shao'=>-13870,
'she'=>-13859,
'shen'=>-13847,
'sheng'=>-13831,
'shi'=>-13658,
'shou'=>-13611,
'shu'=>-13601,
'shua'=>-13406,
'shuai'=>-13404,
'shuan'=>-13400,
'shuang'=>-13398,
'shui'=>-13395,
'shun'=>-13391,
'shuo'=>-13387,
'si'=>-13383,
'song'=>-13367,
'sou'=>-13359,
'su'=>-13356,
'suan'=>-13343,
'sui'=>-13340,
'sun'=>-13329,
'suo'=>-13326,
'ta'=>-13318,
'tai'=>-13147,
'tan'=>-13138,
'tang'=>-13120,
'tao'=>-13107,
'te'=>-13096,
'teng'=>-13095,
'ti'=>-13091,
'tian'=>-13076,
'tiao'=>-13068,
'tie'=>-13063,
'ting'=>-13060,
'tong'=>-12888,
'tou'=>-12875,
'tu'=>-12871,
'tuan'=>-12860,
'tui'=>-12858,
'tun'=>-12852,
'tuo'=>-12849,
'wa'=>-12838,
'wai'=>-12831,
'wan'=>-12829,
'wang'=>-12812,
'wei'=>-12802,
'wen'=>-12607,
'weng'=>-12597,
'wo'=>-12594,
'wu'=>-12585,
'xi'=>-12556,
'xia'=>-12359,
'xian'=>-12346,
'xiang'=>-12320,
'xiao'=>-12300,
'xie'=>-12120,
'xin'=>-12099,
'xing'=>-12089,
'xiong'=>-12074,
'xiu'=>-12067,
'xu'=>-12058,
'xuan'=>-12039,
'xue'=>-11867,
'xun'=>-11861,
'ya'=>-11847,
'yan'=>-11831,
'yang'=>-11798,
'yao'=>-11781,
'ye'=>-11604,
'yi'=>-11589,
'yin'=>-11536,
'ying'=>-11358,
'yo'=>-11340,
'yong'=>-11339,
'you'=>-11324,
'yu'=>-11303,
'yuan'=>-11097,
'yue'=>-11077,
'yun'=>-11067,
'za'=>-11055,
'zai'=>-11052,
'zan'=>-11045,
'zang'=>-11041,
'zao'=>-11038,
'ze'=>-11024,
'zei'=>-11020,
'zen'=>-11019,
'zeng'=>-11018,
'zha'=>-11014,
'zhai'=>-10838,
'zhan'=>-10832,
'zhang'=>-10815,
'zhao'=>-10800,
'zhe'=>-10790,
'zhen'=>-10780,
'zheng'=>-10764,
'zhi'=>-10587,
'zhong'=>-10544,
'zhou'=>-10533,
'zhu'=>-10519,
'zhua'=>-10331,
'zhuai'=>-10329,
'zhuan'=>-10328,
'zhuang'=>-10322,
'zhui'=>-10315,
'zhun'=>-10309,
'zhuo'=>-10307,
'zi'=>-10296,
'zong'=>-10281,
'zou'=>-10274,
'zu'=>-10270,
'zuan'=>-10262,
'zui'=>-10260,
'zun'=>-10256,
'zuo'=>-10254
);
/**
* 取汉字所有拼音
* @param string $chinese 要转换的汉字
* @param string $delimiter 分隔符
* @param int $length 返回的长度
* @return string
*/
public function getFullSpell($chinese, $delimiter = '', $length = 0) {
   $spell = $this->getChineseSpells($chinese, $delimiter);
   if ($length) {
    $spell = substr($spell, 0, $length);
   }
   return $spell;
}

/**
* 取汉字拼音首字母
*
* @param string $chinese 要转化的汉子
* @return string
*/
public function getFirstLetter($chinese)
{
   $result = '' ;
   for ($i=0; $i160) {
     $q = ord(substr($chinese,++$i,1));
     $p = $p*256 + $q - 65536;
    }
    $result .= substr($this->getChineseSpell($p),0,1);
   }
   return $result ;
}
/**
* 取一个汉字码对应的拼音
* @param int $num 汉字码
* @param string $blank 空白字符
* @return string
*/
private function getChineseSpell ($num, $blank = '') {
   if ( $num>0 && $num<160 ) {
    return chr($num);
   } elseif ($num<-20319||$num>-10247) {
    return $blank;
   } else {
    foreach ($this->chineseSpellList as $spell => $code) {
     if ($code > $num) break;
     $result = $spell;
    }
    return $result;
   }
}
/**
* 取汉字拼音
* @param string $chinese 要转换的汉字
* @param string $delimiter 分隔符
* @param int $first 是否只返回第一个
* @return string
*/
private function getChineseSpells($chinese, $delimiter = ' ', $first=0)
{
   $result = array();
   for ($i=0; $i160) {
     $q = ord(substr($chinese,++$i,1));
     $p = $p*256 + $q - 65536;
    }
    $result[] = $this->getChineseSpell($p);
    if ($first) {
     return $result[0];
    }
   }
   return implode($delimiter, $result);
}
}

[转]http://hi.baidu.com/xdh2571/blog/item/9031c8faedaae5d3b58f314b.html

分类: php 标签:

消息称手机QQ浏览器将推出全新XCloud架构

2011年8月19日 hxsying 没有评论

据悉,手机QQ浏览器发布将推出全新的XCloud架构。

据悉,手机QQ浏览器XCloud架构分为上下两层,在下层主要包括人性化交互界面框架、极速渲染引擎、X浏览器内核,从而为iOS、Android、Symbian、WM、java等各大平台手机QQ浏览器提供省流量、速度、稳定性等基础性能支持。

通过XCloud架构可以有效保证各平台手机QQ浏览器的UI、体验一致性,同时提升浏览网页的速度,节省流量。比如,通过极速渲染引擎实现手机上网速度的提升,通过页面中转压缩技术,将www页面转换成wap页面,从而节约流量。通过广告过滤技术,实现页面和屏幕的适配,更易于阅读。

省流量、极速、稳定性一直是手机浏览器的三大基础性能指标,这就如同汽车的发动机、安全性结构设计一样重要。目前,手机QQ浏览器已经实现了基础性能与对手持平甚至是超越。

在手机QQ浏览器XCloud架构的上层主要包括腾讯安全引擎、云计算服务集、开放API接口等,通过这一层可以实现手机QQ浏览器的安全性、内容丰富性、提升服务用户的能力。而且随着手机浏览器基础性能趋于同质化,手机浏览器提供一站式服务的能力成为新的竞争筹码。

目前,Android手机QQ浏览器2.4已经通过腾讯移动安全实验室提供服务实现网址安全检测、手机支付安全插件(财付通、支付宝)、下载安全检测功能,可全面保护手机用户上网安全,而且三大安全服务将覆盖全平台手机QQ浏览器。通过云计算服务集,手机QQ浏览器为flash游戏开发者们提供了游戏开放平台。

 

分类: it资讯 标签:

php 利用SCWS API 进行中文分词

2011年8月18日 hxsying 16 条评论

SCWS是一个免费开源免费的简易中文分词系统,并且他为我们提供了在线分词的API。http://www.ftphp.com/scws/api.php 这是接口地址,上面也有详细的介绍了,那么我们就来写一个简单的程序实现分词。

class Scws {
	//结果url
	protected $_url = 'http://www.ftphp.com/scws/api.php';
	protected $_result;
	/*
          data:    需要分词的字符串(*必须*)
       respond:    响应结果格式(其值为: php/json/xml, 默认为 php, 其中 php是指用php序列化后的结果)
       charset:    待分词的字符串编码(gbk/utf8, 默认是utf8)
        ignore:    是否忽略标点符号(yes/no, 默认为 no)
       duality:    是否散字自动二元(yes/no, 默认为 no)
   traditional:    是否采用繁体字库(yes/no, 默认为 no, 仅当 charset 为 utf8 时有效)
         multi:    复合分词的级别(整数值 1~15: 0x01-最短词, 0x02-二元, 0x04-重要单字, 0x08: 全部单字)
                   默认为0, 如有需要建议设置为 3.
	 */
	public function get($data,$respond='php',$charset='utf8',$ignore='yes',$duality='no',$traditional='no',$multi=0){
		try{
		$post_fieds = array(
			'data'        => $data,
			'respond'     => $respond,
			'charset'     => $charset,
			'ignore'      => $ignore,
			'duality'     => $duality,
			'traditional' => $traditional,
			'multi'       => $multi
		);
		$hCurl = curl_init($this->_url);
		curl_setopt($hCurl,CURLOPT_HEADER,0);
		curl_setopt($hCurl,CURLOPT_RETURNTRANSFER,1);
		curl_setopt($hCurl,CURLOPT_POST,1);
		curl_setopt($hCurl,CURLOPT_POSTFIELDS,$post_fieds);
		$result = curl_exec($hCurl);
		$result = unserialize($result);
		curl_close($hCurl);
		$this->_result = $result;
		return true;
		}catch(Exception $e){
			return false;
		}
	}
	/*
	 * 取结果字符串,将分词后的结果用字符串格式返回。
	 * $delimiter 字符串型 用来分割字符串的分界符
	 */
	public function getResultString($delimiter=' '){
		$scws_rs = '';
		if(empty($this->_result['words']))return '';
		foreach($this->_result['words'] as $val){
			$scws_rs .= $delimiter.$val['word'];
		}
		$scws_rs = substr($scws_rs,strlen($delimiter));
		return $scws_rs;
	}
	//不经过处理返回分词后的结果
	public function getResult(){
		return $_result['words'];
	}
}
分类: php 标签:

php 文件上传类 和 ckeditor图片上传

2011年8月16日 hxsying 2 条评论

这是博客的第一篇文章,也不知道写些什么东西好,给大家写一篇教程吧 XD~

既然是写一个文件上传类,就要把基本的功能写全,以后用到的话直接拷贝就好了

一个文件上传类的基本功能:

允许文件类别–存放允许上传文件的类型,文件保存路径和允许的文件大小

如类别image中允许上传png,jpg,gif,bmp文件,上传后保存到 /upload/images 中最大文件大小为1024kb,最小文件大小为0kb。

class Fileupload {
	protected $class = array(
		'image' => array(
			'type' => array('png','jpg','gif','bmp'),
			'path' => '/upload/images',
			'maxsize' => 1024,
			'minsize' => 0
		),
		'zip' => array(
			'type' => array('zip','rar','7z'),
			'path' => '/upload/zip',
			'maxsize' => 2048,
			'minsize' => 0
		),
		'ckeditor' => array(
			'type' => array('png','jpg','gif','bmp','swf'),
			'path' => '/upload/other',
			'maxsize' => 1024,
			'minsize' => 0
		)
	);
}

在这里我们还需要添加几个函数,功能就是,添加,删除和修改文件类别以及其中的允许文件类型。

	public function addClass($name,$type,$path,$maxsize=1024,$minsize=0){
		if(isset($this->class[$name])){return false;}
		$this->class[$name] = array(
			'type' 	  => $type,
			'path'    => $path,
			'maxsize' => $maxsize,
			'minsize' => $minsize
		);
		return true;
	}
	public function setClass($name,$option,$param){
		if(!isset($this->class[$name][$option])){return false;}
		$this->class[$name][$option] = $param;
		return true;
	}
	public function addType($name,$type){
		if(!isset($this->class[$name])){return false;}
		if(is_array($type)){
			foreach($type as $val){
				array_push($this->class[$name]['type'],$val);
			}
		}else{
			array_push($this->class[$name]['type'],$type);
		}
		return true;
	}
	public function delType($name,$type){
		if(!isset($this->class[$name]['type'])){return false;}
		$key = array_search($type,$this->class[$name]['type']);
		if($key !== false){
			unset($this->class[$name]['type'][$key]);
		}else{
			return false;
		}
		return true;
	}

接下来我们就开始写实现上传功能的代码了

	/**
	 * $file 为 上传文件的input 的name属性
	 * $class 为 允许上传的文件类别名
	 */
	public function run($file,$class,$new_filename=null){
		//判断是否是上传文件
		if(isset($_FILES[$file]) && is_uploaded_file($_FILES[$file]['tmp_name'])){
			$class = $this->class[$class];
			$tmp_name = $_FILES[$file]['tmp_name'];
			$name = $_FILES[$file]['name'];
			$size = $_FILES[$file]['size'] / 1024; //取得上传的文件大小 (kb)
			if($size > $class['minsize'] && $size < $class['maxsize']){
				$type = $this->getSuffix($name); //取得上传的文件类型
				if(in_array($type,$class['type'])){
					if(!is_dir($class['path']))throw new Exception('系统错误: 目录 '.$class['path'].' 不存在!');
					if($new_filename ===null )$new_filename = time();	//新文件名
					$path = "{$class['path']}/$new_filename.$type";
					$path = str_replace('//','/',$path);
					if(move_uploaded_file($tmp_name,$path)){
						$path = substr($path,0,1) == '/' ? $path : '/'.$path;
						return $path;
					}else{
						throw new Exception('系统错误:没有写入权限!');
					}
				}else{
					throw new Exception ('文件类型不允许,允许类型:'.implode(',',$class['type']).'!');
				}
			}else{
				throw new Exception("文件必须大于{$class['minsise']}KB和小于{$class['maxsize']}KB!");
			}
		}else{
			throw new Exception('没有要上传的文件!');
		}
	}
	/**
	 * 获取文件后缀名
	 */
	public function getSuffix($filename){
		$suffix = preg_replace('/.*\.([^\.]*)$/i','$1',$filename);
		//当没有后缀名或获取失败时返回空字符串
		if($suffix == $filename || $suffix == null){
			return '';
		}else{
			return $suffix;
		}
	}

OK,文件上传实现了,然后就是ckeditor上传了
ckeditor与普通上传的区别在与ckeditor上传时会用get方式传递一个CKEditorFuncNum的值,这个值不仅要用它判断是否属于ckeditor上传的,还得用它在ckeditor中插入上传的图片(flash)。
具体代码如下:
<>

	public function ckeditorRun($class='ckeditor'){
		try{
			if(empty($_GET['CKEditorFuncNum']))throw new Exception('错误的功能调用请求!');
			$path = $this->run('upload',$class);
			$path = str_replace('\\','/',$path);
			//这个script语句的作用就是在ckeditor中插入上传的文件
			echo 	'<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction('.
				$_GET['CKEditorFuncNum'].', \''.
				$path.'\', \''.
				'上传成功!'.'\');</script>';
		}catch(Exception $e){
			//当发生错误时用弹窗方式提醒用户
			echo '<script type="text/javascript">alert("'.$e->getMessage().'")</script>';
		}
	}

在这里我又添加了一个允许文件类别ckeditor,也就是在image类别中添加一个swf。
至此 一个功能齐全的文件上传类就写好了,赶快去测试一下吧~~
希望大家经常来关注的我博客XD~
代码下载

分类: php 标签: