切换多个 br 成为一个br preg_replace(“/(<br\s*\/?>\s*)+/”, “<br/>”, $c)
-
常用php函数
-
MYSQL常用命令
1.查看MYSQL 数据库编码SHOW VARIABLES LIKE ‘character_set_%’;mysql> show variables like ‘character_set_%’;其中,set_connection是连接编码,latin1是瑞典编码。2.导入.TXT文件与导出*.TXTload data infile ‘TXT文件的完整路径’ into table 表名;linux:TXT文件的完整路径=‘/tmp/aaa.txt’windowns:TXT文件的完整路径=’e:\\aaa.txt’.txt的文件用Tab隔离表中有auto_increment属性的字段,在.txt文件中使用nullselect * from table_name into outfile ‘ path/filename.txt ‘ ;3.新增用户一:登录进入MySQL数据库后:(1).use mysql;(2).INSERT INTO `user` VALUES (‘localhost’, ‘newuser’, PASSWORD( ‘newpassword’ ) , ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ”, ”, ”, ”, ‘0’, ‘0’, ‘0’, ‘0’);(3).FLUSH PRIVILEGES ;提示:PASSWORD函数的运用需要注意版本,参考函数的调用:OLD_PASSWORD注意:第三点是插入数据成功后,让他生效的。二:用 grant 分配grant all on * . * to admin @localhost identified by ‘ admin ‘ ;说明: admin 用户(密码为admin)分配所有权限(除grant),对所有数据库和所有表.grant all on db_name . * to chenlb@ % identified by ‘ chenlbpassword ‘ ;说明: chenlb用户有所有权限,只对 db_name的所有表.grant select , insert on db_name .tb_name to clb @chenlb .com identified by ” ;说明: clb 用户(密码为空,只有 chenlb.com 主机才有效,如果改为%.chenlb.com就对所有后缀为chenlb.com的主机都有效)只对 db_name 中的 tb_name 表中有 select,insert 权限.权限可以加上(delete,update,drop,create ……)。4.重命名表ALTER TABLE `table_name` RENAME `new_table_neme` ;5.改用户密码use mysql;update user set password = password(“new_pass”) where user = “root”;flush privileges ;mysqladmin – u username – p pw password newpassword6.设远程用户use mysql;update user set Host = ‘ % ‘ where user = ‘ user_name ‘ ;flush privileges ;或为特定的IP注意:否则,登录时出错–Access denied for user ‘clb’@’localhost’ (using password: YES)7.mysql导出\入.sql文件导出:mysqldump – u user_name – p [ your_password ] db_nmae > path\ file_name .sql如果[your_password]缺省,然后提示输入密码:有密码则输入,否则直接回车导入:mysql – u user – p [ your_password ] db_name < path\filename.sql同上。在linux上导出如果用mysqldump导出出现了乱码也没有关系,可以运行iconv来转换一下iconv -c -f UTF-8 -t GB2312 库文件名 > 新的gb2312的库文件名8.设置密码的几种方法//不行1.mysqladmin -u user_name password new_password9.符合条件的从那里开始,在多少以内.select * from talbe_name limit 0 , 30 ;说明:从符合条件的第1条开始,读出30条,如果不够30条,取最大.10.添加字段ALTER TABLE `table_name` ADD `colum_name` VARCHAR ( 11 ) NOT NULL AFTER `colum_name` ;11.函数select coalesce(null,3,null)返回列表的第一个非NULL值select greatest(3,5)返回列表的最大值select least(2,0)返回列表的最小值12.加入单引号INSERT INTO `userinfo` (`id`, `username`, `lastlogin`)VALUES (NULL, ”’陈”’, ‘2006-07-28’);说明用两个单引号.13.输出警告warnings14.安装/删除服务mysqld — install MySQL –defaults-file=C:\my-opts.cnfmysqld –remove15.改变自增值ALTER TABLE `table_name` AUTO_INCREMENT =116.设主键ALTER TABLE `table_name` ADD PRIMARY KEY (`id`)17.搜索SELECT * FROM `email_list` WHERE relation LIKE ‘%老%’18.表结构DESCRIBE db_name;19.添加索引(即:唯一)ALTER TABLE `user` ADD UNIQUE (`username`)20.删除delete from text order by id desc limit 2;21.建表CREATE TABLE `tt` (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,`name` VARCHAR( 50 ) NOT NULL) ENGINE = MYISAM ;22.帐户drop user svn @localhost ;GRANT ALL PRIVILEGES ON *.* TO admin@”8.8.8.8″ IDENTIFIED BY ‘111111’ WITH GRANT OPTION;
-
MySQL的mysqldump工具的基本用法
几个常用用例:1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql2.导出一个表mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql3.导出一个数据库结构mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table4.导入数据库 常用source 命令进入mysql数据库控制台,如mysql -u root -pmysql>use 数据库然后使用source命令,后面参数为脚本文件(如这里用到的.sql)mysql>source d:\wcnc_db.sql -
MySQL主从同步配置
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。(这与同步复制可以进行对比,同步复 制是MySQL簇的一个特征)。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个 从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通 知新的更新。单向复制有利于健壮性、速度和系统管理:· 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器。· 通过在主服务器和从服务器之间切分处理客户查询的负载,可以得到 更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器 保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。· 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。MYSQL复制需要理解注意的地方:MySQL复制基于主服务器在二进制日志中记录所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。二进制日志只是一个从启用二进制日志的固定时间点开始的数据库操作记录。所以设置任何从服务器时,首先要把从服务器的数据库与主服务器开启二进制时的数据库同步。如果启动从服务器时,其数据库与主服务器数据库启动二进制日志时的状态不相同,从服务器很可能失败。MYSQL复制设置步骤:1.同步主从数据库登录数据库管理命令行,执行FLUSH TABLES WITH READ LOCK语句清空所有表和块的写入语句。mysql> FLUSH TABLES WITH READ LOCK;进入MYSQL的数据库存放路径,使用tar对要设备主从复制的数据库进行压缩归档:shell> tar -cvf /tmp/mysql-snapshot.tar ./this_db确认MYSQL当前是否开启了二进制日志,如果当前已经开启了二进制日志请执行:SHOW MASTER STATUS;命令,记录当前二进志日志文件名和日志的偏移量,这在设置从服务器时用来确定要读取 二进制日志的位置。mysql > SHOW MASTER STATUS;+—————+———-+————–+——————+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+—————+———-+————–+——————+| mysql-bin.003 | 73 | test | manual,mysql |+—————+———-+————–+——————+如果当前没有开启二进制日志请设置MYSQL配置文件,开启MYSQL的二进制功能,然后重新启动 MYSQL,登录到MYSQL命令行,重新启用MYSQL写操作。mysql> UNLOCK TABLES;接下来把刚才压缩备份的数据库复制到从服务器的数据库存放目录,解压,更改这些文件的权限, 确保对这些文件和目录的权限正确,MySQL的运行用户必须能够读写这些文件。2.设置MYSQL配置文件确保主服务器的mysql配置文件my.cnf文件的[mysqld]部分包括一个log-bin选项,如果需要只 对某一个数据库进行复制,在log-bin下加入binlog-do-db=XXX和一个server-id=Master_id选项,其中server-id的值必须为1到232–1之间的一个正整数值。[mysqld]log-bin=mysql-binserver-id=1登录到MYSQL命令行,为从服务器创建一个同步帐户:mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’slave_ip’ IDENTIFIED BY ‘pass’;编辑从服务器的MYSQL配置文件,确保从服务器的server-id与主服务器的server-id不冲突。[mysqld]server-id=23.开始主从同步在从服务器上执行下面的语句,用你的系统的实际值替换选项值:mysql> CHANGE MASTER TO->MASTER_HOST=’master_host_name’,->MASTER_USER=’replication_user_name’,->MASTER_PASSWORD=’replication_password’,->MASTER_LOG_FILE=’recorded_log_file_name’,-> MASTER_LOG_POS=recorded_log_position;master_host_name:主服务器的计算机名或IP地址replication_user_name:主服务器为从服务器设置的复制帐号replication_password:复制帐号密码recofded_log_file_name:主从服务器数据库同步时所记录的二进制文件名recorded_log_position:主从服务器数据库同步时所记录的二进制偏移量,也就是要读取数据库 日志的位置。启动从服务器线程:mysql> START SLAVE;执行这些程序后,从服务器应连接主服务器,并执行自从数据库同步以来发生的任何更新。从服务器复制时,会在其数据目录中生成dmaster.info和relay-log.info两个 文件。从服务器使用这两个文件记录已经处理了多少主服务器的二进制日志。不要移除或编辑这些文件,除非你清楚你正在做什么并完全理解其含义。即使这样,最 好是使用CHANGE MASTER To语句来修改。CHANGE MASTER TOmaster_def[,master_def] …
master_def:
MASTER_HOST = 'host_name'
| MASTER_USER = 'user_name'
| MASTER_PASSWORD = 'password'
| MASTER_PORT =port_num
| MASTER_CONNECT_RETRY =count
| MASTER_LOG_FILE = 'master_log_name'
| MASTER_LOG_POS =master_log_pos
| RELAY_LOG_FILE = 'relay_log_name'
| RELAY_LOG_POS =relay_log_pos
| MASTER_SSL = {0|1}
| MASTER_SSL_CA = 'ca_file_name'
| MASTER_SSL_CAPATH = 'ca_directory_name'
| MASTER_SSL_CERT = 'cert_file_name'
| MASTER_SSL_KEY = 'key_file_name'
| MASTER_SSL_CIPHER = 'cipher_list'
可以更改从属服务器用于与主服务器进行连接和通讯的参数。
MASTER_USER,MASTER_PASSWORD,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_KEY和MASTER_SSL_CIPHER用于向从属服务器提供有关如何与主服务器连接的信息。
即使对于在编译时没有SSL支持的从属服务器,SSL选项(MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_KEY和MASTER_SSL_CIPHER)也可以被更改。它们被保存到master.info文件中,但是会被忽略,直到您使用一个SSL支持已启用的服务器。
如果您不指定一个给定的参数,则它会保持其原有的值。例外情况在后面的讨论中进行了说明。举例说明,如果用于连接到您的MySQL主服务器的 密码被更改了,您只需发布这些语句,就可以告知从属服务器新的密码:
mysql>STOP SLAVE; -- if replication was running
mysql>CHANGE MASTER TO MASTER_PASSWORD='new3cret';
mysql>START SLAVE; -- if you want to restart replication
没有必要指定没有改变的参数(主机、接口、用户等)。
MASTER_HOST和MASTER_PORT是主服务器主机和其TCP/IP接口的主机名(或IP地址)。注意,如果MASTER_HOST与localhost相等,那么,和MySQL的其它部分一样,接口可以被忽略(例如,如果可以使用Unix插槽文件)。
如果您指定了MASTER_HOST或MASTER_PORT,则从属服务器会假定主服务器与以前不一样(即使您指定的主机或接口值与当前值是一样的。)在此情况下,主服务器二进制日志的名称和位置的原有值不再适用,因此,如果您不指定语句中的MASTER_LOG_FILE和MASTER_LOG_POS,MASTER_LOG_FILE=”和MASTER_LOG_POS=4会被静默地添加。
在MASTER_LOG_FILE和MASTER_LOG_POS坐标点,从属服务器I/O线程在启动之后从主服务器读取。如果您只指定了其中一个,则从属服务器不能指定RELAY_LOG_FILE或RELAY_LOG_POS。如果MSATER_LOG_FILE和MASTER_LOG_POS都没有被指定,则从属服务器会使用在CHANGE MASTER被发布前的最后一个slave SQL thread坐标。当您只想改变要使用的 密码时,这可以确保复制的连续性。即使从属服务器SQL线程落后于从属服务器I/O线程,也可以确保复制的连续性。
CHANGE MASTER会删除所有的中继日志文件并启动一个新的日志,除非您指定了RELAY_LOG_FILE或RELAY_LOG_POS。在此情况下,中继日志被保持;relay_log_purge全局变量被静默地设置为0。
CHANGE MASTER TO可以更新master.info和relay-log.info文件的内容。
当您拥有主服务器快照并拥有日志和对应的偏移量时,CHANGE MASTER对于设置从属服务器是有用的。在把快照载入从属服务器之后,您可以在从属服务器上运行CHANGE MASTER TO MASTER_LOG_FILE=’log_name_on_master‘, MASTER_LOG_POS=log_offset_on_master。
举例说明:
mysql>CHANGE MASTER TO
-> MASTER_HOST='master2.mycompany.com',
-> MASTER_USER='replication',
-> MASTER_PASSWORD='bigs3cret',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='master2-bin.001',
-> MASTER_LOG_POS=4,
-> MASTER_CONNECT_RETRY=10;
mysql>CHANGE MASTER TO
-> RELAY_LOG_FILE='slave-relay-bin.006',
-> RELAY_LOG_POS=4025;
第一个例子可以更改主服务器及其二进制日志坐标。当想要设置从属服务器来复制主服务器时使用。
第二个例子显示了较少被使用的一个操作。当从属服务器含有中继日志,并且您出于某种原因想要执行此日志时使用。要这么做时,不需要连接主服务器。您只需要使用CHANGE MASTER TO并启动SQL线程(START SLAVE SQL_THREAD)。
您甚至可以在一个用于独立非从属服务器的非复制型设置中使用第二种操作,在崩溃之后进行复原。假设您的服务器已崩溃,同时您已恢复了备份。您想要重新播放服务器自己的二进制日志(不是中继日志,而是正规的二进制文件),例如名为myhost-bin.*。首先,应在安全的地方制作这些二进制日志的备份,以防您没有完全遵守以下步骤,意外地让服务器清理了二进制文件。使用SET GLOBAL relay_log_purge=0,进一步增加安全性。然后启动不含–log-bin选项的服务器。使用–replicate-same-server-id,–relay-log=myhost-bin(让服务器相信,这些正规的二进制日志是中继日志)和–skip-slave-startoptions选项。当服务器启动后,发布以下语句:
mysql>CHANGE MASTER TO
-> RELAY_LOG_FILE='myhost-bin.153',
-> RELAY_LOG_POS=410,
-> MASTER_HOST='some_dummy_string';
mysql>START SLAVE SQL_THREAD;
服务器会读取并执行自己的二进制日志,完成崩溃复原。当复原完成后,运行STOP SLAVE,关闭服务器,删除master.info和relay-log.info,并使用原来的选项重新启动服务器。
要让服务器认为它是一个从属服务器,需要指定MASTER_HOST(甚至使用假值)。
-
Linux下安装部署SNMP(流量监控)
前言:记录我在一台原本没有安装snmp的服务器上通过源码方式安装最新版本snmp的过程。1)查原系统是否安装了snmp# rpm –qa | grep snmp2)下载、解压、配置、编译、安装(到http://www.net-snmp.net/download.html上下载最新的net-snmp版本,目前是5.5。)# cd /usr/local/src# wget http://cdnetworks-kr-2.dl.sourceforge.net/project/net-snmp/net-snmp/5.5/net-snmp-5.5.tar.gz# tar zxvf net-snmp-5.5.tar.gz# cd net-snmp-5.5# ./configure(编译中会有交互过程。如选择版本等。)# make# make install3)指令路径说明安装完成之后:/usr/local/sbin/snmpd 是启动snmp的程序,snmp的可执行命令(如,snmpget、snmpwalk等)默认安装在/usr/local/bin下。4)snmpd.conf文件用find / -name snmpd.conf查找一下snmpd.conf文件,可以发现仅有找到以下一条结查:/usr/local/src/net-snmp-5.5/python/netsnmp/tests/snmpd.conf将其cp到/etc下:cp /usr/local/src/net-snmp-5.5/python/netsnmp/tests/snmpd.conf /etc/snmpd.conf5)启动snmp用以下命令启动snmp:# /usr/local/sbin/snmpd -c /etc/snmpd.conf(将/usr/local/sbin/snmpd -c /etc/snmpd.conf 加入到/etc/rc.d/rc.local中,成为开机自动启动)6)检查snmp启动情况用netstat –anu 查一下是否监听:161端口;或用 ps –ef |grep snmp可以检查snmpd的进程7)测试snmp取数据# snmpwalk -c public -v 2c localhost看是否可以出现正常的查询结果。8)进行snmpd.conf文件的配置但此时仅是在本机上可以进行snmp查询,在另一个服务器上是查不到的,所以还要更改一下/etc/snmpd.conf的配置。# 1) 设置监控机的IP或监控机的网段,以及团体字映射到安全名com2sec local 192.168.10.2 publiccom2sec monitorhost 192.168.10.1 publiccom2sec mynetwork1 92.168.1.0/24 public# 2) 映射组名和安全名group MyRWGroup v2c localgroup MyRWGroup v2c monitorhostgroup MyROGroup v2c mynetwork# 3)设置mib subtree视图view all included .1 80# 4) 设置read/write权限access MyROGroup “” any noauth exact all none noneaccess MyRWGroup “” any noauth exact all all none -
jQuery性能优化(ie6)
ie6浏览器,js引擎解析速度很慢,所以只能选择优化js代码
1.尽量使用#id去寻找元素(id是唯一的,无需遍历和循环DOM)
2.jQuery中第二快的选择器就是Tag选择器,尽量在Classes前面使用Tags
eg:var active_light = $(‘#traffic_light input.css’); 比$(‘.css’)快许多3.养成保存jQuery对象到一个变量上的习惯
记住,永远不要让相同的选择器在你的代码里出现多次.eg:
$(‘#traffic_light input.on).bind(‘click’, function(){…});
$(‘#traffic_light input.on).css(‘border’, ‘3px dashed yellow’);
$(‘#traffic_light input.on).css(‘background-color’, ‘orange’);
$(‘#traffic_light input.on).fadeIn(‘slow’);
取而代之,首现保存jQuery变量到一个本地变量后,再继续你的操作。var $active_light = $(‘#traffic_light input.on’);
$active_light.bind(‘click’, function(){…});
$active_light.css(‘border’, ‘3px dashed yellow’);
$active_light.css(‘background-color’, ‘orange’);
$active_light.fadeIn(‘slow’);4.更好的利用链:
var $active_light = $(‘#traffic_light input.on’);$active_light.bind(‘click’, function(){…})
.css(‘border’, ‘3px dashed yellow’)
.css(‘background-color’, ‘orange’)
.fadeIn(‘slow’);
这样可以让我们写更少的代码,使JavaScript更轻量。5.使用子查询
jQuery 允许我们对一个已包装的对象使用附加的选择器操作. 因为我们已经在保存了一个父级对象在变量里, 这样大大提高对其子元素的操作:
var $traffic_light = $(‘#traffic_light’),
$active_light = $traffic_light.find(‘input.on’),
$inactive_lights = $traffic_light.find(‘input.off’);
提示: 你可以用逗号分隔的方法一次声明多个局部变量 节省字节数6.将 jquery结果缓存到一个全局变量中
// 在全局范围定义一个对象 (例如: window对象)
window.$my =
{
// 初始化所有可能会不止一次要使用的查询
head : $(‘head‘),
traffic_light : $(‘#traffic_light‘),
traffic_button : $(‘#traffic_button‘)
};
function do_something()
{
//现在你可以引用存储的结果并操作它们
var script = document.createElement(‘script‘);
$my.head.append(script);
$my.cool_results = $(‘#some_ul li‘);
$my.other_results = $(‘#some_table td‘);// 将全局函数作为一个普通的jquery对象去使用.
$my.other_results.css(‘border-color‘, ‘red‘);
$my.traffic_light.css(‘border-color‘, ‘green‘);
}7.第三,多用父子关系,少用嵌套关系。
例如,使用parent>child代替parent child。因为”>”是child选择器,只从子节点里匹配,不递归。而” “是后
代选择器,递归匹配所有子节点及子节点的子节点,即后代节点。
jQuery选择器使用频率列表
选 择 器 统计频率 #id 51.290% .class 13.082% tag 6.416% tag.class 3.978% #id tag 2.151% tag#id 1.935% #id:visible 1.577% #id .class 1.434% .class .class 1.183% * 0.968% 续表
选 择 器 统计频率 #id tag.class 0.932% #id:hidden 0.789% tag[name=value] 0.645% .class tag 0.573% [name=value] 0.538% tag tag 0.502% #id #id 0.430% #id tag tag 0.358% -
重启网络接口
重启网络接口即可,networking restart 重启所有”激活”的主机网络接口,ifdown ethN, ifup ethN 重启制定网络接口。
-
jQuery上传插件Uploadify详解及其中文按钮解决方案
网上找了一天,大家都说Uploadify唯一的缺点就是不支持中文按钮,杯具之前,我看了下Uploadify的API,才发现了几个参数没被大家提及的,这正是解决此问题的关键。(以后坚决养成没事就看API的习惯)Uploadify有一个参数是 buttonText 这个无论你怎么改都不支持中文,因为插件在js里用了一个转码方法把这个参数的值转过码了,解码的地方在那个swf文件里,看不到代码,所以这条路不行。另一个参数,网上很少提到,是 buttonImg( 按钮图片),这时你完全可以用一个图片来替换掉插件自带的那个黑色的flash浏览按钮,只要你自己的图片上是中文,这不就解决了中文按钮问题么?如果只加这一个,你会发现你的按钮图片下面有一片白色区域,其实就是那个flash留下的,白色区域表示鼠标可用范围,这个范围可以用width,height来调整。还有一个参数 wmode 它的默认值是opaque,把它改成transparent就行了,也就是把那片白色区域透明化。再用刚才说的方法,把按键点击范围设置成跟你图片一样大就完全OK了。============================================Uploadify的用法就不说了,网上文章很多,跟别的jquery插件用法一样,就是几种文件的摆放路径而已。以下附上Uploadify部分参数的介绍,要看全部的就去看其API文件了,一般在下载的包里都有。uploader : uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后弹出打开文件对话框,默认值:uploadify.swf。script : 后台处理程序的相对路径 。默认值:uploadify.phpcheckScript :用来判断上传选择的文件在服务器是否存在的后台处理程序的相对路径fileDataName :设置一个名字,在服务器处理程序中根据该名字来取上传文件的数据。默认为Filedatamethod : 提交方式Post 或Get 默认为PostscriptAccess :flash脚本文件的访问模式,如果在本地测试设置为always,默认值:sameDomainfolder : 上传文件存放的目录 。queueID : 文件队列的ID,该ID与存放文件队列的div的ID一致。queueSizeLimit : 当允许多文件生成时,设置选择文件的个数,默认值:999 。multi : 设置为true时可以上传多个文件。auto : 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 。fileDesc : 这个属性值必须设置fileExt属性后才有效,用来设置选择文件对话框中的提示文本,如设置fileDesc为“请选择rar doc pdf文件”,打开文件选择框效果如下图:fileExt : 设置可以选择的文件的类型,格式如:’*.doc;*.pdf;*.rar’ 。sizeLimit : 上传文件的大小限制 。simUploadLimit : 允许同时上传的个数 默认值:1 。buttonText : 浏览按钮的文本,默认值:BROWSE 。buttonImg : 浏览按钮的图片的路径 。hideButton : 设置为true则隐藏浏览按钮的图片 。rollover : 值为true和false,设置为true时当鼠标移到浏览按钮上时有反转效果。width : 设置浏览按钮的宽度 ,默认值:110。height : 设置浏览按钮的高度 ,默认值:30。wmode : 设置该项为transparent 可以使浏览按钮的flash背景文件透明,并且flash文件会被置为页面的最高层。 默认值:opaque 。cancelImg :选择文件到文件队列中后的每一个文件上的关闭按钮图标Uploadify还自带了很多参数及有用的方法和回调函数,都在API里,虽然是全英文的,但很容易看懂,这里就不说了。以下是我用到的代码,可以参考一下:<script type=”text/javascript”>$(document).ready(function() {$(“#uploadify”).uploadify({‘uploader’ : ‘images/uploadify.swf’,‘script’ : ‘<%=request.getContextPath()%>/content/ImportScheduleCommitAction.do’,‘cancelImg’ : ‘images/cancel.png’,‘folder’ : ‘/’,‘queueID’ : ‘fileQueue’,‘fileDataName’ : ‘uploadify’,‘fileDesc’ : ‘支持格式:xls.’,‘fileExt’ : ‘*.xls’,‘auto’ : false,‘multi’ : true,‘height’ : 20,‘width’ : 50,‘simUploadLimit’ : 3,//’buttonText’ : ‘fdsfdsf…’,‘buttonImg’ : ‘images/browse.jpg’,// ‘hideButton’ : true,// ‘rollover’ : true,‘wmode’ : ‘transparent’ ,onComplete : function (event, queueID, fileObj, response, data){$(‘<li></li>’).appendTo(‘.files’).text(response);},onError : function(event, queueID, fileObj){alert(“文件:” + fileObj.name + ” 上传失败”);}// onCancel : function(event, queueID, fileObj)// {// alert(“取消文件:” + fileObj.name);// }});<script type=”text/javascript”>$(document).ready(function() {$(“#uploadify”).uploadify({‘uploader’ : ‘images/uploadify.swf’,‘script’ : ‘<%=request.getContextPath()%>/content/ImportScheduleCommitAction.do’,‘cancelImg’ : ‘images/cancel.png’,‘folder’ : ‘/’,‘queueID’ : ‘fileQueue’,‘fileDataName’ : ‘uploadify’,‘fileDesc’ : ‘支持格式:xls.’,‘fileExt’ : ‘*.xls’,‘auto’ : false,‘multi’ : true,‘height’ : 20,‘width’ : 50,‘simUploadLimit’ : 3,//’buttonText’ : ‘fdsfdsf…’,‘buttonImg’ : ‘images/browse.jpg’,// ‘hideButton’ : true,// ‘rollover’ : true,‘wmode’ : ‘transparent’ ,onComplete : function (event, queueID, fileObj, response, data){$(‘<li></li>’).appendTo(‘.files’).text(response);},onError : function(event, queueID, fileObj){alert(“文件:” + fileObj.name + ” 上传失败”);}// onCancel : function(event, queueID, fileObj)// {// alert(“取消文件:” + fileObj.name);// }});要注意的是,我的script属性值是一个请求路径,我发现在我设置了同时上传多个文件后(比如3),并不是每请求一次去上传3个文件,而仍然是执行3次请求,请求一次上传一个文件。这也没办法,uplodify有那么多回调函数,要是一次处理多个,那回调函数的参数就不知道拿哪个了,因为这些参数都不是数组。也就是说,无论你设置同时上传几个文件,它都会一个一个去请求并上传,只是表面上感觉好像有多个线程同时在处理上传请求一样,只是表象而已。而且如果你把simUploadLimit设置过大就会经常出错,我设置成5的时候经常会有一两个文件上传失败。 -
ASP读写文本文件
在ASP里,有一个FSO对象,File System Object,即文件系统对象。我们可以使用它来从文本文件中读取数据,或者将信息写入文本文件中。定义和用法
OpenTextFile 方法打开指定的文件,并返回可用来访问此文件的 TextStream 对象。
语法:
FileSystemObject.OpenTextFile(fname,mode,create,format)
参数 描述 fname 必需的。要打开的文件的名称。 mode 可选的。如何打开文件。 - 1=ForReading – 打开文件用于读取数据。您无法向此文件写数据。
- 2=ForWriting – 打开文件用于写数据。
- 8=ForAppending – 打开文件,并向文件的末尾写数据。
create 可选的。设置如果文件名不存在,是否创建新文件。True 指示可创建新文件,而 False 指示新文件不会被创建。False 是默认的。 format 可选的。文件的格式。 - 0=TristateFalse – 以 ASCII 打开文件。默认。
- -1=TristateTrue – 以 Unicode 打开文件。
- -2=TristateUseDefault – 使用系统默认格式打开文件。
先来看一段代码:<% dim fs,f set fs=Server.CreateObject("Scripting.FileSystemObject") set f=
fs.OpenTextFile(Server.MapPath("testread.txt"),8,true)
f.WriteLine("This text will be added to the end of file") f.Close set f=Nothing set fs=Nothing %>上面的代码展示如何将一段文字写入到一个文本文件中。 下面我们再写一段程序,用ASP把它从文本文件中读出来,且看:<% dim fs,f,t,x set fs=Server.CreateObject("Scripting.FileSystemObject") set f=fs.CreateTextFile("c:\test.txt") f.write("Hello World!") f.close set t=fs.OpenTextFile("c:\test.txt",1,false) x=
t.ReadAll
t.close Response.Write("The text in the file is: " & x) %>这里使用了逐行读取的方法,将文本文件中的内容全部读取出来,保存到一个str变量中,ASP最后把str变量输出出来了。还一个方法叫readAll(),用它替换readLine()方法,表示,一次性把文本文件中的所有的内容都读出来,这时候当然就不需要循环了,大家可以自己写写看。 -
地方团
团购的最大亮点在于他能弥补类似淘宝、京东等商城无法提供生活化服务的缺陷。如果团购仅仅拼的是价格,那团购模式也不会被投资者如此看重了。从本地团购消费者的角度来讲,团购网站目前除了在一些大城市推广餐饮、娱乐服务外,对其他地区的大众推出的都是一些仅仅只有价格优势,而缺乏其他特色的产品。有些用户更需要的是一些本地商家、店家的打折优惠,对于这些需求,大的团购网站是无法满足他们的。地方团购网站正好弥补了这些不足,利用本地的地域优势,积极联系本地商家、店家,推出本地特色的团购产品和服务,这是行得通的。当我们的团购网站做出品牌知名度、用户量达到一定程度,你还怕没出路吗?无论是自己组建小团购运营还是将其出售给其他团购网站大佬,相信都是不错的选择。