linux 编译LAMP

1 httpd:

tar xzf httpd-2.2.22.tar.gz
tar xzf mysql-5.1.62.tar.gz
tar xzf php-5.2.17.tar.gz
tar xzf phpMyAdmin-3.4.10.2-all-languages.tar.gz

装apache2.2.22

cd /tmp/httpd-2.2.22
./configure --prefix=/usr/local/apache --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-headers=shared --enable-rewrite=shared --enable-static-support
make
make install

编译参数解释:
–prefix=/usr/local/apache:指定安装目录
–with-included-apr:在编译时强制使用当前源代码中绑定的APR版本
–enable-so:允许运行时加载DSO模块
–enable-deflate=shared:将deflate模块编译为DSO
–enable-expires=shared:将expires模块编译为DSO
–enable-headers=shared:将headers模块编译为DSO
–enable-rewrite=shared:将rewrite模块编译为DSO
–enable-static-support:使用静态连接(默认为动态连接)编译所有二进制支持程序
更详细的编译参数解释:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/configure.html

cp build/rpm/httpd.init /etc/init.d/httpd //使用init脚本管理httpd
chmod 755 /etc/init.d/httpd //增加执行权限
chkconfig --add httpd //添加httpd到服务项
chkconfig httpd on //设置开机启动
ln -fs /usr/local/apache/ /etc/httpd
ln -fs /usr/local/apache/bin/httpd /usr/sbin/httpd
ln -fs /usr/local/apache/bin/apachectl /usr/sbin/apachectl
ln -fs /usr/local/apache/logs /var/log/httpd //设置软链接以适应init脚本

安装mysql5.1.62

groupadd mysql
useradd -g mysql mysql
cd /tmp/mysql-5.1.62
./configure --prefix=/usr/local/mysql/ --localstatedir=/usr/local/mysql/data --without-debug --with-unix-socket-path=/tmp/mysql.sock --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --with-extra-charsets=gbk,gb2312,utf8 --with-pthread
make
make install

编译参数解释:
–prefix=/usr/local/mysql/:指定安装位置
–localstatedir=/usr/local/mysql/data:指定数据库文件位置
–without-debug:禁用调用模式
–with-unix-socket-path=/tmp/mysql.sock:指定sock文件位置
–with-client-ldflags=-all-static:
–with-mysqld-ldflags=-all-static:以纯静态方式编译服务端和客户端
–enable-assembler:使用一些字符函数的汇编版本
–with-extra-charsets=gbk,gb2312,utf8 :gbk,gb2312,utf8字符支持
–with-pthread:强制使用pthread库(posix线程库)
更多编译参数请执行./configure –help命令查看。

cp support-files/my-medium.cnf /etc/my.cnf //复制配置文件夹my.cnf
/usr/local/mysql/bin/mysql_install_db --user=mysql //初始化数据库
chown -R root.mysql /usr/local/mysql
chown -R mysql /usr/local/mysql/data
cp /tmp/mysql-5.1.62/support-files/mysql.server /etc/rc.d/init.d/mysqld //init启动脚本
chown root.root /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
ln -s /usr/local/mysql/bin/mysql /usr/bin
ln -s /usr/local/mysql/bin/mysqladmin /usr/bin
service mysqld start
/usr/local/mysql/bin/mysqladmin -u root password '新密码' //设置root密码

安装PHP5.2.17
在编译php之前,先要解决两个问题:centos 6上libmcrypt的安装和可能有些系统找不到libiconv导致的错误。
1、centos 6官方源已经没有libmcrypt的rpm包,我们这里选择编译安装,当然你也可以导入第三方源安装(centos 5略过此步)。
下载源码:

cd /tmp
wget http://superb-dca2.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
wget http://superb-dca2.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
wget http://superb-sea2.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
tar xzf libmcrypt-2.5.8.tar.gz
tar xzf mhash-0.9.9.9.tar.gz
tar xzf mcrypt-2.6.8.tar.gz
//安装libmcrypt
cd /tmp/libmcrypt-2.5.8
./configure --prefix=/usr
make && make install
//安装libmcrypt
cd /tmp/mhash-0.9.9.9
./configure --prefix=/usr
make && make install
//安装mcrypt
/sbin/ldconfig //搜索出可共享的动态链接库
cd /tmp/mcrypt-2.6.8
./configure
make && make install

2、解决可能出现的libiconv错误。

cd /tmp
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar xzf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make && make install

开始安装php-5.2.17:

cd /tmp/php-5.2.17
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --enable-bcmath --with-bz2 --with-curl --enable-ftp --with-gd --enable-gd-native-ttf --with-gettext --with-mhash --enable-mbstring --with-mcrypt --enable-soap --enable-zip --with-iconv=/usr/local/libiconv --with-mysql=/usr/local/mysql --without-pear
make
make install

编译参数解释:
–prefix=/usr/local/php:设置安装路径
–with-apxs2=/usr/local/apache/bin/apxs:编译共享的 Apache 2.0 模块
–with-config-file-path=/etc:指定配置文件php.ini地址
–with-config-file-scan-dir=/etc/php.d:指定额外的ini文件目录
–with-openssl:编译OpenSSL支持
–with-zlib:编译zlib支持
–enable-bcmath:启用BC风格精度数学函数
–with-bz2:BZip2支持
–with-curl:CRUL支持
–enable-ftp:FTP支持
–with-gd:GD支持
–enable-gd-native-ttf:启用TrueType字符串函数
–with-gettext:启用GNU gettext支持
–with-mhash:mhash支持
–enable-mbstring:启用支持多字节字符串
–with-mcrypt:编译mcrypt加密支持
–enable-soap:SOAP支持
–enable-zip:启用zip 读/写支持
–with-iconv=/usr/local/libiconv:iconv支持
–with-mysql=/usr/local/mysql:启用mysql支持
–without-pear:不安装PEAR
更多编译参数解释参考http://www.php.net/manual/zh/configure.about.php或者./configure –help查看。

cp php.ini-dist /usr/local/php/etc/php.ini //复制配置文件php.ini

在/etc/httpd/conf/httpd.conf文件中加入php文件类型解析:

Addtype application/x-httpd-php .php

重启httpd:

service httpd restart

安装ZendOptimizer-3.3.9(可选)
ZendOptimizer的作用是分析,优化由Zend 编译器加密产生的代码的程序,对不是Zend编译器加密过的程序,没有必要安装这个。
64位:http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz
32位:http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

cd /tmp
wget http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
tar xzf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
cd /tmp/ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp/
mkdir -p /usr/local/Zend/lib/
cp ZendOptimizer.so /usr/local/Zend/lib

加载zendoptimizer,建立/etc/php.d/zend.ini文件,加入如下代码加载:

[zend]
zend_optimizer.optimization_level=15
zend_extension=/usr/local/Zend/lib/ZendOptimizer.so

重启httpd生效:

62062d82jw1e30jo3pkp0j
我没有很刻意的去想念你,因为我知道,遇到了就应该感恩,路过了就需要释怀。我只是在很多很多的小瞬间,想起你。比如一部电影,一首歌,一句歌词,一条马路和无数个闭上眼睛的瞬间。—— 张小娴

芦山地震十大不实谣言

20130426130055
4月20日8点02分,四川省雅安市芦山县(北纬30.3,东经103.0)发生7.0级地震。就在灾区人民众志成城抗震救灾之际,有人却制造出不实信息。人民网特别整理并澄清部分谣言,希望网友在碎片化的信息时代能辩明真伪,拒绝以讹传讹。

1.“寻找徐敬回家”

谣言:雅安地震发生后,微博上流传着这样一条信息:帮忙转发一下,一个叫徐敬的女孩,21岁,请速回水城县人民医院,妈妈伤的很严重,想见她最后一面,爸爸号码:15193383486,爱心接力,好人有好报。父母的爱,只有自己子女懂。女孩,快回去!

辟谣:网友@霍富国 指出,此消息为假消息。这个手机号码曾出现在网页多个不同的求助信息里面。此号码还曾出现在《“微博爱心接力”原是大忽悠王均豪任志强随手@推波助澜”》。同时,@江宁公安在线:雅安没有水城县,水城县在贵州,留的号码是甘肃平凉的,在去年12月就被媒体揭露高额吸费电话。

2.磁铁预报地震

谣言:将一块磁铁用绳子挂在高处,下面正对地板砖或一个铁盆,磁铁上粘上一块大铁块,地震前地球磁场发生剧烈变化,磁铁就会失去磁性,铁块掉下来,发出响声,可提前10分钟至几十秒预测地震。

辟谣:地震产生的磁场变化极其微小,根本不可能对磁铁的磁化状态产生什么影响。

3.一条搜救犬反复被“牺牲”

谣言:雅安地震一只军用搜救犬废墟里发现一位大爷,它就钻进里面,结果塌陷了,当战士们将其挖出来的时候,发现军犬的内脏已经砸烂,这只狗狗在这几天里已经发现了35名幸存者,有32名获救者…

辟谣:4月21日,@江宁公安在线:搜救犬很忙,请勿消费它!下面这条搜救犬,在2008年汶川地震时救了32人,牺牲了。后来它又在2010年的玉树地震中救了32人,又“牺牲”了。再后来的2011年的温州动车事故,它又救了32人,再次“牺牲”。这次的地震,它再次救了32人,再次“牺牲”。

4.“地震解密之祖”预测地震

谣言:此次地震有人称预测成功,其预测是这样的@地震解密之祖:3月19日夜晚,一场龙卷风袭击了湖南省永州市道县。看着吧;在它消失的西北方阴天处;大约30天左右,会有一个不低于7级的地震;不见不散。龙卷风消失了但没有停止;在地表以下依然高速自转。

辟谣:网友统计,此网友曾预测了1500来次,准了5次。

5. “雅安又一救灾军车坠崖”

谣言:有微博消息称,4月21日下午,从丹巴县出征“4-20”芦山地震救援的一台挖掘机,在行进至夹金山宝兴县境内坠入300米深的悬崖,驾驶员不幸遇难。

辟谣:经成都军区核实,此信息为虚假消息。真实背景为:21日13时30分,13集团军某团租用地方吊车对昨日翻入河中运输车实施作业,于16时30分将其吊至平板车并组织加固运返营区。这一过程被人偷拍,人为剪裁制作成虚假新闻后上传互联网。

6.多张雅安地震现场图

谣言:雅安7.0级地震后,网上流传着一组地震当地的图片。图片中,不少房屋倒成一片废墟,不少伤者倒在地上。

辟谣:经查,此信息不实,这些图片实际为2008年512特大地震灾害时的现场图片。

7.红会称“不捐500万不能进灾区”为捏造

谣言:21日下午5点11分,IBTimes中文网报道《台湾红十字会:大陆要求先援助五百万人民币》再次引发公众对中国红十字总会的指责。

辟谣:4月21日晚8时,中国红十字会社会监督委员会发布对此事的调查结果,称“不捐500万就不能进灾区”说法纯属捏造。同时,据台湾红十字会官方网站消息,针对昨日有媒体报道大陆红十字组织要求台湾红十字会先援助500万人民币再进入灾区一事,台湾红十字会严正声明此为错误报道,绝无此事。

8.地震局内部消息成都9.2级地震

谣言:自称地震局内部人员的网民称“4月20日芦山7级只是前震,成都将于4月22日发生9.2级地震。”

辟谣:公安局已经抓获造谣者,并依据相关法规,对散布谣言扰乱公共秩序的该名造谣者行政拘留。

9. “地震期间大吃大喝”不实

谣言:4月22日,中国某卫视及其微博上发布消息称,“中坝村村民地震期间大吃大喝。中坝村有个舒正山,他的慷慨馈赠,让同村乡亲们在遭受雅安地震重创之时,还“大鱼大肉像过节”。

辟谣:人民网记者通过实地探查,发现“大鱼大肉像过节”为不实消息,事实为村民舒正山将乔迁新居办喜宴的猪肉分给本村村民,帮助村民自救。

10.航空公司坐地起价

谣言:有人发布信息:【无耻的航空公司】现在是旅游淡季,原本广州、北京飞成都的机票全部打折,然而,七级地震发生几小时后,航空公司坐地起价,即时变为全价票。现在飞成都的乘客,多是救援、志愿者、医护、记者、伤亡者亲人。各大小航空公司,你们对这些乘客真下得了手啊!

辟谣:经查,航空公司坐地起价信息不实,地震发生后,未故意趁机变更票价。

PHP生成随机字符串

生成随机字符串在做项目中经常用到,像注册登录验证码等。经常在QQ群里有朋友问怎么生成一个随机字符串,下面分享一个。
函数功能:

1、生成指定长度的随机字符串

2、灵活选择生成的随机字符串的复杂度

/**
  +----------------------------------------------------------
 * 生成随机字符串
  +----------------------------------------------------------
 * @param int       $length  要生成的随机字符串长度
 * @param string    $type    随机码类型:0,数字+大写字母;1,数字;2,小写字母;3,大写字母;4,特殊字符;-1,数字+大小写字母+特殊字符
  +----------------------------------------------------------
 * @return string
  +----------------------------------------------------------
 */
function randCode($length = 5, $type = 0) {
    $arr = array(1 => "0123456789", 2 => "abcdefghijklmnopqrstuvwxyz", 3 => "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4 => "~@#$%^&*(){}[]|");
    if ($type == 0) {
        array_pop($arr);
        $string = implode(",", $arr);
    } else if ($type == "-1") {
        $string = implode(",", $arr);
    } else {
        $string = $arr[$type];
    }
    $count = strlen($string) - 1;
    for ($i = 0; $i < $length; $i++) {
        $str[$i] = $string[rand(0, $count)];
        $code .= $str[$i];
    }
    return $code;
}

默认生成的随机字符串长度为5,生成的字符串包含:数字+大写字母
原文链接 http://blog.51edm.org/post/103

人类脚趾长度分三种 “希腊脚”专出美女

8f3b086590945e838
    人类的脚趾依据长度,可以分为埃及脚、罗马脚、希腊脚这3种!

人类的脚趾依据长度可以分为埃及脚、罗马脚、希腊脚这3种,其中第2根脚趾长度比其他4根脚趾长的就属“希腊脚”,拥有这种脚型的人通常四肢修长,几乎都出美女。

埃及脚(Egyptian Foot)脚型最普遍,大拇趾比其他4根脚趾长,台湾男性几乎都是这种脚型,而这种脚型比较适合穿斜头鞋;希腊脚(Greek Foot)则是第2根脚趾比其他还长,适合穿尖头鞋,通常拥有这种脚型的人四肢修长。

过去有研究发现,拥有希腊脚的女性不一定是美女,但美女绝大多数都符合第2根脚趾较长的特征。有趣的是,纽约自由女神、希腊诸神雕像都是这种脚型,连气质名模林志玲、艺人杨谨华都有希腊脚。

最后罗马脚(Roman foot)也称为正方型,这种脚型5根脚趾长度都差不多,没有特别凸出的脚趾,看起来就像正方形一样,罗马脚在选鞋时,可以挑选圆头、方头鞋,而拥有罗马脚的人较罕见,他们特别适合跳芭蕾舞。

我们说好的 – 张靓颖

我们说好的 - 张靓颖

好吗 一句话就哽住了喉
城市 当背景的海市蜃楼
我们 像分隔成一整个宇宙
再见 都化作乌有
我们说好决不放开相互牵的手
可现实说过有爱还不够
走到分岔的路口
你向左我向右
我们都倔强地不曾回头
我们说好就算分开一样做朋友
时间说我们从此不可能再问候
人群中再次邂逅
你变得那么瘦
我还是沦陷在你的眼眸
ゞ從鑫認識 编辑 QQ:61986910
搜啦EP全球首发
好吗 一句话就哽住了喉
城市 当背景的海市蜃楼
我们 像分隔成一整个宇宙
再见 都化作乌有
我们说好决不放开相互牵的手
可现实说过有爱还不够
走到分岔的路口
你向左我向右
我们都倔强地不曾回头
我们说好就算分开一样做朋友
时间说我们从此不可能再问候
人群中再次邂逅
你变得那么瘦
我还是沦陷在你的眼眸
yiya yiya~~~
我们说好一起老去 看细水常流
却将会成为别人的某某
又到分岔的路口
你向左我向右
我们都强忍着不曾回头
我们说好下个永恒里面再碰头
爱情会活在当时光节节败退后
下一次如果邂逅
你别再那么瘦
我想一直沦陷在你的眼眸
这是无可救药爱情的荒谬

波士顿爆炸案中的中国遇难者

波士顿爆炸案的第三位死者是一位在波士顿大学就读的研究生。据称,因为出国深造接受高等教育一直是这位女孩的梦想,她才选择了到美国留学。

ba25d58cd5b0ca377

edc9cd8140ae4d077

50c444d108e71521b

这位女孩名叫吕令子,出事后她一直下落不明,直到最近她的遗体被父亲认出,才确认吕令子已经死亡。

吕令子生前在波士顿大学攻读数理统计学,她和朋友周丹玲一同加入了波士顿马拉松大赛。周丹玲从武汉大学毕业后前往波士顿大学主修精算学,现也身受重伤。

据最新官方统计,183人在周一的恐怖袭击中受伤。今天数百人齐聚一堂,举行烛光守夜活动为生者祈福,向死者致敬。

联邦调查局昨天发表声明表示有大量的侦探警员正夜以继日的搜查取证,但遗憾的是至今为止嫌疑犯依旧逍遥法外。

与此同时,吕令子最好的朋友李璐荃(音译)听到她死亡的消息后感到非常震惊。她说吕令子是她最好的朋友,她来自沈阳。令子的喜好很广,热爱烹饪、喜欢健身而且擅长钢琴。

李璐荃告诉《每日邮报》的记者:“美国一直以顶尖的教育系统和优良的研究机遇著称,而接受更好的教育一直是她梦寐以求的事,所以她在去年8月份的时候来美国到了美国深造。”

在本周二的早些时候,波士顿大学和家属协商后表示不愿公开死者姓名。但今天沈阳晚报在它官方微博上公开了吕令子的名字。

1a0b361aa4d26a50e

另一位受害者周丹玲现已从昏迷中苏醒,神志清醒,虽不能说话但可以通过纸笔交流。报道称周丹玲现在情况乐观,病情稳定

中国雅虎邮箱8月19日停止服务 将整体迁移至阿里云

re_516f2b72175f3

雅虎邮箱将迁至阿里云

 今日中国雅虎邮箱用户收到官方邮件称,雅虎邮箱将于8月19日停止服务,用户数据将暂时由阿里云邮箱接管,这也意味着互联网最老牌的雅虎邮箱会退出中国市场。

邮件称,用户可以注册阿里云邮箱来保存中国雅虎邮箱中的历史邮件,直到2014年12月31日。雅虎同时提示,所有的操作需要在8月19日之前完成,如果没有进行上述操作,原中国雅虎邮箱中的邮件及联系人都将被删除且无法恢复。

中国雅虎在邮件最后称,其邮箱的停服将不会影响用户继续试用雅虎其他产品及服务。

雅虎全球平台主管近期曾表示,雅虎将于4月份关闭多款产品,包括黑莓应用、雅虎Avatars和Message Boards等。

2005年8月,阿里巴巴集团与雅虎达成了合作协议,雅虎以10亿美元现金以及当时还称雅虎中国(现在称中国雅虎)的资产,置换阿里巴巴集团约40%的普通股,成为阿里巴巴集团的大股东。

不过,此后的中国雅虎发展并不如意,在被冷落数年后,近期又传出阿里巴巴集团计划在5月将“中国雅虎”归还给美国雅虎的消息。不过阿里回应称,目前双方相关协议正在执行过程之中,没有什么需要公布的调整。

jQuery与JSON在Drupal开发中的使用

为了要对代理商所在地进行选择,我需要做一个省和城市的级联选择功能。具体的功能是在省份的下拉列表(设为provinceList)中选中一个省 的时候,要在城市的下拉列表(设为cityList)中列出选中省份所对应的城市来。比如在省份列表中选择”广东省”后,城市列表应该是”肇庆市”、”广 州市”、”佛山市”……等。要实现这个功能,一般的WEB开发的方法有两个:

1.刷新网页方式
1)写一段provinceList的onchange事件处理脚本。
2)在provinceList的onchange事件中,把用户选择的省份提交到服务器。
3)服务器根据用户提交的省份参数。查找对应的城市列表,填充到cityList中去,重新呈现网页回送给客户端。
4)整个网页被再次程序给客户端。客户端在cityList中显示对应省份的城市列表。

这种方式的缺点非常明显:
首先,每次省份选择的改变都要服务器去做筛选参数,查找数据,填充数据,呈现网页等一通工作。开发和维护难度高。
其次,用户每改变一次省份选择,网页都要重新下载,客户体验不佳。

2.不刷新网页方式
1)网页第一次呈现的时候就把所有的省份和省市及其关联性的数据以网页脚本形式下载到客户端。
2)在provinceList的onchange事件中,脚本根据用户选择的省份以及在上一点提到的网页脚本中指定的省份与城市关系来填充cityList数据。
这种方式也有缺点:
在服务器端查询相关数据并生成客户端脚本来呈现和表示省份和城市及其关联性较为复杂。而在客户端,provinceList的onchange事件处理脚本也较为复杂。

而使用jQuery+JSON作为工具,在drupal平台上开发这个功能就简单得多了。
1.首先是开发一块网页客户端javascript代码(假设provinceList对应的下拉列表ID为search-province,而cityList对应的下拉列表控件ID为search-city),以下列出该块代码及其注释:

<?php
--------------------------------------------------------------------------
//document就绪后执行该代码块
$(function() {
//search-province的onchange事件处理代码
$("#search-province").change(function() {
//对请求网址'/ojcustom/getcitys/选中省份id'后drupal返回的JSON数据data进行处理的代码块
var getCitys = function (data) {
// 解析drupal返回的JSON数据data为javascript对象result,该对象包含了drupal返回的对应城市数组(array)
var result = Drupal.parseJson(data);
//填充城市列表之前,先清空现有的列表数据
$("#search-city").empty();
//针对返回的每一城市数据,一一填充到search-city的列表项中去
for(key in result) $("#search-city").append("");
}//getCitys()
//向网址'/ojcustom/getcitys/选中省份id '发送请求,请求参数为null,指定返回JSON数据的处理函数为getCitys
$.get('/ojcustom/getcitys/'+$("#search-province")[0].value, null,getCitys);
//结束事件处理代码
return
false;
});//change()
});//$(function())
---------------------------------------------------------------------------
 
?>

2.其次是在服务器端开发一块用来处理向网址’/ojcustom/getcitys/选中省份id ‘提交的请求的PHP代码:

<?php
---------------------------------------------------------------------------
//本函数通过用户在网址中提交的选中省份ID来获取相应城市列表,并且把列表数据转换成JSON数据返回给客户端
function get_citys_by_province_id(){
//用户提交网址中的第三个参数就是用户选中的省份ID
if (!is_numeric(arg(2))) exit;
//查找数据库得出相应城市列表
$result =db_query('select cid,name from {city} where pid='.arg(2));
//一一取出城市数据,并且把它们记录在一个数组(array)$options中
$options = array();
while ($term = db_fetch_object($result)) {
$choice = new stdClass();
$choice = array('value'=>$term->cid,'text' =>$term->name);
$options[] = $choice;
}
$options[] = array('value'=>'','text' =>'请选择');
//使用drupal内置的函数把城市数组转换成JSON数据,并且把它输出到客户端
print drupal_to_js($options);
//客户端输出结束
exit;
}
---------------------------------------------------------------------------
?>

这样,就完整完成了整个功能。
上面两段代码非常简单明了、易于控制,这个实现方法既没有第一个实现方法中的刷新网页问题和服务器端成本问 题,也没有第二种实现方法中的脚本生成难度和事件处理脚本难度的问题。通过本例子我们可以看出jQuery+JSON可以大大简化WEB开发的复杂度,而 druapl由于内置了jQuery与JSON,结合导drupal系统的其他优点,更加使得WEB开发变得可控和高效起来

ThinkPHP分组模式下使用RBAC的方法

ThinkPHP分组模式下使用RBAC的方法
如果不使用分组模式thinkphp RBAC 默认值是常量APP_NAME,而分组模式下则用常量GROUP_NAME获得当前分组名称.
关键代码:

RBAC::AccessDecision(GROUP_NAME)

以下是CommonAction.class.php的完整代码:

<?php
 
/*
 * BaseAction.class.php
 * Created on: 2013-4-14 16:01:04 
 * Author: Outsider <ioutsiderla@gmail.com>
 * http://outsiderla.me 
 */
 
class CommonAction extends Action {
 
    function _initialize() {
        import('@.ORG.Util.Cookie');
        if (C('USER_AUTH_ON') && !in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE')))) {
            import('@.ORG.Util.RBAC');
            if (!RBAC::AccessDecision(GROUP_NAME)) {
                if (!$_SESSION[C('USER_AUTH_KEY')]) {
                    $this->assign('jumpUrl', __APP__ . C('USER_AUTH_GATEWAY'));
                    $this->error('没有登录!请重新登录');
                }
                if (C('RBAC_ERROR_PAGE')) {
                    $this->assign('jumpUrl', __APP__ . C('RBAC_ERROR_PAGE'));
                    $this->error('对不起,没有权限');
                } else {
                    if (C('GUEST_AUTH_ON')) {
                        $this->assign('jumpUrl', PHP_FILE . C('USER_AUTH_GATEWAY'));
                    }
                    $this->error(L('_VALID_ACCESS_'));
                }
            }
        }
    }
 
}