2005年05月31日

  1994年12月8日,新疆克拉玛依市教育局为欢迎上级“义务教育与扫盲评估验收团”的25位官员,组织全市最漂亮的、能歌善舞的中小学生796人在友谊馆剧场举办“专场文艺演出”。

  演出正在进行的时候,舞台纱幕因太靠近光柱灯被烤燃,继而引起火灾。当燃烧的火团不断地从舞台上空掉下时,克拉玛依市教育局的官员走出来说道:“学生们不要动,让领导先走!

  学生们很听话,都坐在自己的位子上不动;等上级政府与教育局所有在场的25个官员都从离火灾发生最近的第—排撤退到最后一排的出口处之后,教师才开始组织学生撤离,但此时电灯已全灭,大火已蔓延到剧场四周,而其余安全门均被封闭,唯一的逃生之路已被熊熊火焰堵住。至此,学生们撤离火灾现场的最佳时机最关键时刻已被错过了!

  796名来自全市15所中小学的师生全部陷入火海之中,323人死亡,132人烧伤,轻则毁容,重则终生残废。而在场的克拉玛依市副处级以上官员有20多人,火灾发生时他们的位置离火源最近,离逃生门最远,事后证实,无—人伤亡。

  当年的官方媒体报道均承认,有克拉玛依市教委的官员在火灾现场命令“学生们不要动!让领导先走!”也有报道文章指出:本来可以避免这么多的学生伤亡,只因“让领导先走”而耽误了!所以“让领导先走”大大扩大了学生的伤亡人数!

  方天录,新疆石油管理局副局长,当时在场的最职位官员,不指挥打开所有安全门和组织学生疏散,只顾自己逃生(法院判决书语)。火灾发生时,他只被火星烧焦了几绺白发,驱车直奔医院检查身体。调查发现,他去医院途中经过消防队,但没有下车报案。以玩忽职守罪仅判处有期徒刑5年 。

  赵兰秀,克拉玛依市副市长,在火灾发生时仅是叫—个人走出去报警,也不指挥打开所有安全门和组织学生疏散,只顾自己逃生。被判处有期徒刑4年6个月。

  唐舰,原克拉玛依市教委副主任。同样不指挥打开所有安全门和组织学生疏散,只顾自己逃生,以玩忽职守罪判处有期徒刑5年。

  况丽,原新疆石油管理局教育培训中心党委副书记。同样不指挥打开所有安全门和组织学生疏,只顾自己逃生。她凭借著对友谊馆地形的熟悉钻进了厕所,把原本可容纳三十人以上的厕所反锁,任凭孩子们在外声嘶力竭地哭喊呼救。事后在厕所门外发现一百多具学生尸体。她告诉记者,“自己的逃生知识很丰富”。以玩忽职守罪判处有期徒刑4年。

  朱明龙,市教委普教科科长。同样不指挥打开所有安全门和组织学生疏散,“只顾自己逃生”。判处有期徒刑4年。

  赵征,市教委普教科副科长。仅组织舞台北侧的部分学生演员撤离,忽略了舞台南侧的学生演员,也犯玩忽职守罪,免予刑事处分。

  阿不来提·卡德尔,友谊馆副主任。犯有重大责任事故罪,被判处有期徒刑6年。

  原友谊馆主任兼指导员蔡兆锋,虽发生火灾时出差在外,但平时对友谊馆存在的不安全隐患不加整改,对火灾的发生负有直接责任,判处5年徒刑。

  友谊馆的服务人员陈惠君、努斯拉提·玉素甫江两人,未在场内巡回检查,火灾发生后不履行应尽的职责,未打开安全门,反而逃出馆外;陈惠君判处6年徒刑。努斯拉提·玉素甫江刑罚不详。

  克拉玛依市当时在全国媒体上宣布:将在火灾现场友谊馆建立火灾纪念馆,以纪念那些死去的孩子,并警示后人。如今,烧毁的友谊馆已拆除,取而代之的是人民广场,而非纪念馆。

  在此次火灾中,唯一让人怀念与尊敬的是那些以自己的血肉之躯掩护孩子的教师。这次火灾中有40多位老师在场,有36位遇难,绝大部分为掩护学生而殉职。

  克市第八小学三年二班的老师孟翠芬是一位己经办了退休又返聘的白发苍苍的老人,人们在扑灭大火后发现她时,孟老师的头和背已被烧焦。但是,她的两只臂肘下一边护着一名学生,其中一名学生的心脏还在微弱跳动。

  第八小学校长张莉和市一中副校长倪振性,都是几次把学生推出火海,自己最后被大火烧得面目全非。然而他们的遗体都是张开双臂,还像母鸡护着小鸡一样,在墙边围护着几位死去的学生。

  “市第七中学的周健老师,在大火袭来时,正用力撑着往下落的卷帘门。”他只要向前跨一步,就可以脱离火海,可是他—直坚持着站在原地用肩膀撑起铁门,活着的学生看见他最后三次用一只手往外推出三位学生,最后倒了下去。

  第一小学的大队辅导员李平老师,戴着眼镜,瘦弱的身影好几次冲进火场救出十几名学生,直到再也无法靠近猛烈的火焰时,这位老师才一下子身体一软靠到墙上,她大喊了一声:“我的孩子还没出来!”接着就昏倒在地。

  90年前,泰坦尼克号在太西洋遇上海难,由于船上人多而救生艇不足,许多富翁和贵族人士并没有利用各种优势“先走”,而是纷纷主动让出逃生机会,坚持让妇女儿童先上救生艇,一位富翁为此留下遗言:“我决不会让一个妇女儿童先我而死,我要死得象一个男子汉!”

  学生们不要动!让领导先走……

改写自《领导先走,让它们先走进地狱吧!》

  这次再向大家介绍一个与上次截然不同办法。上次的思路是先判断magic_quotes_gpc是on还是off,再跟据情况处理好反斜杠的问题,最后使用户提交的数据原封不动的保存进数据库,这次的思路是,无论如何也加入反斜杠,接着把数据连同反斜杠一起存进MySQL数据库,在提取出来时再去掉。请看代码:

<?php
//如果从表单提交一个变量$_POST['message'],内容为 Tom’s book

//这此加入连接MySQL数据库的代码(略)

//不作判断地在敏感字符前加反斜杠
$_POST['message'] = addslashes($_POST['message'
]);

//把$_POST['message']保存到数据库
//如果magic_quotes_gpc=On,那么存进数据库以后就变成 Tom\’s book
//如果magic_quotes_gpc=Off,那么存进数据库以后就是 Tom’s book
$sql = "INSERT INTO `msg_table` (`id`, `message`) VALUE(‘1′, ‘$_POST[message]‘);"
;
$query = mysql_query($sql
);
?>

  好了,如果现在的magic_quotes_gpc=Off的话就最好不过了,因为保存的数据和用户提交的一模一样。

  但如果magic_quotes_gpc=On的话,由于加了两次反斜杠,所以保存后会发现所有的敏感字符前多了一个反斜杠。不用急,我们在输出的时候只要使用stripslashes()函数处理一下就行了,而且也是不用判断的。请看代码:

<?php
//这此加入连接MySQL数据库的代码(略)

//从数据库中提取刚才那条数据
$sql = "SELECT * FROM `msg_table` WHERE `id` = ‘1′;"
;
$query = mysql_query($sql
);
$result = mysql_fetch_array($query
);

//去除所有敏感字符前的反斜杠
$result['message'] = stripslashes($result['message'
]);

//输出的结果为 Tom’s book
echo $result['message'
];
?>

  stripslashes()函数可以去除敏感字符前的反斜杠。当然,没有反斜杠的就不会处理了,也就是magic_quotes_gpc=Off的时候。

  当有多个变量在处理的时候,你可以用foreach语句来写一个函数,可参考本文的第一辑最后那个函数。

  小弟又不知天高地厚地献丑了,如有不足请各位前辈多批评指教,不甚感激。

  在过去的150年里,日本曾有过两次令世界震惊的崛起经历。1868年,日本实行明治维新,开始在政治、经济、文教、外交等方面进行一系列重大的改革,日本国力逐渐强大,与此同时,日本开始走上对外扩张的道路,与西方列强争夺东亚资源控制权。1894年,日本发动甲午战争,打败了中国北洋舰队,1904年又进行了日俄战争,全歼俄国太平洋舰队和波罗的海舰队,成为进入世界列强之列的第一个亚洲国家。

  第二次世界大战后,战败的日本满目疮痍,一片废墟,很多人都认为它将从此一蹶不振。但日本仅用了20年时间就实现了经济上的崛起。1965年,日本国民生产总值超过英国,1967年超过法国,1968年又超过联邦德国,成为仅次于美国的世界第二经济强国,并被视为下一个超级大国。

  追溯日本近代史上两次奇迹般崛起的经历,我们可以发现中国和日本这两个曾经十分相似的国家在过去的150年,所走过的完全不同的发展轨迹。

  在实行明治维新以前,日本比中国还落后几十年。同大多数亚洲国家一样,那时的日本不仅封闭、传统、落后,且被西方资本主义列强以坚船利炮叩开了锁国达200余年之久的国门。在内忧外患的双重压力下,以福泽谕吉为代表的日本近代思想家,反思包括中国在内的东方国家封建主义相继没落,提出“脱亚入欧”的发展国策。

  福泽谕吉认为,如果想使日本文明进步,就必须以欧洲文明为目标,确定它为一切事物的标准。日本必须摆脱以中国为中心的朝贡体系,进而使日本成为欧洲型的民族国家。

  福泽谕吉很像那一时期中国“戊戌变法”的精神领袖康有为。19世纪以福泽谕吉为代表的日本近代思想家,推动和促成了“明治维新”,也奠定了日本实行一个多世纪的脱亚入欧国策的思想理论基础。

  中国社会科学院社会学所副所长李培林在接受《新民周刊》采访时说,日本的“明治维新”与中国的“戊戌变法”在时间、变法取向、主导思想上都非常相像。“明治维新”发生在19世纪70年代初叶,“戊戌变法”发生在19世纪90年代末叶,其先导运动“洋务运动”则发生在19世纪60年代初叶。“明治维新”的那些改革措施,其实远不如康有为在《上清帝第六书》中的制度设计周密。

  “福泽谕吉的‘脱亚入欧’论就是倡导全面西化,这种取向,实际上也是戊戌变法派精神领袖们骨子里的东西。但中国与日本不同,中国的封建制度根基太深太久,这种制度已经发展到它自身极精致和极完备的地步。”

  1895年,中日在签署《马关条约》时,日方代表伊藤博文问中方代表李鸿章,为何他10年前就听说的中国正在进行的改革却没有任何效果。李鸿章回答说,中国的事情受传统束缚太深,他根本无法按愿望行事。

  而在1894年,也就是甲午海战前夕,海军提督丁汝昌收到了他昔日同学——日本海军将军伊藤的信,信中,这位即将的对手这样写道:“您很清楚,30年前,日本帝国曾处于何等的困境之中,我们是如何努力摆脱眼前的困难的,我们抛弃了旧体制,接受了新体制。贵国也应该接受这种新的体制。如果如此,一切都会好起来,否则只有垮台。”

  金熙德认为,由于大清帝国没有看清当时的世界大局,没有适应世界潮流,没有认识到西方的近代文明是一个很强大的文明,中国建立在农耕文明基础上的封建帝国根本就打不过人家的坚船利炮,而日本适应了那个时代的潮流,率先走上资本主义道路,所以,中国落后了。

  明治维新,成为中日后来发展路线的分水岭。

  这是100年前发生的故事。

  拉脱维娜是亚马孙河畔的一个农场。那里有300多个农业工人,在辛勤地栽种着咖啡、甘蔗和玉米。

  一个宁静的夏日早晨,场长西蒙站在他办公室的窗前,一边凝望着窗外的绿树红花,一边细心地倾听着。正在这时,有人敲了几下门。进来的是一位态度和蔼的警察。

  “我通知您,根据邻近地区来的消息,有一个长约10公里、宽约5公里的褐色蚁群,正对准你们这个农庄开过来,最迟在3天后就可到达。它们所过之处变成了一片死亡的世界。因此,您要马上组织大家疏散到河那边去,迟了可就来不及啦!”送走警察以后,西蒙马上把各个耕作队的队长叫来,要他们立即组织工人家属们撤离。同时叫每个工人也做好撤离的准备,要随时能够撤走。

  队长们走后,西蒙烦恼地在办公室里来回踱步。他清楚地记得,40年前他6岁的时候,在离这里200英里的故乡也发生过一次蚁患。在西蒙当时幼小的心灵里,深深地印下了一幅蚁群过后的图景——家没有了,庄稼没有了,甚至连荒草、树皮也没有了,在地平线之内几乎看不到一点绿色,看不到一只动物,连老鼠也没有,四处是死一般的寂静……比战后的凄凉景象还要可怕得多!他烦恼,他心痛。上午就这样在忧虑中过去了。西蒙正要离开办公室,那几位队长却又同时回来了。他们对西蒙说:“工人们不愿离开,要留下来和蚂蚁战斗。要消灭它们,保卫这片美丽富饶的土地。”“哎,真的吗?!”西蒙突然被工人们的战斗精神所激励。

  “和那些可怕的蚂蚁斗斗吧!我就不信500个人还斗不过那些蚂蚁!”下午,西蒙和各耕作队的队长们拟定了详细的作战方案。首先,妇女和儿童仍然得在今天之内撤到河那边,牲畜也得立即撤走。其次,马上加深加宽环绕居住区并和亚马孙河相连通的各排灌沟,检查所有的抽水机和各个控制闸,保证都能随时投入使用,并立即在泵房和各控制闸建立24小时的值班制度。最后,为了防备万一,又以办公室为中心,立即建立一条和储油库相连通的、周长400米、深1米、宽2米的耐火材料沟,准备在必要时发动火攻,把蚂蚁挡住。这一切,都得在24小时内完成。

  准备就绪,已经整整过去了一天的时间。旷野里充满了蚁群迫近的先兆。大群大群的各种鸟儿惊慌地呜叫着,从森林那边飞出来,一直向亚马孙河对岸飞去。有些鸟儿因为惊慌,也因为疲劳,飞着飞着,就从空中跌到地上,有些就跌进亚马孙河的急流中。兽群也惊慌地乱窜着,凶猛的美洲豹和成群的猴子一起狂跑。奇怪的是凶猛的豹子一点也没有捕食野猴的念头,它们都惊慌地乱窜着,从森林里跑出来,散向了四面八方。在亚马孙河上,各种动物正在泅渡,鳄鱼和森蚺(美洲大蟒蛇)游在相距不远的河面上。这两个死敌现在却丝毫也没有斗意,只是在急流中用尽全力向对岸游去……

  第三天早晨,太阳出来了。天空是那么的蔚蓝,各种野花仍然散发出它们那浓郁的芳香。可是,没有鸟语,也没有蝉鸣,四周寂静得怕人。

  突然,瞭望哨发出了警报。人们都涌到居住区的边缘,站在注满了水的排灌沟旁,望着突然出现在森林边缘的挪动着的大片黄褐色。

  一只什么野兽突然从森林里拼命地跑出来。近了,才看清是一只怀了孕的母豹子,浑身上下已经盖满了蚂蚁。大概它因为怀孕而懒得过河吧,今天可就劫数难逃了!它跑到离排灌沟只有30米的地方倒了下来,在蚂蚁的啃咬下挣扎了几下就不动了。不一会儿,大群的蚂蚁赶到了,那只看来有60公斤重的豹子很快就只剩下了一堆白骨。

  “天哪,才四分半钟!”不知道哪个细心的人喊了起来。人们的脸上都充满了惊惧和紧张的神情,连最勇敢坚强的人身上都起了鸡皮疙瘩。

  1小时以后,蚁群走近了。人们清楚地看到那是一只只有半个拇指大的褐蚁,空气中充满了它们移动的沙沙声。当蚁群走到注满了水的排灌沟前,就迅速向两边散开,簋快,它们就以沟为界把居住区包围了起来。排灌沟外是望不到尽头的蚁群,排灌沟内的居住区就成了“褐色海洋”中孤悬的“半岛”。由于居住区的一面是亚马孙河,所以人们虽然面对着使万物死亡的“褐色魔鬼”,但心理仍然是有恃无恐——仍然有一条退路。

  隔着只有20米宽的排灌沟,人和蚁对峙着。没有人叫喊,也没有蚂蚁移动的沙沙声。这是战前的寂静。但没过很久,蚁群开始进攻了。它们突然一只叠一只,叠起了近2米高的蚁墙,然后上面的蚁就像要跳过沟似的,居高临下地跳下去。但它们都落在沟中的水里,在水里挣扎着,失去了方向,大批大批地被抽水机抽上来的强力水流冲进亚马孙河。蚁群就一直这样地进攻着,但它们所得到的只是死亡。

  到快近中午的时候,蚁群停止了进攻,也不叠蚁墙了。又过了一会儿,它们竟然全部后退,一直退到来处的那片森林里。

  太阳刚刚往西偏了一点儿,蚁群又卷土重来,而且拖来了无数片的树叶。这些蚂蚁竟然懂得把树叶当作“登陆艇”来使用。一些蚂蚁爬上树叶,另一些蚂蚁就把树叶拖下水,让树叶在水中漂离。一时间,无数的“登陆艇”向居住区这边“开”过来。尽管强力的水流最后都把这些“登陆艇”掀沉,但这些大褐蚁的顽强精神,却使每一个和它们战斗的人不寒而栗!西蒙在紧张地指挥着战斗,看到成堆成堆的蚂蚁被水冲走,他感到很惬意。晚上,西蒙把人们分成三班,在关键地方装了强电池灯,彻夜提防着。而蚁群在晚上却停止了进攻,西蒙趁此命令停开抽水机,井关上一些排水闸,让排水沟里保持一定的水量。

  热带的晚风是很猛烈的,尤其是在亚马孙河边。天快亮时,给抽水机供电的电线竟然给风刮断。人们还来不及检查到故障,蚁群又开始进攻了!西蒙命令抽水,和打开排水闸。最先涌下河沟来的几批蚂蚁随着排水又被带走但由于抽水机断电,水抽不上来,一段排水沟竟然迅速干涸了。蚁群就像决堤的洪水一样,从这段沟涌过来。守卫的人被逼后退。当西蒙得到消息时,已经是无法补救了!人们迅速退到耐火材料沟后面,马上把汽油灌进沟里并点起火来。蚁群跟着涌过来,但又被大火吓退了。

  这时,天已大亮。人们猛然看到,他们是隔着火沟被蚂蚁四面包围起来了。储存的汽油尽管颇为可观,但要这样连续燃烧,按最节约的方法计算,顶多也只够用两天的时间。而天知道蚂蚁要在什么时候才移向别处呢!想到这里,每一个人都开始认识到必须撤退。但是现在为时已晚,居住区和亚马孙河已经被蚁群所隔断!看着火墙外随时准备冲过来的蚁群,那只仅在四分半钟就给啃成一堆白骨的母豹的形象,又在人们的头脑中清楚地浮现。个别软弱的人开始嚎啕大哭,而更多的人则是麻木地看着燃烧着的火焰!在这紧急的关头,西蒙想到应当把阻挡着河水的大水闸打开,让亚马孙河的水像决堤似的灌进来。虽然这样做会使拉脱维娜农场变成一片汪洋,但那无情的蚁群也将被无情的大水淹死。300多条生命就能得以保存下来。但控制大水闸的开关却在火墙外300米的地方,现在已置于蚁群的包围之下。谁要出去扳动开关,谁就得冒死亡的危险!“为了消灭蚁群,救活大家,我应该冒这个风险!”西蒙想道。

  于是他下令把储藏室里的小木船和橡皮艇都拿出来,并把放水淹地的决定告诉大家。一时间,愿意为集体而牺牲自己的工人纷纷站出来,要求让自己去完成这危险的任务。西蒙很受感动,但还是决定自己去冒险。因为他是场长,牺牲自己挽救大家的责任首先应该落在他的身上。与此同时,他在极力要求承担责任的人们中,挑选了3个身强力壮的小伙子,要他们在必要时挺身而出。随后,他们4个人就迅速地自己“武装”起来,里面穿上紧身衣裤,外面再穿上密封服装,戴上头盔和手套,穿上几重袜子,再穿上长统靴子,然后把所有的衣、裤的开口都紧紧地扎住。

  一切准备妥当后,人们用土在火焰中压出一个小缺口。西蒙正要冲出去,却被两个“后备人员”抓住了胳臂。踉着,另一个后备,“飞毛腿”劳斯就迅速冲出了火墙,在“褐色海洋”中飞奔向前。西蒙挣扎着,但他的手臂却被紧紧地抓住,两个小伙子深情地对他说:“西蒙大叔,让劳斯去吧,他跑得比你快,也比你灵活。”人们都紧张地看着劳斯。只见他迅速地奔跑着,只用了两分半钟就跑到了控制大水闸的开关那里。虽然是两分半钟,但蚂蚁已经盖满他全身了。他稍微喘了口气,就开始扳动控制枢纽,直至把闸门全都打开。一小时后,这一带就会变成一处泽国了。劳斯迅速地往回跑,跑了一半距离时,却猛然感觉到有一只蚂蚁不知怎地已经钻过了防护衣,并隔着内衣狠咬。劳斯知道现在对那只蚂蚁是没有办法的了,只有迅速跑回人群里才能消灭它。还剩下30米了,但蚂蚁却咬穿了几重内衣,并狠狠地往他背上咬了一口。痛彻心肺的疼痛使劳斯眼一花,几乎摔倒。他用最大的毅力坚持着,刚一定神,蚂蚁的第二下、第三下打击使他晕倒在地。就在这时,西蒙和另外两个穿上防护衣的小伙子同时冲出去,把劳斯救了回来。

  勇敢的劳斯被救醒了。他和伙伴们坐在小木船上,看着淹在大水里的千千万万只蚂蚁,感慨地说道:“我们终于战胜了它们,虽然代价巨大,但毕竟是胜利了!”

  这种蚂蚁,就是著名的南美洲食肉蚁。每过一段时间繁殖成片,浩浩荡荡,势不可挡。然而,人类终是有办法整治它的。

    SQL injection问题在ASP上可是闹得沸沸扬扬当然还有不少国内外著名的PHP程序“遇难”。至于SQL injection的详情,网上的文章太多了,在此就不作介绍。

    如果你网站空间的php.ini文件里的magic_quotes_gpc设成了off,那么PHP就不会在敏感字符前加上反斜杠(\),由于表单提交的内容可能含有敏感字符,如单引号(’),就导致了SQL injection的漏洞。在这种情况下,我们可以用addslashes()来解决问题,它会自动在敏感字符前添加反斜杠。

    但是,上面的方法只适用于magic_quotes_gpc=Off的情况。作为一个开发者,你不知道每个用户的magic_quotes_gpc是On还是Off,如果把全部的数据都用上addslashes(),那不是“滥杀无辜”了?假如magic_quotes_gpc=On,并且又用了addslashes()函数,那让我们来看看:

<?php
//如果从表单提交一个变量$_POST['message'],内容为 Tom’s book

//这此加入连接MySQL数据库的代码,自己写吧

//在$_POST['message']的敏感字符前加上反斜杠
$_POST['message'] = addslashes($_POST['message'
]);

//由于magic_quotes_gpc=On,所以又一次在敏感字符前加反斜杠
$sql = "INSERT INTO msg_table VALUE(‘$_POST[message]‘);"
;

//发送请求,把内容保存到数据库内
$query = mysql_query($sql
);

//如果你再从数据库内提取这个记录并输出,就会看到 Tom\’s book
?>

这样的话,在magic_quotes_gpc=On的环境里,所有输入的单引号(’)都会变成(\’)……
    其实我们可以用get_magic_quotes_gpc()函数轻易地解决这个问题。当magic_quotes_gpc=On时,该函数返回TRUE;当magic_quotes_gpc=Off时,返回FALSE。至此,肯定已经有不少人意识到:问题已经解决。请看代码:

<?php
//如果magic_quotes_gpc=Off,那就为提单提交的$_POST['message']里的敏感字符加反斜杠
//magic_quotes_gpc=On的情况下,则不加
if (!get_magic_quotes_gpc
()) {
    
$_POST['message'] = addslashes($_POST['message'
]);
} else {}

?>

其实说到这里,问题已经解决。下面再说一个小技巧。
    有时表单提交的变量不止一个,可能有十几个,几十个。那么一次一次地复制/粘帖addslashes(),是否麻烦了一点?由于从表单或URL获取的数据都是以数组形式出现的,如$_POST、$_GET)那就自定义一个可以“横扫千军”的函数:

<?php
function quotes($content
)
{
    
//如果magic_quotes_gpc=Off,那么就开始处理
    
if (!get_magic_quotes_gpc
()) {
        
//判断$content是否为数组
        
if (is_array($content
)) {
            
//如果$content是数组,那么就处理它的每一个单无
            
foreach ($content as $key=>$value
) {
                
$content[$key] = addslashes($value
);
            }
        } else {
            
//如果$content不是数组,那么就仅处理一次
            
addslashes($content
);
        }
    } else {
        
//如果magic_quotes_gpc=On,那么就不处理
    
}
    
//返回$content
    
return $content
;
}
?>

小弟才疏学浅,如果不对请各位前辈多多指点。

2005年05月30日

  译者注:这篇文章给人的感觉不是很专业,因此非常适合初学者。文章的原名叫《An Overview of Arrays in PHP》,采用了“意译”的方法进行翻译,若有不足之处望高手指点。

  PHP手册中把“数组”这个概念定义为一个有序图。可是我个人并不喜欢这个观点,我觉得数组应该是变量的一个集合体。在很多编程语言里,数组的每一个变量都要是同一种类型。但PHP中不是这样!这是因为PHP有“类型戏法”这个东西。在这里我就不详述类型戏法了,但基本上你不需要声明每个变量的类型。在PHP中变量的值就直接决定了变量的类型。

  那怎么把值分配到数组的变量当中呢?方法和通常的变量的赋值方法相同,不过给数组的变量赋值,你还需要指定你要把值赋予数组中哪个单元。有一点要注意的就是,数组默认是从零开始计算的。请看以下代码:

<?php
$array
[0] = 3
;
$array[1] = 6
;
$array[2] = 2
;
?>

  PHP中有一个很cool的特性,那就是可以使用联合数组。联合数组使你可以为数组的索引命名。因此,你可以用$array['something']和$array['anotherthing']来代替繁杂的$array[0]和$array[1]。

  那么,为什么我要用数组而不用正规的变量呢?想象一下这种情况:你要处理用户的名字。你要把其中的5位用户的名字输出,使用正规的变量,你可以这样做:

<?php
echo "$customer1<br />n"
;
echo
"$customer2<br />n";

echo
"$customer3<br />n";
echo
"$customer4<br />n"
;
echo
"$customer5<br />n"
;
?>

  又长又臭。试想一下,如果你有100个用户,或者1000个的话,那会怎样?有了数组,你就可以使用foreach循环语句了。foreach循环的工作就是,遍历一个数组中的所有单元。假如现在你有一个叫$customer的数组,里面包含了所有用户的名字。请看以下代码:

<?php
foreach($customer as $value
) {
   echo
"$value<br />n"
;
}
?>

  现在就算你有100个或者1000个用户,你都无需改变代码。用了数组以后,工作变得简单多了。不是吗?

  以上所说的,都是简单的数组。下面来说说多维数组。多维数组是什么?让我们通过一个例子来说明:假如你现在要卖书,而且你想把这些书的名字和价钱等信息存放到一个数组内,那么你只需要创建一个数组,使这个数组的每一个单元里都有一个数组。不明白什么意思吗?不要紧,请看例子:

<?php
$books
= array(
    
0=>array(‘name’=‘一本书’,‘price’=>9.99
),
    
1=>array(‘name’=‘另一本书’,‘price’=>17.99
));
?>

  你有两种办法访问这个二维数组:

<?php
echo $books[0]['name'
];
echo
$books[1]['price'
];
$books[0]['price'] = 12.99
;

foreach(
$books as $onebook
) {
   echo
$onebook['name'] . ‘ 的价钱是’. $onebook['price'] . "<br />n"
;
}
?>

  这是一篇PHP的数组简介,我希望对你有一点用处。如果你想了解更多,请看PHP指南,那里面有很多可以对数组进行处理的函数。

  有两种方式使PHP工作于Windows下的Apache1.3.x。一种是CGI方式(php.exe),另一种是使用Apache模块DLL。不管哪种方式都需要停止Apache,编辑httpd.conf来配置Apache以加入PHP支持。

  值得在这里指出现在Windows下的SAPI模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。

  尽管有几种不同方法在Apache下配置PHP,但是对新手来说还是非常简单易用的。有关更多的httpd.conf配置指令请参考Apache文档。

  如果你按照手工安装步骤一节中的说明把PHP解压缩到了c:\php\目录下,那么需要加入以下三行到Apache配置文件中以CGI方式安装:

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php .phtml
Action application/x-httpd-php "/php/php.exe"

  注意上面的第二行在原来的httpd.conf中就有的,不过被注释了。还有记住用你自己放置PHP的路径替换c:/php/。

  如果你想在Apache中用模块方式使用PHP,确认把php4ts.dll拷贝到windows/system(Windows 9x/Me)或者winnt/system32(Windows NT/2000)或者windows/system32(Windows XP)目录下,覆盖原来的文件。然后在Apache配置文件httpd.conf中加入以下两行:
  1. 用自己喜爱的编辑器打开 httpd.conf,找到 LoadModule 指令的部分,在其列表的最后部分加上如下一行,对 PHP 4:LoadModule php4_module c:/php/sapi/php4apache.dll,对 PHP 5:LoadModule php5_module "c:/php/sapi/php5apache.dll"。
  2. 你可能发现在用 Windows Installer 安装了 Apache 之后需要为用 AddModule 指令定义 mod_php4.c。尤其是在定义了 ClearModuleList 指令时格外重要,向下滚动几行可以找到该指令。你将会看到 AddModule 项目的列表,在列表的最后加上这一行:AddModule mod_php4.c,对于 PHP 5 则为 AddModule mod_php5.c。
  3. 搜索类似 # AddType allows you to tweak mime.types 的短语,你会找到一些 AddType 的项目,并且在列表的最后有这一行: AddType application/x-httpd-php .php。你可以在这里选择任何想用 PHP 解析的后缀。.php 只是所建议的一个。甚至可以包括 .html,也可以加上 .php3 来向下兼容。

  修改了配置文件之后记住重新启动Apache,例如如果你的Apache是作为Windows的服务安装的,NET STOP APACHE 后面接上 NET START APACHE。或者用你通常使用的快捷方式。

  有两种方式使用源程序语法彩色显示特色,但是取决于你的安装方法。如果你配置了Apache的 SAPI 模块方式使用 PHP,那么在 httpd.conf 中(和插入 AddType application/x-httpd-php .php 是同一个位置)加入下面一行就可以使用本特色:AddType application/x-httpd-php-source .phps。

  如果你用CGI方式使用PHP,那你需要用show_source()函数。建立一个PHP文件,加入以下代码:

<?php show_source ("original_php_script.php"); ?>

  用你想要显示源代码的文件名替换掉 original_php_script.php。

  注: 在Windows-Apache组合中,所有路径中的反斜线例如 "c:\directory\file.ext" 都必须转换成斜线,如 "c:/directory/file.ext"。

  有时我们用PHP从MySQL提取一个结果集的时候,需要知道这个结果集一共有多少个单元。这时就可以使用mysql_num_rows()函数来完成这个工作。请看例子:

<?php
//连接MySQL服务器并选择数据库
$link = mysql_connect("localhost", "mysql_user", "mysql_password"
);
mysql_select_db("database", $link
);
//发送请求,返回结果集
$result = mysql_query("SELECT * FROM table1", $link
);
//返回结果集的单元数目
$num_rows = mysql_num_rows($result
);
//输出
echo "一共有 $num_rows 个结果"
;
?>

  动态网页最核心的特点就是能动态响应客户端请求。那么表单就成为了动态网页与客户端交互的最重要的途径之一。这次就给各位新手说说如何用PHP来处理提单提交过来的数据。

  首先你要熟悉一下HTML语言中创建表单的相关标签,然后创建一个表单,把表单的action属性设为你的php文件所在的位置、method属性设为post。加入一个文本框,把文本框的name属性设为string吧。别忘了加上提交按钮哦。创建完成后的表单代码大概是这样:

<form aciton="demo.php" method="post">
  <input type="text" name="string">
  <input type="submit" name="submit" value="提 交">
</form>

  当表单提效到demo.php时,就会得到一个$string变量了。但是不能直接用$string,因为这是表单通过post提交上来的变量,所以应该用$_POST['string']来调用它。请看demo.php的代码:

<?php
//输出表单提交的文字
echo $_POST['string'
];
?>

  好,现在你已学会处理表单提交的数据了。接着教你一个小技巧:把表单和PHP代码结合在同一个文件内,要用户提交表单后才开始处理表单的数据。请看代码:

<form aciton="demo.php" method="post">
  <input type="text" name="string">
  <input type="submit" name="submit" value="提 交">
</form>
<?php
//如果用户的点击“提交”按钮,那么就开始处理
if ($_POST['submit'
]) {
    echo
$_POST['string'
];
} else {}
//否则就不做任何事情
?>

  以上的两个例子都是把表单提交的数据输出而已,在实际运用中还可以对这些数据做无数种的处理,如保存进文件、保存到数据库等等。

  MySQL的列类型主要有三种:数字、字串和日期。


数字列类型

  数字列类型用于储存各种数字数据,如价格、年龄或者数量。数字列类型主要分为两种:整数型和浮点型。所有的数字列类型都允许有两个选项:UNSIGNED和ZEROFILL。选择UNSIGNED的列不允许有负数,选择了ZEROFILL的列会为数值添加零。下面是MySQL中可用的数字列类型

  • TINYINT——一个微小的整数,支持 -128到127(SIGNED),0到255(UNSIGNED),需要1个字节存储
  • BIT——同TINYINT(1)
  • BOOL——同TINYINT(1)
  • SMALLINT——一个小整数,支持 -32768到32767(SIGNED),0到65535(UNSIGNED),需要2个字节存储 MEDIUMINT——一个中等整数,支持 -8388608到8388607(SIGNED),0到16777215(UNSIGNED),需要3个字节存储
  • INT——一个整数,支持 -2147493648到2147493647(SIGNED),0到4294967295(UNSIGNED),需要4个字节存储
  • INTEGER——同INT
  • BIGINT——一个大整数,支持 -9223372036854775808到9223372036854775807(SIGNED),0到18446744073709551615(UNSIGNED),需要8个字节存储
  • FLOAT(precision)——一个浮点数。precision<=24用于单精度浮点数;precision在25和53之间,用于又精度浮点数。FLOAT(X)与相诮的FLOAT和DOUBLE类型有差相同的范围,但是没有定义显示尺寸和小数位数。在MySQL3.23之前,这不是一个真的浮点值,且总是有两位小数。MySQL中的所有计算都用双精度,所以这会带来一些意想不到的问题。
  • FLOAT——一个小的菜单精度浮点数。支持 -3.402823466E+38到-1.175494351E-38,0和1.175494351E-38 to 3.402823466E+38,需要4个字节存储。如果是UNSIGNED,正数的范围保持不变,但负数是不允许的。
  • DOUBLE——一个双精度浮点数。支持 -1.7976931348623157E+308到-2.2250738585072014E-308,0和2.2250738585072014E-308到1.7976931348623157E+308。如果是FLOAT,UNSIGNED不会改变正数范围,但负数是不允许的。
  • DOUBLE PRECISION——同DOUBLE
  • REAL——同DOUBLE
  • DECIMAL——将一个数像字符串那样存储,每个字符占一个字节
  • DEC——同DECIMAL
  • NUMERIC——同DECIMAL


字符串列类型

  字符串列类型用于存储任何类型的字符数据,如名字、地址或者报纸文章。下面是MySQL中可用的字符串列类型

  • CHAR——字符。固定长度的字串,在右边补齐空格,达到指定的长度。支持从0到155个字符。搜索值时,后缀的空格将被删除。
  • VARCHAR——可变长的字符。一个可变长度的字串,其中的后缀空格在存储值时被删除。支持从0到255字符
  • TINYBLOB——微小的二进制对象。支持255个字符。需要长度+1字节的存储。与TINYTEXT一样,只不过搜索时是区分大小写的。
  • TINYTEXT——支持255个字符。要求长度+1字节的存储。与TINYBLOB一样,只不过搜索时会忽略大小写。
  • BLOB——二进制对象。支持65535个字符。需要长度+2字节的存储。
  • TEXT——支持65535个字符。要求长度+2字节的存储。
  • MEDIUMBLOB——中等大小的二进制对象。支持16777215个字符。需要长度+3字节的存储。
  • MEDIUMTEXT——支持16777215个字符。需要长度+3字节的存储
  • LONGBLOB——大的的二进制对象。支持4294967295个字符。需要长度+4字节的存储。
  • LONGTEXT——支持4294967295个字符。需要长度+4字节的存储。
  • ENUM——枚举。只能有一个指定的值,即NULL或"",最大有65535个值
  • SET——一个集合。可以有0到64个值,均来自于指定清单


日期和时间列类型

  日期和时间列类型用于处理时间数据,可以存储当日的时间或出生日期这样的数据。格式的规定:Y表示年、M(前M)表示月、D表示日、H表示小时、M(后M)表示分钟、S表示秒。下面是MySQL中可用的日期和时间列类型

  • DATETIME——格式:’YYYY-MM-DD HH:MM:SS’,范围:’1000-01-01 00:00:00′到’9999-12-31 23:59:59′
  • DATE——格式:’YYYY-MM-DD’,范围:’1000-01-01′到’9999-12-31′
  • TIMESTAMP——格式:’YYYYMMDDHHMMSS’、’YYMMDDHHMMSS’、’YYYYMMDD’、’YYMMDD’,范围:’1970-01-01 00:00:00′到’2037-01-01 00:00:00′
  • TIME——格式:’HH:MM:SS’
  • YEAR——格式:’YYYY,范围:’1901′到’2155′

  这里就只作一个简单的介绍,详请可查看MySQL官方网站的相关页面(http://www.mysql.com/doc/en/Column_types.html)。