SSH的连接登录延时一般来说是因为sshd默认打开了反向DNS解析的问题。
修改ssh服务器的/etc/ssh/sshd_config,把UseDNS yes改为UseDNS no就可以了。
不过今天遇到了Anonomous的Ubuntu,连接到修改过的服务器上仍然有延时。
找到了一个解决方法:
编辑/etc/nsswitch.conf
找到hosts那行,将其改成下面这样:
hosts: files dns [NOTFOUND=return]
测试效果不错。
获得root权限
然后执行
/etc/init.d/sshd restart
来源:http://www.eusidc.com/showfaq/1387.html
修改ssh服务器的/etc/ssh/sshd_config,把UseDNS yes改为UseDNS no就可以了。
不过今天遇到了Anonomous的Ubuntu,连接到修改过的服务器上仍然有延时。
找到了一个解决方法:
编辑/etc/nsswitch.conf
找到hosts那行,将其改成下面这样:
hosts: files dns [NOTFOUND=return]
测试效果不错。
获得root权限
然后执行
/etc/init.d/sshd restart
来源:http://www.eusidc.com/showfaq/1387.html
用ports安装了mysql以后,过一段时间发现/var空间不足了,查一下,会发现是mysql-bin.000001、mysql-bin.000002等文件占用了空间,那么这些文件是干吗的?这是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。
这样做主要有以下两个目的:
1:数据恢复
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。
处理方法分两种情况:
1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。
vi /etc/my.cnf把里面的log-bin这一行注释掉,重启mysql服务即可。
2:如果你的环境是主从服务器,那么就需要做以下操作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。
清理日志方法为:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-12-19 21:00:00';
如果你确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除。
====================================================================
删除MYSQl BIN-LOG 日志
想要恢愎数据库以前的资料,执行:show binlog events;屏幕就开始显示很多内容,心里烦(那有这么多没有用的LOG),还是删除一些去吧!
1.查找当
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| mysql-bin.000001 | 150462942 |
| mysql-bin.000002 | 125 |
| mysql-bin.000003 | 106 |
+—————-+———–+
2.删除bin-log(删除mysql-bin.000003之前的而没有包含mysql-bin.000003)
mysql> purge binary logs to ‘mysql-bin.000003′;
Query OK, 0 rows affected (0.16 sec)
3. 查询结果(现在只有一条记录了.)
mysql> show binlog events\G
*************************** 1. row ***************************
Log_name: mysql-bin.000003
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 106
Info: Server ver: 5.1.26-rc-log, Binlog ver: 4
1 row in set (0.01 sec)
(mysql-bin.000001和mysql-bin.000002已被删除)
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| mysql-bin.000003 | 106 |
+—————-+———–+
1 row in set (0.00 sec)
(删除的其它格式运用!)
PURGE {MASTER | BINARY} LOGS TO ‘log_name’
PURGE {MASTER | BINARY} LOGS BEFORE ‘date’
用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
例如:
PURGE MASTER LOGS TO ‘mysql-bin.010′;
PURGE MASTER LOGS BEFORE ’2008-06-22 13:00:00′;
清除3天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
BEFORE变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。MASTER和BINARY是同义词。
如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。
要清理日志,需按照以下步骤:
1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
4. 制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)
5. 清理所有的日志,但是不包括目标日志。
那么这些文件该怎么删除和禁止呢?
禁止方法: vi /etc/my.cnf把里面的
#log-bin=mysql-bin
#binlog_format=mixed
注释掉,重启mysql服务即可.
删除方法:
输入命令:
/usr/local/mysql/bin/mysql -u root -p
输入密码登陆mysql后,运行命令:
reset master;
(包括;号)
清空日志文件.再查看Mysql文件的大小,已经小了很多了.
-bash-3.2# du -h –max-depth=1 /usr/local/mysql/var
du: cannot access `250Cmax-depth=1': No such file or directory
142M /usr/local/mysql/var
mysql-bin 日志文件的清除
对于一个繁忙的mysql数据库而言,日志文件日渐增多增大。必须加以删除或控制。
更改配置文件不让产生 mysql-bin 文件:
vi /etc/my.cnf
找到如下几行信息:
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
把 log-bin 这一行注释掉即可。
完毕,需要重新启动mysqld使配置生效。
删除现有的 mysql-bin 文件:
进入mysql:
/usr/local/mysql/bin/mysql -u root -p
然后,执行如下命令:
reset master;
如果你安装的MYSQL启用了记录日志功能,那就会占用很多空间,甚至可能把你所有的空间都耗光,这是非常可怕的,而且这一切都在悄悄的进行,你完全感受不到……
mysql-bin.0000X文件通常在MYSQL安装文件夹的var目录,我的是/usr/local/mysql/var/,如果你的不在这里,那就找一下……
好了,下面我就来提供解决方案,首先打开/etc/my.cnf文件,找到下面的内容,需要注意的是,log-bin和binlog_format这2行内容,并不是在一起的,然后注释掉。
log-bin=mysql-bin
binlog_format=mixed
注释方法很简单,在他们前面加 一个#符号就可以了,接着把mysql-bin.0000X的日志文件删除掉。
然后执行这个命令
/usr/local/mysql/bin/mysql -u root -p
输入密码登陆后执行reset master命令。如果成功的话不会返回任何信息,如果失败则会出现提示,到此问题就解决啦!
mysql-bin.000001、mysql-bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。
这样做主要有以下两个目的:
1:数据恢复
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。
处理方法分两种情况:
1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。
vi /etc/my.cnf把里面的log-bin这一行注释掉,重启mysql服务即可。
2:如果你的环境是主从服务器,那么就需要做以下操作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。
清理日志方法为:
PURGE MASTER LOGS TO ‘mysql-bin.010′;
PURGE MASTER LOGS BEFORE ‘2008-12-19 21:00:00′;
如果你确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除。
mysql> PURGE MASTER LOGS BEFORE '2011-03-13 21:00:00';
Query OK, 0 rows affected (0.04 sec)
mysql> PURGE MASTER LOGS TO 'mysql-bin.000007';
Query OK, 0 rows affected (0.00 sec)
mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging
来源:http://www.amcoding.com/faq/mysql-bin-%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E7%9A%84%E6%B8%85%E9%99%A4/
http://imcat.in/delete-mysql-bin-0000x-mysql-log-file/
http://www.jiucool.com/terror-mysql-bin-0000x-log-file/
http://doc.linuxpk.com/56482.html
http://ourmysql.com/archives/568
这样做主要有以下两个目的:
1:数据恢复
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。
处理方法分两种情况:
1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。
vi /etc/my.cnf把里面的log-bin这一行注释掉,重启mysql服务即可。
2:如果你的环境是主从服务器,那么就需要做以下操作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。
清理日志方法为:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-12-19 21:00:00';
如果你确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除。
====================================================================
删除MYSQl BIN-LOG 日志
想要恢愎数据库以前的资料,执行:show binlog events;屏幕就开始显示很多内容,心里烦(那有这么多没有用的LOG),还是删除一些去吧!
1.查找当
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| mysql-bin.000001 | 150462942 |
| mysql-bin.000002 | 125 |
| mysql-bin.000003 | 106 |
+—————-+———–+
2.删除bin-log(删除mysql-bin.000003之前的而没有包含mysql-bin.000003)
mysql> purge binary logs to ‘mysql-bin.000003′;
Query OK, 0 rows affected (0.16 sec)
3. 查询结果(现在只有一条记录了.)
mysql> show binlog events\G
*************************** 1. row ***************************
Log_name: mysql-bin.000003
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 106
Info: Server ver: 5.1.26-rc-log, Binlog ver: 4
1 row in set (0.01 sec)
(mysql-bin.000001和mysql-bin.000002已被删除)
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| mysql-bin.000003 | 106 |
+—————-+———–+
1 row in set (0.00 sec)
(删除的其它格式运用!)
PURGE {MASTER | BINARY} LOGS TO ‘log_name’
PURGE {MASTER | BINARY} LOGS BEFORE ‘date’
用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
例如:
PURGE MASTER LOGS TO ‘mysql-bin.010′;
PURGE MASTER LOGS BEFORE ’2008-06-22 13:00:00′;
清除3天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
BEFORE变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。MASTER和BINARY是同义词。
如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。
要清理日志,需按照以下步骤:
1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
4. 制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)
5. 清理所有的日志,但是不包括目标日志。
那么这些文件该怎么删除和禁止呢?
禁止方法: vi /etc/my.cnf把里面的
#log-bin=mysql-bin
#binlog_format=mixed
注释掉,重启mysql服务即可.
删除方法:
输入命令:
/usr/local/mysql/bin/mysql -u root -p
输入密码登陆mysql后,运行命令:
reset master;
(包括;号)
清空日志文件.再查看Mysql文件的大小,已经小了很多了.
-bash-3.2# du -h –max-depth=1 /usr/local/mysql/var
du: cannot access `250Cmax-depth=1': No such file or directory
142M /usr/local/mysql/var
mysql-bin 日志文件的清除
对于一个繁忙的mysql数据库而言,日志文件日渐增多增大。必须加以删除或控制。
更改配置文件不让产生 mysql-bin 文件:
vi /etc/my.cnf
找到如下几行信息:
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
把 log-bin 这一行注释掉即可。
完毕,需要重新启动mysqld使配置生效。
删除现有的 mysql-bin 文件:
进入mysql:
/usr/local/mysql/bin/mysql -u root -p
然后,执行如下命令:
reset master;
如果你安装的MYSQL启用了记录日志功能,那就会占用很多空间,甚至可能把你所有的空间都耗光,这是非常可怕的,而且这一切都在悄悄的进行,你完全感受不到……
mysql-bin.0000X文件通常在MYSQL安装文件夹的var目录,我的是/usr/local/mysql/var/,如果你的不在这里,那就找一下……
好了,下面我就来提供解决方案,首先打开/etc/my.cnf文件,找到下面的内容,需要注意的是,log-bin和binlog_format这2行内容,并不是在一起的,然后注释掉。
log-bin=mysql-bin
binlog_format=mixed
注释方法很简单,在他们前面加 一个#符号就可以了,接着把mysql-bin.0000X的日志文件删除掉。
然后执行这个命令
/usr/local/mysql/bin/mysql -u root -p
输入密码登陆后执行reset master命令。如果成功的话不会返回任何信息,如果失败则会出现提示,到此问题就解决啦!
mysql-bin.000001、mysql-bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。
这样做主要有以下两个目的:
1:数据恢复
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。
处理方法分两种情况:
1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。
vi /etc/my.cnf把里面的log-bin这一行注释掉,重启mysql服务即可。
2:如果你的环境是主从服务器,那么就需要做以下操作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。
清理日志方法为:
PURGE MASTER LOGS TO ‘mysql-bin.010′;
PURGE MASTER LOGS BEFORE ‘2008-12-19 21:00:00′;
如果你确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除。
mysql> PURGE MASTER LOGS BEFORE '2011-03-13 21:00:00';
Query OK, 0 rows affected (0.04 sec)
mysql> PURGE MASTER LOGS TO 'mysql-bin.000007';
Query OK, 0 rows affected (0.00 sec)
mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging
来源:http://www.amcoding.com/faq/mysql-bin-%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E7%9A%84%E6%B8%85%E9%99%A4/
http://imcat.in/delete-mysql-bin-0000x-mysql-log-file/
http://www.jiucool.com/terror-mysql-bin-0000x-log-file/
http://doc.linuxpk.com/56482.html
http://ourmysql.com/archives/568
为了创建复杂的Flash应用,客户端的Flash应用程序常常需要动态的向服务器发送和接受数据。而在AS3中主要提供了4种客户端与服务器之间进行通讯的方式。
1、HTTP的Get和Post方式:
2、WebService方式:
3、Flash Remoting方式:
4、Socket方式:
Socket通讯方式与其他几种通讯方式之间的最大区别就是客户端一旦和服务器端建立连接后,除非客户端主动与服务器端之间中断连接,否则该连接会一直保存,在这种情况下,服务器便可以主动的推送数据给客户端,从而非常适合多用户实时交互情形下的应用。
Action Script提供了两种Socket连接方式,一种是早期的XMLSocket,另一种是AS3新增的二进制Socket。可以使用flash.net.XMLSocket类创建XML数据格式的socket连接,使用flash.net.Socket类创建二进制数据格式socket连接。XMLSocket以XML数据报交换数据,而二进制Socket则以二进制数据报的方式交换数据,因此可以和任何Socket服务器进行连接和通讯,例如邮件服务器、新闻服务器等等。功能很是强大。
当用socket连接主机时,要遵循Flash Player安全沙漏规则:swf 和主机必须在同一个域;网络上的swf不能连接本地服务器;本地的swf 不能访问任何网络资源;要允许域名交叉访问或连接低于1024的端口,需要提供cross-domain 策略文件。
来源:http://www.awsws.com/?p=34
1、HTTP的Get和Post方式:
2、WebService方式:
3、Flash Remoting方式:
4、Socket方式:
Socket通讯方式与其他几种通讯方式之间的最大区别就是客户端一旦和服务器端建立连接后,除非客户端主动与服务器端之间中断连接,否则该连接会一直保存,在这种情况下,服务器便可以主动的推送数据给客户端,从而非常适合多用户实时交互情形下的应用。
Action Script提供了两种Socket连接方式,一种是早期的XMLSocket,另一种是AS3新增的二进制Socket。可以使用flash.net.XMLSocket类创建XML数据格式的socket连接,使用flash.net.Socket类创建二进制数据格式socket连接。XMLSocket以XML数据报交换数据,而二进制Socket则以二进制数据报的方式交换数据,因此可以和任何Socket服务器进行连接和通讯,例如邮件服务器、新闻服务器等等。功能很是强大。
当用socket连接主机时,要遵循Flash Player安全沙漏规则:swf 和主机必须在同一个域;网络上的swf不能连接本地服务器;本地的swf 不能访问任何网络资源;要允许域名交叉访问或连接低于1024的端口,需要提供cross-domain 策略文件。
来源:http://www.awsws.com/?p=34
try { document.getElementById("").SetReturnValue(__flash__toXML(MY_FUNCTION()) ); } catch (e) { document.getElementById("").SetReturnValue("<undefined/>"); }
今天在改 ohthink 时候遇到一个js报错 一直在报 只有IE希勒报名 火狐正常 就是上面的那行 但是根据脚本调试的结果显示 也找不到那一行 只提示个NULL 无从下手 最后终于发现了问题 ~
原来是某篇日志引入flash时候调用的函数 object必须要有 id 和 name 即使你随意加一个值 但是必须要有~
增加id、name,解决问题,不再报错误。
增加右边: id="jackxiagn" name="jackxiang"
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="974" height="246" id="jackxiagn" name="jackxiang">
互联网创业的葵花宝典
一个朋友,在一家软件的大企业做了十年的软件研发,想出来创业,问我要注意什么。我开玩笑说,要想成功,必须学习互联网创业的“葵花宝典”,第一条就是 “挥刀自宫”。
大的软件公司有很多资源,研发能力不错,各种推广资源也非常优越,但很少开发出来优秀的互联网产品。初步看上去,原因很多,比如很难调动个人的积极性、内部管理协调非常困难等。我认为还有一个重要的原因,就是方法不得当。大公司资源多,一个互联网创新项目,投入大量资源后,公司期望值高,考虑的问题自然多了,反而不容易做好。
从大公司离职出来创业,首先要“挥刀自宫”,干掉大公司这套做法,控制成本尽量少花钱,集中精力和资源解决核心的一两个问题就足够了。
不要想太多,不做太长时间的计划,尤其是计划不能太复杂!创业成功需要的是发现机会和快速突破的能力,再加一点运气。大公司的工作经验太多,有时候反而会限制自己的做法。互联网创业,越简单越单纯,越容易成功!
1.专注:解决用户一个迫切的需求,解决的问题一句话就可以说清楚。
(1) 一个明确而且用户迫切需要的产品,很容易找到明确的用户群。这样,产品研发出来后,不容易走偏。(2) 选择的用户需求要有一定的普遍性,这点决定这个产品的未来市场前景。(3) 解决的问题少,开发速度快,也容易控制初期的研发成本和风险。(4) 解决明确问题的产品,容易给用户说清楚,推广也会相对简单。
2.极致:要在这个功能点上做到所有同类产品的极致,做到最好才能赢。
(1) 极致是互联网产品的核心,只要极致才能超出用户的口碑,形成口口相传的效应,给后期的推广带来了很大的便利。(2) 专注才能做到极致,做到极致才能击败竞争对手。
3.快:开发周期一定要控制在三到六个月的时间,一定要快。
(1) 互联网时代,用户需求变化比较快,而且竞争也比较激烈。快速的开发,容易适应整个市场的节奏,并且节约成本。(2) 用户试用过程中,如果发现问题,反应速度也要快,尽快改善尽快更新。初期,我认为要保持在一两周的更新速度。
4.口碑:初期市场营销坚持少花钱甚至不花钱,才能看出产品对用户真正的吸引力。
(1) 产品完成后,不要着急,先坚持在一个小规模的用户群中试用,听听用户反馈。(2) 大规模的推广会带来如下的两个问题:一、投入大量市场费用后,用户期望值很高,如果产品不完善,很容易引起负面的口碑,为以后的推广留下了隐患。二、大规模市场推广得到的测试效果不准确。如果产品不完善,甚至需求选择有问题,会被数字掩盖。当推广费用停止后,用户量不增长甚至下滑,再改就来不及了。过去几年成功的互联网创业公司,其实在市场营销上花的钱都非常少,但这些公司在市场营销上花的精力并不少。(3) 刚开始最重要的推广技巧是搜索引擎优化和病毒式营销。
互联网创业的葵花宝典就是“专注”、“极致”、“快”和“口碑”!
一次完美的互联网创业,最好是技术、产品高手搭配的两三人创业,三到六个月内完成产品,再用半年到一年的时间测试完善产品,达成初步成功的门槛,再寻求融资,摸索成功的商业模式,然后投入大量的市场资源推广,形成规模化业务。
初步成功的标准,不同的业务要求不同。我有一个简单的标准供大家参考,就是产品推出半年到一年时间,网站页面过一百万PV,或者客户端产品日净增安装量1万次,而且用户数还在持续增长。达成这个目标之后,需要琢磨的事情,就是在保持增长速度的同时,如何探索好的商业模式。
来源:http://www.alibuybuy.com/posts/57142.html
一个朋友,在一家软件的大企业做了十年的软件研发,想出来创业,问我要注意什么。我开玩笑说,要想成功,必须学习互联网创业的“葵花宝典”,第一条就是 “挥刀自宫”。
大的软件公司有很多资源,研发能力不错,各种推广资源也非常优越,但很少开发出来优秀的互联网产品。初步看上去,原因很多,比如很难调动个人的积极性、内部管理协调非常困难等。我认为还有一个重要的原因,就是方法不得当。大公司资源多,一个互联网创新项目,投入大量资源后,公司期望值高,考虑的问题自然多了,反而不容易做好。
从大公司离职出来创业,首先要“挥刀自宫”,干掉大公司这套做法,控制成本尽量少花钱,集中精力和资源解决核心的一两个问题就足够了。
不要想太多,不做太长时间的计划,尤其是计划不能太复杂!创业成功需要的是发现机会和快速突破的能力,再加一点运气。大公司的工作经验太多,有时候反而会限制自己的做法。互联网创业,越简单越单纯,越容易成功!
1.专注:解决用户一个迫切的需求,解决的问题一句话就可以说清楚。
(1) 一个明确而且用户迫切需要的产品,很容易找到明确的用户群。这样,产品研发出来后,不容易走偏。(2) 选择的用户需求要有一定的普遍性,这点决定这个产品的未来市场前景。(3) 解决的问题少,开发速度快,也容易控制初期的研发成本和风险。(4) 解决明确问题的产品,容易给用户说清楚,推广也会相对简单。
2.极致:要在这个功能点上做到所有同类产品的极致,做到最好才能赢。
(1) 极致是互联网产品的核心,只要极致才能超出用户的口碑,形成口口相传的效应,给后期的推广带来了很大的便利。(2) 专注才能做到极致,做到极致才能击败竞争对手。
3.快:开发周期一定要控制在三到六个月的时间,一定要快。
(1) 互联网时代,用户需求变化比较快,而且竞争也比较激烈。快速的开发,容易适应整个市场的节奏,并且节约成本。(2) 用户试用过程中,如果发现问题,反应速度也要快,尽快改善尽快更新。初期,我认为要保持在一两周的更新速度。
4.口碑:初期市场营销坚持少花钱甚至不花钱,才能看出产品对用户真正的吸引力。
(1) 产品完成后,不要着急,先坚持在一个小规模的用户群中试用,听听用户反馈。(2) 大规模的推广会带来如下的两个问题:一、投入大量市场费用后,用户期望值很高,如果产品不完善,很容易引起负面的口碑,为以后的推广留下了隐患。二、大规模市场推广得到的测试效果不准确。如果产品不完善,甚至需求选择有问题,会被数字掩盖。当推广费用停止后,用户量不增长甚至下滑,再改就来不及了。过去几年成功的互联网创业公司,其实在市场营销上花的钱都非常少,但这些公司在市场营销上花的精力并不少。(3) 刚开始最重要的推广技巧是搜索引擎优化和病毒式营销。
互联网创业的葵花宝典就是“专注”、“极致”、“快”和“口碑”!
一次完美的互联网创业,最好是技术、产品高手搭配的两三人创业,三到六个月内完成产品,再用半年到一年的时间测试完善产品,达成初步成功的门槛,再寻求融资,摸索成功的商业模式,然后投入大量的市场资源推广,形成规模化业务。
初步成功的标准,不同的业务要求不同。我有一个简单的标准供大家参考,就是产品推出半年到一年时间,网站页面过一百万PV,或者客户端产品日净增安装量1万次,而且用户数还在持续增长。达成这个目标之后,需要琢磨的事情,就是在保持增长速度的同时,如何探索好的商业模式。
来源:http://www.alibuybuy.com/posts/57142.html
/usr/local/apache2/bin/apachectl -t
$('#tips').html("[Tips发送成功!]");
<a id="tips" name="tips" href="javascript:sendTips('sendTipsContents');"> [点击发送Tips]</a>
<a id="tips" name="tips" href="javascript:sendTips('sendTipsContents');"> [点击发送Tips]</a>
ping -t 是表示不停的 ping,-t 是表示连续ping 。
参数:
-t
校验与指定计算机的连接,直到用户中断。
C:\Users\Administrator>ping 10.10.0.1 -t -l 2000
正在 Ping 10.10.0.1 具有 2000 字节的数据:
来自 10.10.0.1 的回复: 字节=2000 时间=4ms TTL=64
来自 10.10.0.1 的回复: 字节=2000 时间=10ms TTL=64
来自 10.10.0.1 的回复: 字节=2000 时间=5ms TTL=64
来自 10.10.0.1 的回复: 字节=2000 时间=2ms TTL=64
举例来说:
以下是ping曙光博客的返回值:
C:\Documents and Settings\user>ping
Pinging [66.235.202.42] with 32 bytes of data:
Reply from 66.235.202.42: bytes=32 time=254ms TTL=51
Reply from 66.235.202.42: bytes=32 time=256ms TTL=51
Request timed out.
Reply from 66.235.202.42: bytes=32 time=260ms TTL=51
Ping statistics for 66.235.202.42:
Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),
Approximate round trip times in milli-seconds:
Minimum = 254ms, Maximum = 260ms, Average = 256ms
从结果中可以看出曙光博客服务器的IP地址是:66.235.202.42,所用的时间是256ms等,那TTL等与51是什么意思呢?
TTL是生存时间的意思,就是说这个ping的数据包能在网络上存在多少时间。当对网络上的主机进行ping操作的时候,本地机器会发出一个数据包,数据包经过一定数量的路由器传送到目的主机,但是由于很多的原因,一些数据包不能正常传送到目的主机,那如果不给这些数据包一个生存时间的话,这些数据包会一直在网络上传送,导致网络开销的增大。当数据包传送到一个路由器之后,TTL就自动减1,如果减到0了还是没有传送到目的主机,那么就自动丢失。就像上面ping曙光博客的时候第三次那样,出现Request timed out的情况,增加TTL来减少网络资源的消耗。默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。(这个是从网络上找到的),曙光博客的目的主机是采用FreeBSD系统的(可能已经更换),在这里可能TTL值是64,而不是UNIX主机的255,所以在从这里到目的主机经过了64-51=13个路由。当不知道目的主机的操作系统的时候我们可以根据TTL来猜测,但是不一定100%准确,如果目的主机是windows,但是经过了比如75个路由器,那么TTL的返回值是 128-75=53,那么你可能认为这个目的主机是Linux系统,但是一般不会经过那么多的路由器,所以通过TTL来判断目的主机的操作系统还是有一定的依据的。
参数:
-t
校验与指定计算机的连接,直到用户中断。
C:\Users\Administrator>ping 10.10.0.1 -t -l 2000
正在 Ping 10.10.0.1 具有 2000 字节的数据:
来自 10.10.0.1 的回复: 字节=2000 时间=4ms TTL=64
来自 10.10.0.1 的回复: 字节=2000 时间=10ms TTL=64
来自 10.10.0.1 的回复: 字节=2000 时间=5ms TTL=64
来自 10.10.0.1 的回复: 字节=2000 时间=2ms TTL=64
举例来说:
以下是ping曙光博客的返回值:
C:\Documents and Settings\user>ping
Pinging [66.235.202.42] with 32 bytes of data:
Reply from 66.235.202.42: bytes=32 time=254ms TTL=51
Reply from 66.235.202.42: bytes=32 time=256ms TTL=51
Request timed out.
Reply from 66.235.202.42: bytes=32 time=260ms TTL=51
Ping statistics for 66.235.202.42:
Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),
Approximate round trip times in milli-seconds:
Minimum = 254ms, Maximum = 260ms, Average = 256ms
从结果中可以看出曙光博客服务器的IP地址是:66.235.202.42,所用的时间是256ms等,那TTL等与51是什么意思呢?
TTL是生存时间的意思,就是说这个ping的数据包能在网络上存在多少时间。当对网络上的主机进行ping操作的时候,本地机器会发出一个数据包,数据包经过一定数量的路由器传送到目的主机,但是由于很多的原因,一些数据包不能正常传送到目的主机,那如果不给这些数据包一个生存时间的话,这些数据包会一直在网络上传送,导致网络开销的增大。当数据包传送到一个路由器之后,TTL就自动减1,如果减到0了还是没有传送到目的主机,那么就自动丢失。就像上面ping曙光博客的时候第三次那样,出现Request timed out的情况,增加TTL来减少网络资源的消耗。默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。(这个是从网络上找到的),曙光博客的目的主机是采用FreeBSD系统的(可能已经更换),在这里可能TTL值是64,而不是UNIX主机的255,所以在从这里到目的主机经过了64-51=13个路由。当不知道目的主机的操作系统的时候我们可以根据TTL来猜测,但是不一定100%准确,如果目的主机是windows,但是经过了比如75个路由器,那么TTL的返回值是 128-75=53,那么你可能认为这个目的主机是Linux系统,但是一般不会经过那么多的路由器,所以通过TTL来判断目的主机的操作系统还是有一定的依据的。
mysql数据库基本操作总结2010-12-23 10:53显示帮助:
shell> mysql --help
连接mysql:
shell> mysql -h localhost -u user -p
Enter password: ******
mysql> quit / ctl+c
不执行正在输入的命令:
mysql> SELECT
-> USER()
-> \c
输入\c取消它。
创建数据库:
mysql> Create database db_name;
使用数据库:
mysql> use db_name;
显示所有数据库:
mysql> show databases;
显示当前数据库中所有的表格:(也会显示当前数据库名称,显示方式tables_in_dbname)
mysql> show tables;
显示表格结构:
mysql> describe table_name;
创建表格:
mysql> create table if not exists table_name(id int(10) auto_increment not null primary key, name varchar(10) );
删除表格:
mysql> drop table table_name;
插入数据:(插入此行数据后,再插入数据的时候id从11开始自增)
mysql> insert into table_name(id, name) values(10, 'name10');
导入数据:(和insert的功能相同)
mysql> load data local infile 'c:/test/test.txt' into table table_name; (此处对test.txt文件的要求是,需要使用tab键把要加载的文件的值都隔开。)
修改表格:
mysql> alter table table_name add primary key(column_name);
mysql> alter table table_name drop primary key;
创建索引:
mysql> create index index_name on table_name(column_name);
删除索引:
mysql> drop index index_name on table_name(column_name);
(索引和不用索引的区别:在搜索加了索引的某一列的值时,这个值的位置越靠后越能显示index的作用。
例如:
表格m1的name列加了索引,表格m2没有加索引。在8万多行的位置插入了cygdrive的值。
select * from m1 where name='cygdrive';
select * from m2 where name='cygdrive';
m1表中查找所用的时间是0.00秒,m2表中查找的时间是0.02秒。)
创建视图:
mysql> create view db_name.view_name as select * from table_name;
删除视图:
mysql> drop view if exists db_name.view_name;
(视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在 数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。
视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时,应将名称指定为db_name.view_name。
表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。)
Distinct:选择出唯一的列的值。
mysql> select distinct column_name from table_name;
Order by: 按照某种方式排序。
mysql> select * from table_name order by column_name; 默认升序(asc)
mysql> select * from table_name order by column_name desc;降序
Group by:分类
mysql> select * from table_name group by column_name;
mysql> select name, count(*) from m1 group by name;
MAX: 最大值
mysql> select max(id) as maxid from m1; (搜索表格中最大的id)
mysql> select * from m1 where id=(select max(id) from m1); (搜索id最大的行的列)
列的最大值
mysql> select max(id) as maxid, name from m1 group by
模式匹配:"_"代表匹配任何单个字符; "%"代表匹配任意数目字符(包括零字符)。
mysql> select * from table_name where column_name like 'b%';
正则表达式扩展的匹配:
mysql> select * from table_name where column_name REGEXP '^b';
显示当前日期:
mysql> select current_date;
显示当前时间:
mysql> select now();
显示mysql版本:
mysql> select version();
显示数据库:test
mysql> select database();
show命令:
显示创建数据库的语句:
mysql> show create database test;
显示创建表格的语句:
mysql> show create table m1;
显示数据库中表格中的列:
mysql> show columns from m1;
mysql> show columns from m1 from test;
mysql> show columns from test.m1;
显示数据库支持的字符集:
mysql> show character set;
显示字符集的校对规则:
mysql> show collation;
mysql> show collation like 'latin%';
mysql> show collation where 'default'='yes';
显示创建数据库语句:
mysql> show create database db_name;
显示创建函数语句:
mysql> show create function function_name;
显示创建过程语句:
mysql> show create procedure procedure_name;
显示创建视图语句:
mysql> show create view view_name;
显示数据库引擎:
mysql> show engines;
显示数据库错误:
mysql> show errors;
mysql> show count(*) errors;
显示数据库警告:
mysql> show warnings;
显示数据库用户权限:
mysql> show grants;
mysql> show grants for 'charles'@localhost;
显示索引:
mysql> show index from table_name from db_name;
mysql> show index from db_name.table_name;
来源:http://hi.baidu.com/%B2%A9%B2%C5anan/blog/item/f4e6123f91eeceeb838b1349.html
shell> mysql --help
连接mysql:
shell> mysql -h localhost -u user -p
Enter password: ******
mysql> quit / ctl+c
不执行正在输入的命令:
mysql> SELECT
-> USER()
-> \c
输入\c取消它。
创建数据库:
mysql> Create database db_name;
使用数据库:
mysql> use db_name;
显示所有数据库:
mysql> show databases;
显示当前数据库中所有的表格:(也会显示当前数据库名称,显示方式tables_in_dbname)
mysql> show tables;
显示表格结构:
mysql> describe table_name;
创建表格:
mysql> create table if not exists table_name(id int(10) auto_increment not null primary key, name varchar(10) );
删除表格:
mysql> drop table table_name;
插入数据:(插入此行数据后,再插入数据的时候id从11开始自增)
mysql> insert into table_name(id, name) values(10, 'name10');
导入数据:(和insert的功能相同)
mysql> load data local infile 'c:/test/test.txt' into table table_name; (此处对test.txt文件的要求是,需要使用tab键把要加载的文件的值都隔开。)
修改表格:
mysql> alter table table_name add primary key(column_name);
mysql> alter table table_name drop primary key;
创建索引:
mysql> create index index_name on table_name(column_name);
删除索引:
mysql> drop index index_name on table_name(column_name);
(索引和不用索引的区别:在搜索加了索引的某一列的值时,这个值的位置越靠后越能显示index的作用。
例如:
表格m1的name列加了索引,表格m2没有加索引。在8万多行的位置插入了cygdrive的值。
select * from m1 where name='cygdrive';
select * from m2 where name='cygdrive';
m1表中查找所用的时间是0.00秒,m2表中查找的时间是0.02秒。)
创建视图:
mysql> create view db_name.view_name as select * from table_name;
删除视图:
mysql> drop view if exists db_name.view_name;
(视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在 数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。
视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时,应将名称指定为db_name.view_name。
表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。)
Distinct:选择出唯一的列的值。
mysql> select distinct column_name from table_name;
Order by: 按照某种方式排序。
mysql> select * from table_name order by column_name; 默认升序(asc)
mysql> select * from table_name order by column_name desc;降序
Group by:分类
mysql> select * from table_name group by column_name;
mysql> select name, count(*) from m1 group by name;
MAX: 最大值
mysql> select max(id) as maxid from m1; (搜索表格中最大的id)
mysql> select * from m1 where id=(select max(id) from m1); (搜索id最大的行的列)
列的最大值
mysql> select max(id) as maxid, name from m1 group by
模式匹配:"_"代表匹配任何单个字符; "%"代表匹配任意数目字符(包括零字符)。
mysql> select * from table_name where column_name like 'b%';
正则表达式扩展的匹配:
mysql> select * from table_name where column_name REGEXP '^b';
显示当前日期:
mysql> select current_date;
显示当前时间:
mysql> select now();
显示mysql版本:
mysql> select version();
显示数据库:test
mysql> select database();
show命令:
显示创建数据库的语句:
mysql> show create database test;
显示创建表格的语句:
mysql> show create table m1;
显示数据库中表格中的列:
mysql> show columns from m1;
mysql> show columns from m1 from test;
mysql> show columns from test.m1;
显示数据库支持的字符集:
mysql> show character set;
显示字符集的校对规则:
mysql> show collation;
mysql> show collation like 'latin%';
mysql> show collation where 'default'='yes';
显示创建数据库语句:
mysql> show create database db_name;
显示创建函数语句:
mysql> show create function function_name;
显示创建过程语句:
mysql> show create procedure procedure_name;
显示创建视图语句:
mysql> show create view view_name;
显示数据库引擎:
mysql> show engines;
显示数据库错误:
mysql> show errors;
mysql> show count(*) errors;
显示数据库警告:
mysql> show warnings;
显示数据库用户权限:
mysql> show grants;
mysql> show grants for 'charles'@localhost;
显示索引:
mysql> show index from table_name from db_name;
mysql> show index from db_name.table_name;
来源:http://hi.baidu.com/%B2%A9%B2%C5anan/blog/item/f4e6123f91eeceeb838b1349.html
在一个Nginx虚拟主机中,可以绑定多个server_name,例如:
server
{
listen 80;
server_name jackxiang.com www.jackxiang.com blog.jackxiang.com;
而server_name的先后顺序的不同,对PHP程序中使用$_SERVER["SERVER_NAME"]或getenv('SERVER_NAME')获取服务器域名是有影响的:
访问:jackxiang.com 是:jackxiang.com
访问:www.jackxiang.com 是:jackxiang.com
访问:blog.jackxiang.com 还是:jackxiang.com
Nginx下的PHP获取的使终是第一个域名!!!
$_SERVER["SERVER_NAME"]或getenv('SERVER_NAME')获取的始终将是Nginx server_name配置中的第一个域名,这一点在程序开发中需要注意。这第一个域名就相当于Apache虚拟主机配置中的ServerName,后面的域名就相当于Apache的ServerAlias
PS:以下是网友Daze的留言,希望对本文读者有所帮助。
在某些情况下(具体可参考 wiki.nginx.org),Nginx 内部重定向规则会被启动,例如,当 URL 指向一个目录并且在最后没有包含“/”时,Nginx 内部会自动的做一个 301 重定向,这时会有两种情况:
1、server_name_in_redirect on(默认),URL 重定向为: server_name 中的第一个域名 + 目录名 + /;
2、server_name_in_redirect off,URL 重定向为: 原 URL 中的域名 + 目录名 + /。
当你有多个域名要指向同一个虚拟主机,并且你自己写 301 重定向规则把它们合并到某一个域名时,情况就更复杂了:
首先,nginx 检查 URL,如果符合条件,就用该规则(你写的)做第一遍重定向,接着,检查新生成的 URL,如果符合内部自动重定向之条件,就用前面提到的规则再做一次重定向。
至于 PHP 的 $_SERVER["SERVER_NAME"],在 nginx 中默认是由 nginx 的变量 $server_name 提供,这时它和重定向没有关系,始终是 server_name 设置中的第一个域名,但这是可以被改变的,在你的 nginx 配置中找到 fastcgi_param 部分,修改
fastcgi_param SERVER_NAME $server_name;
为
fastcgi_param SERVER_NAME $host;
但现在就要注意了,此时的 $_SERVER["SERVER_NAME"] 会受你写的和 nginx 自己的重定向规则所影响而变化。
现在就清楚了,如果 MediaWiki 是通过 $_SERVER["SERVER_NAME"] 来自己处理 URL 的话,那么在 nginx + php 的默认环境下,它获得的将始终是 server_name 设置中的第一个域名,所以造成了“不管通过什么域名访问 MediaWiki 首页,都会被跳转到其中的一个域名上。”,这不是 nginx 的重定向造成的,虽然默认 server_name_in_redirect 是 on,但这个指令的影响范围仅仅只是 nginx 自己内部的重定向规则,所以,当你在 nginx + php 的环境中使用多域名虚拟主机,并且你的 php 库、框架、代码大量使用 $_SERVER["SERVER_NAME"] 时,你也许应该:
1、设置 fastcgi_param SERVER_NAME $host;
2、设置 server_name_in_redirect off; 让 nginx 在处理自己内部重定向时不默认使用 server_name 设置中的第一个域名;
3、不要使用 nginx 的 rewrite 规则来重定向、合并多个域名。
当然,后俩条是完全可选的,前提是你清楚你在做什么并且小心处理这时的 $_SERVER["SERVER_NAME"],也许更好的做法是保持 fastcgi_param SERVER_NAME $server_name; ,然后合理使用 $_SERVER["SERVER_NAME"] 和 $_SERVER["HTTP_HOST"]。
这个问题确实很微妙,也许我的理解还是不完全,好在还有 curl ,慢慢研究了。 :-)
P.S. nginx 0.7.x 之前的版本还有一个指令 optimize_server_names 会影响内部重定向规则。
来源:http://blog.s135.com/post/382/
server
{
listen 80;
server_name jackxiang.com www.jackxiang.com blog.jackxiang.com;
而server_name的先后顺序的不同,对PHP程序中使用$_SERVER["SERVER_NAME"]或getenv('SERVER_NAME')获取服务器域名是有影响的:
访问:jackxiang.com 是:jackxiang.com
访问:www.jackxiang.com 是:jackxiang.com
访问:blog.jackxiang.com 还是:jackxiang.com
Nginx下的PHP获取的使终是第一个域名!!!
$_SERVER["SERVER_NAME"]或getenv('SERVER_NAME')获取的始终将是Nginx server_name配置中的第一个域名,这一点在程序开发中需要注意。这第一个域名就相当于Apache虚拟主机配置中的ServerName,后面的域名就相当于Apache的ServerAlias
PS:以下是网友Daze的留言,希望对本文读者有所帮助。
在某些情况下(具体可参考 wiki.nginx.org),Nginx 内部重定向规则会被启动,例如,当 URL 指向一个目录并且在最后没有包含“/”时,Nginx 内部会自动的做一个 301 重定向,这时会有两种情况:
1、server_name_in_redirect on(默认),URL 重定向为: server_name 中的第一个域名 + 目录名 + /;
2、server_name_in_redirect off,URL 重定向为: 原 URL 中的域名 + 目录名 + /。
当你有多个域名要指向同一个虚拟主机,并且你自己写 301 重定向规则把它们合并到某一个域名时,情况就更复杂了:
首先,nginx 检查 URL,如果符合条件,就用该规则(你写的)做第一遍重定向,接着,检查新生成的 URL,如果符合内部自动重定向之条件,就用前面提到的规则再做一次重定向。
至于 PHP 的 $_SERVER["SERVER_NAME"],在 nginx 中默认是由 nginx 的变量 $server_name 提供,这时它和重定向没有关系,始终是 server_name 设置中的第一个域名,但这是可以被改变的,在你的 nginx 配置中找到 fastcgi_param 部分,修改
fastcgi_param SERVER_NAME $server_name;
为
fastcgi_param SERVER_NAME $host;
但现在就要注意了,此时的 $_SERVER["SERVER_NAME"] 会受你写的和 nginx 自己的重定向规则所影响而变化。
现在就清楚了,如果 MediaWiki 是通过 $_SERVER["SERVER_NAME"] 来自己处理 URL 的话,那么在 nginx + php 的默认环境下,它获得的将始终是 server_name 设置中的第一个域名,所以造成了“不管通过什么域名访问 MediaWiki 首页,都会被跳转到其中的一个域名上。”,这不是 nginx 的重定向造成的,虽然默认 server_name_in_redirect 是 on,但这个指令的影响范围仅仅只是 nginx 自己内部的重定向规则,所以,当你在 nginx + php 的环境中使用多域名虚拟主机,并且你的 php 库、框架、代码大量使用 $_SERVER["SERVER_NAME"] 时,你也许应该:
1、设置 fastcgi_param SERVER_NAME $host;
2、设置 server_name_in_redirect off; 让 nginx 在处理自己内部重定向时不默认使用 server_name 设置中的第一个域名;
3、不要使用 nginx 的 rewrite 规则来重定向、合并多个域名。
当然,后俩条是完全可选的,前提是你清楚你在做什么并且小心处理这时的 $_SERVER["SERVER_NAME"],也许更好的做法是保持 fastcgi_param SERVER_NAME $server_name; ,然后合理使用 $_SERVER["SERVER_NAME"] 和 $_SERVER["HTTP_HOST"]。
这个问题确实很微妙,也许我的理解还是不完全,好在还有 curl ,慢慢研究了。 :-)
P.S. nginx 0.7.x 之前的版本还有一个指令 optimize_server_names 会影响内部重定向规则。
来源:http://blog.s135.com/post/382/
你想让你的WordPress博客具有WIKI的功能吗?让更多的朋友参与到你的博客编辑中,那么,就看下今天介绍的这款插件WP-WIKI,这款插件可以像”维基编辑”那样检查文章和页面,让人们来订阅您的网站和参与编辑文档,并且支持内部链接和管道链接(Internal links and Piped links)、wiki模式目录(基于H2和H3标签)。
安装WP-WIKI插件后,添加了发布WordPress的页面或文章的“wiki维基编辑” 功能,当你编辑文章或者页面的屏幕的主编辑框下面会添加一个新的Wordpress Wiki复选框,你选中它后,那么就意味着任何人可以登陆到你的网站以一个WikiEditor维基编辑人的身份编辑这些特定的页面(测试时好像需要用户名和密码),如果你点击一个旧的修订链接,他只是展示让你详阅所有旧的修订链接。
WP-WIKI插件安装:
下载WP-WIKI插件,然后上传插件到/wp-content/plugins/下的文件夹。
到wp管理后台插件页面,点击”WP-WIKI激活插件,激活后插件后,在后台"Setting"--->"Wiki Settings",设置每页修改的数量。
在Appearance中的Widgets里添加My Contributions,它就会显示在网站的Widget侧栏上,这个模块基本上是增加链接到每个你贡献的文章或者页面,当你以管理员或编辑人的身份登入,在该页面将看到一个修订列表和最新修订条目有“编辑链接”。
官方介绍的功能倒是不少,像是RSS Feed、Wiki Links、格式化目录等,测试的时候,都没有发现这些功能,不知道是什么原因,不论如何,这款插件对于那些即爱好WIKI有热衷于WordPress的朋友来说,这是款不错的差价。
来源:http://www.wordpress.la/wordpress-wiki.html
安装WP-WIKI插件后,添加了发布WordPress的页面或文章的“wiki维基编辑” 功能,当你编辑文章或者页面的屏幕的主编辑框下面会添加一个新的Wordpress Wiki复选框,你选中它后,那么就意味着任何人可以登陆到你的网站以一个WikiEditor维基编辑人的身份编辑这些特定的页面(测试时好像需要用户名和密码),如果你点击一个旧的修订链接,他只是展示让你详阅所有旧的修订链接。
WP-WIKI插件安装:
下载WP-WIKI插件,然后上传插件到/wp-content/plugins/下的文件夹。
到wp管理后台插件页面,点击”WP-WIKI激活插件,激活后插件后,在后台"Setting"--->"Wiki Settings",设置每页修改的数量。
在Appearance中的Widgets里添加My Contributions,它就会显示在网站的Widget侧栏上,这个模块基本上是增加链接到每个你贡献的文章或者页面,当你以管理员或编辑人的身份登入,在该页面将看到一个修订列表和最新修订条目有“编辑链接”。
官方介绍的功能倒是不少,像是RSS Feed、Wiki Links、格式化目录等,测试的时候,都没有发现这些功能,不知道是什么原因,不论如何,这款插件对于那些即爱好WIKI有热衷于WordPress的朋友来说,这是款不错的差价。
来源:http://www.wordpress.la/wordpress-wiki.html
#service servicename status是当前状态
#chkconfig --list servicename是查看启动状态,也就是是否开机自动启动
首先写好脚本,如 mysql,把它放到 /etc/init.d 下,修改属性:
$ sudo chmod x mysql
创建符号连接:
$ cd /etc
下面有这么几个目录值得注意:
rcS.d rc0.d rc1.d ... rc6.d ,(0,1... 6 代表启动级别 0代表停止,1代表单用户模式,2-5代表多用户模式,6代表重启)
它们的作用就相当于 redhat 下的 rc.d ,你可以把脚本放到 rcS.d,然后修改文件名,给它一个启动序号,如 S88mysql.不过最好的办法是放到相应的启动级别下面。
具体作法
$ sudo runlevel // 查看当前系统的启动级别,默认情况下是级别2
$ update-rc.d mysql start 98 2 . // 前提是事先把 mysql 放到 /etc/init.d目录下, 98 为启动序号,2是系统的运行级别,可自己调整,注意不要忘了结尾的句点。
现在我们到 /etc/rc2.d 下,就多了一个 S98mysql 这样的符号链接。
然后启动系统,测试一下设置是否有效。
当你需要移除这个符号连接时,方法有三种:
1.直接到 /etc/rc2.d 下删掉相应的链接,当然不是最好的方法
2. $ update-rc.d -f s10 remove //推荐做法
3. 如果 update-rc.d 命令你不熟悉,还可以试试看 rcconf 这个命令,也很方便。
来源:http://hi.baidu.com/hosewen/blog/item/e77e27dbf4da4d68d0164e8e.html阅读全文
#chkconfig --list servicename是查看启动状态,也就是是否开机自动启动
首先写好脚本,如 mysql,把它放到 /etc/init.d 下,修改属性:
$ sudo chmod x mysql
创建符号连接:
$ cd /etc
下面有这么几个目录值得注意:
rcS.d rc0.d rc1.d ... rc6.d ,(0,1... 6 代表启动级别 0代表停止,1代表单用户模式,2-5代表多用户模式,6代表重启)
它们的作用就相当于 redhat 下的 rc.d ,你可以把脚本放到 rcS.d,然后修改文件名,给它一个启动序号,如 S88mysql.不过最好的办法是放到相应的启动级别下面。
具体作法
$ sudo runlevel // 查看当前系统的启动级别,默认情况下是级别2
$ update-rc.d mysql start 98 2 . // 前提是事先把 mysql 放到 /etc/init.d目录下, 98 为启动序号,2是系统的运行级别,可自己调整,注意不要忘了结尾的句点。
现在我们到 /etc/rc2.d 下,就多了一个 S98mysql 这样的符号链接。
然后启动系统,测试一下设置是否有效。
当你需要移除这个符号连接时,方法有三种:
1.直接到 /etc/rc2.d 下删掉相应的链接,当然不是最好的方法
2. $ update-rc.d -f s10 remove //推荐做法
3. 如果 update-rc.d 命令你不熟悉,还可以试试看 rcconf 这个命令,也很方便。
来源:http://hi.baidu.com/hosewen/blog/item/e77e27dbf4da4d68d0164e8e.html阅读全文
<form action="" method="get">
<a href="#" title=""></a><span id="search"><input type="text" onblur="if(this.value=='') this.value='获奖信息查询';" onfocus="if(this.value=='获奖信息查询') this.value='';" value="获奖信息查询" name="FQQ" id="FQQ">
<input name="" type="button" class="button" value="" onfocus="this.blur()" onclick="searchBlueRedZuan(document.getElementById('FQQ').value);"></span>
</h2></form>
JavaScript中document.getElementsByName(name)[0]的意思。
一般经常见到document.getElementsByName(name),末尾再加上“[0]”是为何意?document.getElementsByName(name)一定是数组吗?假如html文件中已确定只有一个变量的名字为name,那么是不是仍然要加"[0]"?
document.getElementsByName(name)是取得页面中标签名属性名为name的标签对象,此处的name是一个变量,具体值根据上下文来确定.标签允许name属性名可以同名,所以用此方法取得的往往是一个集合(数组),所以用后面加[0](如果多个还可以1,2等)来得到具体的值.如:
<a name=c1>...
<p name=c1>...
<input name=c2>...
使用document.getElementsByName(”c1“)[0]将获得a对象,document.getElementsByName(”c1“)[1]获取p标签对象.
注意:加在c1上的双引号是英文状态下的,现在例子中使用了全角的,因为百度新平台有点问题,会过滤掉带双引号的内容。
DCshi的这个,注意它是一个数组,通过下标0加点getAttribute来获取值:
document.getElementsByName("FQQ")[0].getAttribute("value")
<script>
document.getElementById("newid").onclick=function(){alert(this.value);}
</script>
来源:http://zhidao.baidu.com/question/199450007.html
值得学习的入门示例:
unction delEmpty($v)
{
if ($v==="" || $v==="php") //当数组中存在空值和php值时,换回false,也就是去掉该数组中的空值和php值
{
return false;
}
return true;
}
$a=array(0=>"pig",1=>"Cat",2=>"",3=>"php");
print_r(array_filter($a,"delEmpty"));
最后输出结果是:Array ( [0] => pig [1] => Cat ) 相信大家已经很明白array_filter的用法了,array_filter很强悍吧!
细化一下用来做数组的配置文件过滤:
剔除函数调用如下:
阅读全文
unction delEmpty($v)
{
if ($v==="" || $v==="php") //当数组中存在空值和php值时,换回false,也就是去掉该数组中的空值和php值
{
return false;
}
return true;
}
$a=array(0=>"pig",1=>"Cat",2=>"",3=>"php");
print_r(array_filter($a,"delEmpty"));
最后输出结果是:Array ( [0] => pig [1] => Cat ) 相信大家已经很明白array_filter的用法了,array_filter很强悍吧!
细化一下用来做数组的配置文件过滤:
剔除函数调用如下:
阅读全文
2010年03月23日 星期二 下午 07:02
定制安装的linux可能没有把rzsz包安装到系统,这对用securecrt这样的windows工具传输文件特别不方便。为了使用这个方便的法门,可以手动安装之。
1、 下载软件 rzsz-3.48.tar.gz。登录linux,用命令
wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载。
2、解压 tar zxvf rzsz-3.48.tar.gz
3、安装 cd rzsz-3.48 ; make posix 。注意:这个软件安装与常规的GNU软件不同—没有configure(配置)及make install (安装过程)。先执行命令make,看下Makefile里面的参数。
centos下选择选posix或linux就 可以了。
我make了一下显示:-bash: make: command not found。
貌似CentOS下默认系统没有安装编译器,SSH下安装一下:yum -y install gcc automake autoconf libtool make
查看源代码
打印帮助
01 [root@miao src]#make posix
02 cc -O -DPOSIX -DMD=2 rz.c -o rz
03 size rz
04 text data bss dec hex filename
05 25444 648 10464 36556 8ecc rz
06 rm -f rb rx rc
07 ln rz rb
08 ln rz rx
09 ln rz rc
10 cc -O -DPOSIX sz.c -o sz
11 siz
定制安装的linux可能没有把rzsz包安装到系统,这对用securecrt这样的windows工具传输文件特别不方便。为了使用这个方便的法门,可以手动安装之。
1、 下载软件 rzsz-3.48.tar.gz。登录linux,用命令
wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载。
2、解压 tar zxvf rzsz-3.48.tar.gz
3、安装 cd rzsz-3.48 ; make posix 。注意:这个软件安装与常规的GNU软件不同—没有configure(配置)及make install (安装过程)。先执行命令make,看下Makefile里面的参数。
centos下选择选posix或linux就 可以了。
我make了一下显示:-bash: make: command not found。
貌似CentOS下默认系统没有安装编译器,SSH下安装一下:yum -y install gcc automake autoconf libtool make
查看源代码
打印帮助
01 [root@miao src]#make posix
02 cc -O -DPOSIX -DMD=2 rz.c -o rz
03 size rz
04 text data bss dec hex filename
05 25444 648 10464 36556 8ecc rz
06 rm -f rb rx rc
07 ln rz rb
08 ln rz rx
09 ln rz rc
10 cc -O -DPOSIX sz.c -o sz
11 siz