刚看了中移动研究院院长黄晓庆的一个视频,算是稍微对云计算有个初步的概念了
Google的
BigTable 结构化海量数据管理
MapReduce 并行数据处理
Chubby 分布式锁服务
GFS 分布式文件系统
BORG 集群管理和调度系统
相应的开源解决方案
HDFS(GFS)
MapReduce、PIG(SAWZALL)
Hbase(BigTable)
Zookeeper(Chubby)
刚看了中移动研究院院长黄晓庆的一个视频,算是稍微对云计算有个初步的概念了
Google的
BigTable 结构化海量数据管理
MapReduce 并行数据处理
Chubby 分布式锁服务
GFS 分布式文件系统
BORG 集群管理和调度系统
相应的开源解决方案
HDFS(GFS)
MapReduce、PIG(SAWZALL)
Hbase(BigTable)
Zookeeper(Chubby)
>netstat -aon|findstr “8000” 得到进程号
>tasklist|findstr “xxxxx” OVER
把WordPress升到了最新版本,换了个theme,感觉清爽了一些。。。
自 PHP 5.1.0 起(此版本日期时间函数被重写了),如果时区不合法则每个对日期时间函数的调用都会产生一条 E_NOTICE 级别的错误信息,如果使用系统设定或 TZ 环境变量则还会产生 E_STRICT 级别的信息。
不像Unix/Linux平台还有一个 TZ 环境变量可以用,在WIN32平台下, 不设置时区,那么时间都是按照格林威治标准时间走的。比如“北京时间上午10点”,在你的脚本里就会认为是凌晨2点(减8小时)。
PHP的默认时区,可以通过修改php.ini的 date.timezon 值来设定。
date_default_timezone_get()函数可以得到你的脚本中所有日期时间函数所使用的默认时区。如果它返回的是UTC,则说明没有被设置一个默认的时区。除了修改php.ini文件,我们还可以在脚本中用 date_default_timezone_set()函数来进行默认时区的设置。
下面这些,都是设置为北京时间(GMT+8)的
date_default_timezone_set(‘Asia/Chongqing’); //重庆
date_default_timezone_set(‘Asia/Chungking’); //重庆
date_default_timezone_set(‘Asia/Harbin’);//哈尔滨
date_default_timezone_set(‘Asia/Hong_Kong’);//香港
date_default_timezone_set(‘Asia/Macau’);//澳门
date_default_timezone_set(‘Asia/Macao’);//澳门
date_default_timezone_set(‘Asia/Shanghai’);//上海
date_default_timezone_set(‘Asia/Taipei’);//台北
date_default_timezone_set(‘Asia/Urumqi’);//乌鲁木齐
参见:date_default_timezone_get() date_default_timezone_set PHP所支持时区列表
发送X-Accel-Redirect头实现直接定位成静态下载
$root_path = ‘/web/www’; //网站根目录
$file_path = ‘/data/t.txt’; //文件路径//发送下载的头信息
header(“Content-type: application/x-octet-stream”);
header(“Accept-Ranges: bytes”);
header(“Content-Disposition: attachment; filename=”.basename($file_path));
header(“Content-Length: “.filesize($root_path.$file_path));//发送文件定位,是相对网站目录的路径
header(“X-Accel-Redirect: “.$file_path);
TEXT 是 64k
MEDIUMTEXT 是 2G
LONGTEXT 是 4G .
一流戏子,二流推
三流王八,四流龟
五流剃头,六擦背
七娼八盗,九吹灰
在linux下面用pg_dump导出一个数据库到文本文件,在windows下面如果用这个命令导入的话,会因为字符集的问题在某些地方失败:
psql my_db < backup.sql
但是,如果通过这个命令导入,就会成功,并且数据是完全正确的:
psql -d my_db -f backup.sql
上面的两种导入方式,在linux下面都是没有问题的。至于为什么windows下出问题,完全不知道……
在床上翻来覆去好半天,就是睡不着。决定起来把刚下完的《红河》给看喽。
对这片子,之前一点不了解,完全因为verycd的推荐,看完之后,完全的惊艳!
真的很久没有看到拍的这么美这么纯得电影了,清澈的红河、翠盈盈的越南小调、湿热暧昧的空气、还有水到渠成的爱情。章家瑞真是把云南拍绝了。现在感觉张静初这娃还真是挺漂亮挺可爱的,她刻画这类所谓的问题女性,貌似是越来越专业了。
就像片子里瑶族的婚俗一样,用牙齿狠狠地咬上心上人的手指就表明爱上了对方,我被《红河》咬到手指了:)
强烈感觉这片子还有张静初会弄到点什么奖。
真困了,睡觉!
所谓简单,是因为ProFTPD的一些复杂功能都没有写进来,比如用户磁盘空间配额、上传下载速率限制等。
所谓轻量级,是因为配这个平台,是为了公司内部使用,用户有限。更复杂的配置,日后再说吧:)
网上的很多关于ProFTPD搭载数据库进行管理的文章,大多用的都是MySQL(搜baidu的结果)和PostgreSQL(搜google的结果),可是单单为了一个公司内部使用的这么一个小平台,使用这么两个重量级的数据库,是在有点杀鸡用牛刀的感觉。对于我的需求,Sqlite这个轻量级的嵌入式数据库,显然是最最合适的选择。在网上跑来跑去找了1个多小时,也没有一篇像样的配置文档,甚至连ProFTPD的官方doc里,提起sqlite也是只言片语。没办法,只有自己对着英文的Howto,自己摸索了。
1,Install Sqlite3 and ProFTPD
下载安装Sqlite3最新版:http://www.sqlite.org/
#tar -zxf sqlite-amalgamation-3.6.13.tar.gz
#cd sqlite-3.6.13/
#./configure
#make
#make install
下载安装ProFTPD最新版:http://www.proftpd.org/
ProFTPD对于数据库的支持,并不是通过linux的PAM方式来实现的
而是内置了模块,这点曾经让我走了很多弯路,TMD居然没有文章提及这点。使用sqlite模块:
#tar -zxf proftpd-1.3.2.tar.gz
#cd proftpd-1.3.2
#./configure –prefix=/usr/local/proftpd –with-modules=mod_sql:mod_sql_sqlite
#make
#make install
2,配置ProFTPD
编辑/usr/local/proftpd/etc/proftpd.conf文件,加入下面列出来的这一大坨参数。
这里只说说跟Sqlite3有关的参数,其他比较有用的参数配置说明,满世界都是。完整配置文件放在最后。
其实除了SQLBackend和SQLConnectInfo两个参数之外,剩下的一些参数在配置其他数据库时也会用到
我在配置这些数据库相关参数的时候,走了很多弯路,查了很多文档,记下来也给自己脑子备个份。
#首先来说这俩,定义proftpd以什么身份来运行,跟apache里的是一个意思
#我是习惯了apache定义为www用户和www组,配置proftpd也就这样了
#以什么身份运行,我个人感觉没啥特别意义,关键是虚拟用户对实体用户的映射!
User www
Group www
#sqlite2跟3差别较大,各软件平台对其支持也是分开来的,比如PHP
#这里就是指明,使用sqlite3
SQLBackend sqlite3
#数据库文件的绝对路径,一定要绝对
SQLConnectInfo /home/www/ftpd.db
#数据库内虚拟用户的密码认证方式
#我认为Backend的意思就是数据库自己的认证方式,比如mysql的password方案
#该方案可以指定多种,使用空格隔开,按照先后,依次try
#下面这句的意思就是“先用sqlite自己的认证方式(我用的明文,其他解决方案没研究)
#如果不行,再使用crypt(3)的方案”,实际配置文件里我只要了一个Backend
SQLAuthTypes Backend Crypt
#自定义存放用户信息的表和字段
#下面这句的意思就是
#users表 里的 字段:用户名 密码 系统映射uid 系统映射gid 主目录 shell路径
#切记:表和字段的名字可以随便起(跟实际数据库中的表和字段相对应),但顺序不可乱
#按照我对英文howto的理解,前4个字段名是必须要设置的,后两个如果自己用不上
#必须使用NULL来填补,这样mod_sql模块就不会去检索这俩字段了
SQLUserInfo users user_name user_passwd uid gid home_dir NULL
#如果主目录字段名设置为NULL,那么这里这个就必须要定义
#这个是用来定义那些没有“主目录定义的用户”的主目录,有点绕口:P
#SQLDefaultHomedir “/tmp”
#这个参数设置为off的意思,是不让proftpd去检查该FTP用户映射到系统里的用户的shell
#就是说,有没有shell,我都让你登陆。特别是上面的字段,将shell路径这个设置为了NULL
RequireValidShell off
#组信息,没啥意思,就这么放着吧,意思跟上面那个SQLUserInfo一样
#表名 组名 组id 成员
SQLGroupInfo groups group_name gid members
#这里是用户身份认证的程度,只验证user,连带group啥的都验证
#图简单,我这里只验证user这一层
SQLAuthenticate users
#设置ProFTPD允许登陆的最小UID,这个UID是映射到linux系统内实际用户的UID,小于这个值将不允许登陆
#这个值如果不设置,系统默认的是999,在很多国内的文章里,uid和gid都是设置5000多
#所以即使不管这个值,也不会有问题,可是如果你跟我一样,映射用户的uid和gid都小于999了,就要注意它了
#我的www用户的uid和gid都是504,在这里,卡了我有一个多小时,TNND
SQLMinUserUID 500
#这两个的意思,是所有未在数据库中定义uid和gid的用户的默认uid及gid
SQLDefaultUID 504
SQLDefaultGID 504
我的完整的proftpd.conf文件
3,建立数据库及用户表
#sqlite3 /home/www/ftpd.db 数据库就建好了,简单吧~
其实理论上,这个文件的路径,是放在哪里都可以的。我配置完这个平台后,又用php写了一个简单的管理平台
为了方便我的apache运行用户www读写数据库,就放在了www的主目录下。。
在sqlite3环境下,用下面这个语句建立数据表
CREATE TABLE “users” (“user_name” varchar(20), “user_passwd” varchar(50), “uid” int(11) NOT NULL DEFAULT 504, “gid” int(11) NOT NULL DEFAULT 504, “home_dir” varchar(200), “shell” varchar(200))
下面创建一个新用户:
INSERT INTO “users” VALUES(‘test’,’test’,504,504,’/home/www/ftp/test’,NULL);
表的uid和gid的默认值都设置为了504,即www用户在系统内的uid和gid的值。新添加字段时,这两个字段我也设置了。www用户和组在我系统内是早就建好的,uid和gid分别都是504。通过这两个字段的值,就完成了proftpd内的虚拟用户跟系统内实体用户的映射。具体到自己,请根据实际情况来设置这两个字段的默认值,及新添加记录的值。
4,最后
到现在,整个配置应该是完成了,使用这个命令来启动ProFTPD:
/usr/local/proftpd/sbin/proftpd -c /usr/local/proftpd/etc/proftpd.conf &
参考资料:
ProFTPD Howto:SQL and mod_sql:
http://www.proftpd.org/docs/howto/SQL.html
ProFTPD module mod_sql:
http://www.proftpd.org/docs/contrib/mod_sql.html
ProFTPD module mod_sql_sqlite:
http://www.proftpd.org/docs/contrib/mod_sql_sqlite.html
Configuration Directive List:
http://www.proftpd.org/docs/directives/linked/by-name.html
Simple MySQL Authentication:
http://www.proftpd.org/docs/configs/mysql_simple.conf