1、免费,是世界上最贵的东西。
免费是个很诱人的东西,最显着的例子就是马云和马化腾。看看开始,QQ和淘宝就知道了:先让你不花钱也能感到比花了钱还爽,不花钱就能开店。当我们恍然大悟的时候--你已经离不开它,你身边的所有人都在用QQ,从七岁到七十岁,无一例外。再看看淘宝:从BB到古稀老人都热充网上购物,最热门的话题就是--相约于淘宝。淘宝现在是值钱的“旺铺”。
2、要假设你融不到一分钱的情况去做事业。
什么叫没钱?不是说你吃饭都没钱,如果真是那样,还不如去领取救济金的实在。如果你创业只想融资,那就也要假设一个融不到资的情况,毕竟你身边的的兄弟都以你的马首是瞻,你自己爬不好摔死了是你活该,但是砸死一堆兄弟就是你不对了。融资的途径很多,但能融到资的毕竟不多。不要眼高手低,踏实做事的人才有收获。
3、花时间去学习别人成功的经验,也花时间去学习别人失败的经验
看了《赢再中国》这节目收获很多,很多精彩的评论的。我认为,等你什么时候能看别人惨败的经验,看得一身冷汗,你就离成功不远了。如今反映成功的例子和书越来越多,创业者也读到了。非常期待马云的《阿里巴巴的10001个错误》,肯定是惊世之作!
4、营销最佳的语言是自己的语言,而不是套用别人的话
能打动用户的,只有你自己最真实的东西。套话谁都在说,特别是名言,大家都套用,你说的不烦人家听的都烦了,营销需要的是一个人,一个聪明的人,而不是一台的复读机。
5、每个创业者都要有使命感,但必须要有能做到的使命感!
很多人认为使命感是大企业的事情,甚至可有可无,这是非常错误的思想。很多世界大企业都拥有强烈的使命感,我没要向别人学习,但就不能张口说大话,这样会让人觉得你浮夸,不实际。
6、最优秀的创业一定是简单的!优秀的公司一定是简单的!
很多创业者认为成功要走多元化业务,其实最优秀的公司是最简单的。
这里的简单并不是指平凡,而是代表:专注。最优秀的创业者,世界最优秀的公司一直只做一件事。
7、如果你的公司目前只有两个人,你就在名片上把自己的称呼放低一点儿,这样会赢得尊重!
很多刚创业者,明明只有个人,非得告诉说人是CEO,这是COO,这是CFO,身兼数职。可能吗?别人还会相信你?不会,这样的企业是不值得相信的。
8、成功的企业一定要搞清楚为什么成功
成功的企业是创业者的学习对象,为什么成功?学习,不是模仿,切忌不是模仿别人的做法,别人的成功是模仿不来的。
免费是个很诱人的东西,最显着的例子就是马云和马化腾。看看开始,QQ和淘宝就知道了:先让你不花钱也能感到比花了钱还爽,不花钱就能开店。当我们恍然大悟的时候--你已经离不开它,你身边的所有人都在用QQ,从七岁到七十岁,无一例外。再看看淘宝:从BB到古稀老人都热充网上购物,最热门的话题就是--相约于淘宝。淘宝现在是值钱的“旺铺”。
2、要假设你融不到一分钱的情况去做事业。
什么叫没钱?不是说你吃饭都没钱,如果真是那样,还不如去领取救济金的实在。如果你创业只想融资,那就也要假设一个融不到资的情况,毕竟你身边的的兄弟都以你的马首是瞻,你自己爬不好摔死了是你活该,但是砸死一堆兄弟就是你不对了。融资的途径很多,但能融到资的毕竟不多。不要眼高手低,踏实做事的人才有收获。
3、花时间去学习别人成功的经验,也花时间去学习别人失败的经验
看了《赢再中国》这节目收获很多,很多精彩的评论的。我认为,等你什么时候能看别人惨败的经验,看得一身冷汗,你就离成功不远了。如今反映成功的例子和书越来越多,创业者也读到了。非常期待马云的《阿里巴巴的10001个错误》,肯定是惊世之作!
4、营销最佳的语言是自己的语言,而不是套用别人的话
能打动用户的,只有你自己最真实的东西。套话谁都在说,特别是名言,大家都套用,你说的不烦人家听的都烦了,营销需要的是一个人,一个聪明的人,而不是一台的复读机。
5、每个创业者都要有使命感,但必须要有能做到的使命感!
很多人认为使命感是大企业的事情,甚至可有可无,这是非常错误的思想。很多世界大企业都拥有强烈的使命感,我没要向别人学习,但就不能张口说大话,这样会让人觉得你浮夸,不实际。
6、最优秀的创业一定是简单的!优秀的公司一定是简单的!
很多创业者认为成功要走多元化业务,其实最优秀的公司是最简单的。
这里的简单并不是指平凡,而是代表:专注。最优秀的创业者,世界最优秀的公司一直只做一件事。
7、如果你的公司目前只有两个人,你就在名片上把自己的称呼放低一点儿,这样会赢得尊重!
很多刚创业者,明明只有个人,非得告诉说人是CEO,这是COO,这是CFO,身兼数职。可能吗?别人还会相信你?不会,这样的企业是不值得相信的。
8、成功的企业一定要搞清楚为什么成功
成功的企业是创业者的学习对象,为什么成功?学习,不是模仿,切忌不是模仿别人的做法,别人的成功是模仿不来的。
写入到: /root/.bash_profile 文件即可,这个是首选:
或者:/root/.bashrc
ipL=`/sbin/ifconfig eth1|grep "inet addr:"|cut -d: -f 2|cut -d" " -f1`
export PS1="\u@$ipL:\w# "
或者:/root/.bashrc
ipL=`/sbin/ifconfig eth1|grep "inet addr:"|cut -d: -f 2|cut -d" " -f1`
export PS1="\u@$ipL:\w# "
PHP经常被与开源数据库MySQL配合使用来开发Web应用,它们在开源开发工具组合LAMP中是非常重要的一部分。在PHP 5.3中增加了一个名为MySQLInd的新功能,取代了以前的libmysql库,用来连接PHP和MySQL,并拥有优化MySQL性能和内存利用率的可能。
Alshanetsky表示,“当说到数据库时,多数情况下主要的瓶颈并非数据库接口的速度,而是数据库的操作。使用MySQLInd来取代标准的libmysql,肯定会带来速度的改善,不过我不认为它会让所有应用都提高运行速度。换句话说,使用高度调优MySQL应用的人将会看到新版PHP中更快速、更专用的接口所带来的速度提升。”
总体来说,Alshanetsky预计,通过从目前的PHP5.2转向PHP 5.3,用户应该会看到多数工作流程的性能将提高5%到15%,某些特定工作流程甚至可能看到更高的收益。
Alshanetsky表示,“当说到数据库时,多数情况下主要的瓶颈并非数据库接口的速度,而是数据库的操作。使用MySQLInd来取代标准的libmysql,肯定会带来速度的改善,不过我不认为它会让所有应用都提高运行速度。换句话说,使用高度调优MySQL应用的人将会看到新版PHP中更快速、更专用的接口所带来的速度提升。”
总体来说,Alshanetsky预计,通过从目前的PHP5.2转向PHP 5.3,用户应该会看到多数工作流程的性能将提高5%到15%,某些特定工作流程甚至可能看到更高的收益。
http://www.phpchina.com/resource/manual/smarty/language.function.insert.html
Insert 函数类似欲 inluce 函数,不同之处是 insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数.
Let's say you have a template with a banner slot at the top of the page. The banner can contain any mixture of HTML, images, flash, etc. so we can't just use a static link here, and we don't want this contents cached with the page. In comes the insert tag: the template knows #banner_location_id# and #site_id# values (gathered from a config file), and needs to call a function to get the banner contents.
例如你在页面上端使用一个带有广告条位置的模板,广告条可以包含任何HTML、图象、FLASH等混合信息. 因此这里不能使用一个静态的链接,同时我们也不希望该广告条被缓存. 这就需要在 insert 函数指定:#banner_location_id# 和 #site_id# 值(从配置文件中取),同时需要一个函数取广告条的内容信息.
Example 7-10. function insert
例 7-10. insert 函数演示
{* example of fetching a banner *}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
In this example, we are using the name "getBanner" and passing the parameters #banner_location_id# and #site_id#. Smarty will look for a function named insert_getBanner() in your PHP application, passing the values of #banner_location_id# and #site_id# as the first argument in an associative array. All insert function names in your application must be prepended with "insert_" to remedy possible function name-space conflicts. Your insert_getBanner() function should do something with the passed values and return the results. These results are then displayed in the template in place of the insert tag. In this example, Smarty would call this function: insert_getBanner(array("lid" => "12345","sid" => "67890")); and display the returned results in place of the insert tag.
在此例中,我们使用了 getBanner 作为 name 属性,同时传递了 #banner_location_id# 和 #site_id# 两个参数. 接下来 Smarty 在你的 php 程序中搜索名为 insert_getBanner() 的函数,#banner_location_id# 和 #site_id# 的值被组合成一个数组作为函数的第一个参数传递给该函数. 为了避免函数命名混乱,所有的 insert 函数都必须以 insert_ 开头. 你的 insert_getBanner() 函数根据传递的参数执行并返回执行的结果. 这些结果就显示在模板中调用该函数的位置. 在此例中 Smarty 调用该函数类似insert_getBanner(array("lid"=>"12345","sid"=>67890"));并将返回的结果显示在调用的位置.
If you supply the "assign" attribute, the output of the insert tag will be assigned to this template variable instead of being output to the template. NOTE: assigning the output to a template variable isn't too useful with caching enabled.
如果设置了 assign 属性,该属性对应的变量名用于保存待包含函数的输出,这样待包含函数的输出就不会直接显示了.注意:赋给模板变量的输出信息在缓存的时候同样无效.
If you supply the "script" attribute, this php script will be included (only once) before the insert function is executed. This is the case where the insert function may not exist yet, and a php script must be included first to make it work. The path can be either absolute, or relative to $trusted_dir. When security is enabled, the script must reside in $trusted_dir.
如果指定了 script 属性,在调用函数并执行前将先包含(只包含一次)script指定的 php 脚本. 这是为了防止被调用的函数不存在,先调用包含该函数的 php 脚本将避免该情况.
The Smarty object is passed as the second argument. This way you can reference and modify information in the Smarty object from within the insert function.
Smart 对象作为函数的第二个参数被传递,在待包含函数中可以通过 $this 访问并修改 smarty 对象信息.
Technical Note: It is possible to have portions of the template not cached. If you have caching turned on, insert tags will not be cached. They will run dynamically every time the page is created, even within cached pages. This works good for things like banners, polls, live weather, search results, user feedback areas, etc.
技术要点: 使模板的一部分不被缓存. 如果打开了缓存, insert 函数却不会被缓存,每次调用页面它们都会被动态加载,即使是在缓存页面中. 该特性可以广泛应用于广告条、投票、实时天气预报、搜索结果、反馈信息等区域.
Insert 函数类似欲 inluce 函数,不同之处是 insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数.
Let's say you have a template with a banner slot at the top of the page. The banner can contain any mixture of HTML, images, flash, etc. so we can't just use a static link here, and we don't want this contents cached with the page. In comes the insert tag: the template knows #banner_location_id# and #site_id# values (gathered from a config file), and needs to call a function to get the banner contents.
例如你在页面上端使用一个带有广告条位置的模板,广告条可以包含任何HTML、图象、FLASH等混合信息. 因此这里不能使用一个静态的链接,同时我们也不希望该广告条被缓存. 这就需要在 insert 函数指定:#banner_location_id# 和 #site_id# 值(从配置文件中取),同时需要一个函数取广告条的内容信息.
Example 7-10. function insert
例 7-10. insert 函数演示
{* example of fetching a banner *}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
In this example, we are using the name "getBanner" and passing the parameters #banner_location_id# and #site_id#. Smarty will look for a function named insert_getBanner() in your PHP application, passing the values of #banner_location_id# and #site_id# as the first argument in an associative array. All insert function names in your application must be prepended with "insert_" to remedy possible function name-space conflicts. Your insert_getBanner() function should do something with the passed values and return the results. These results are then displayed in the template in place of the insert tag. In this example, Smarty would call this function: insert_getBanner(array("lid" => "12345","sid" => "67890")); and display the returned results in place of the insert tag.
在此例中,我们使用了 getBanner 作为 name 属性,同时传递了 #banner_location_id# 和 #site_id# 两个参数. 接下来 Smarty 在你的 php 程序中搜索名为 insert_getBanner() 的函数,#banner_location_id# 和 #site_id# 的值被组合成一个数组作为函数的第一个参数传递给该函数. 为了避免函数命名混乱,所有的 insert 函数都必须以 insert_ 开头. 你的 insert_getBanner() 函数根据传递的参数执行并返回执行的结果. 这些结果就显示在模板中调用该函数的位置. 在此例中 Smarty 调用该函数类似insert_getBanner(array("lid"=>"12345","sid"=>67890"));并将返回的结果显示在调用的位置.
If you supply the "assign" attribute, the output of the insert tag will be assigned to this template variable instead of being output to the template. NOTE: assigning the output to a template variable isn't too useful with caching enabled.
如果设置了 assign 属性,该属性对应的变量名用于保存待包含函数的输出,这样待包含函数的输出就不会直接显示了.注意:赋给模板变量的输出信息在缓存的时候同样无效.
If you supply the "script" attribute, this php script will be included (only once) before the insert function is executed. This is the case where the insert function may not exist yet, and a php script must be included first to make it work. The path can be either absolute, or relative to $trusted_dir. When security is enabled, the script must reside in $trusted_dir.
如果指定了 script 属性,在调用函数并执行前将先包含(只包含一次)script指定的 php 脚本. 这是为了防止被调用的函数不存在,先调用包含该函数的 php 脚本将避免该情况.
The Smarty object is passed as the second argument. This way you can reference and modify information in the Smarty object from within the insert function.
Smart 对象作为函数的第二个参数被传递,在待包含函数中可以通过 $this 访问并修改 smarty 对象信息.
Technical Note: It is possible to have portions of the template not cached. If you have caching turned on, insert tags will not be cached. They will run dynamically every time the page is created, even within cached pages. This works good for things like banners, polls, live weather, search results, user feedback areas, etc.
技术要点: 使模板的一部分不被缓存. 如果打开了缓存, insert 函数却不会被缓存,每次调用页面它们都会被动态加载,即使是在缓存页面中. 该特性可以广泛应用于广告条、投票、实时天气预报、搜索结果、反馈信息等区域.
[个人原创]Linux vim 查看16进制之:%!xxd,XXd hexdump 查看16进制的方法,配合vi使用更棒
Php/Js/Shell/Go jackxiang 2010-10-20 11:23
[~/shell]# xxd -g 1 concat.sh
-g 1,2:1和2的区别就是:1 2分别是:66 6669 明白了吧,呵呵!
主要用途:可以用来查看PHP在windows下的utf8记事本编码的bom,会导致session,cookie,输出图片出现异常的bom,大名鼎鼎啊,ef bb bf 就是utf-8 bom,如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
如,注意efbb这个就是bom啦:
[~/shell]# hexdump bom.txt -C
00000000 ef bb bf 64 66 64 66 64 0a |...dfdfd.|
---------------------------------------------------------------------------------------------------------------------------------------------
[~/shell]# xxd -g 2 bom.txt
0000000: efbb bf64 6664 6664 0a ...dfdfd.
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
vi在linux下查看16进制文件的方法。
xxd
Creates a hex dump of the given file; it can also do the
reverse, so it can be used for binary patching
用法很简单:
在vi的命令状态下
:%!xxd ——将当前文本转换为16进制格式。(实践OK,但在windows下还是wxHexEditor界面打开好用)
:%!xxd -r ——将当前文件转换回文本格式。
于是乎:
将当前文本转换为16进制格式,Vi命令行模式,输入:
:%!xxd
将当前文件转换回文本格式,Vi命令行模式,输入:
:%!xxd -r
哈哈,就在这一转16进制后又转回来的时候,你就发现bom,露出了原型,0000000: efbb bfef bbbf 6466 6466 640a ......dfdfd.到转回来后出现<feff>dfdfd,哈哈哈哈,原形毕露了吧!
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[~/shell]# xxd -g 1 test.sh
0000000: 66 69 6c 65 6e 61 6d 65 3d 24 31 0a 73 74 72 69 filename=$1.stri
0000010: 6e 67 31 3d 65 78 69 73 74 0a 73 74 72 69 6e 67 ng1=exist.string
0000020: 32 3d 78 69 0a 63 6f 6d 6d 61 6e 64 3d 22 63 61 2=xi.command="ca
0000030: 74 20 24 66 69 6c 65 6e 61 6d 65 20 7c 20 67 72 t $filename | gr
0000040: 65 70 20 24 73 74 72 69 6e 67 31 20 7c 20 67 72 ep $string1 | gr
0000050: 65 70 20 24 73 74 72 69 6e 67 32 22 0a 65 76 61 ep $string2".eva
0000060: 6c 20 24 63 6f 6d 6d 61 6e 64 0a l $command.
---------------------------------------------------------------------------------------------------------------------------------------------
[~/shell]# xxd -g 2 test.sh
0000000: 6669 6c65 6e61 6d65 3d24 310a 7374 7269 filename=$1.stri
0000010: 6e67 313d 6578 6973 740a 7374 7269 6e67 ng1=exist.string
0000020: 323d 7869 0a63 6f6d 6d61 6e64 3d22 6361 2=xi.command="ca
0000030: 7420 2466 696c 656e 616d 6520 7c20 6772 t $filename | gr
0000040: 6570 2024 7374 7269 6e67 3120 7c20 6772 ep $string1 | gr
0000050: 6570 2024 7374 7269 6e67 3222 0a65 7661 ep $string2".eva
0000060: 6c20 2463 6f6d 6d61 6e64 0a l $command.
---------------------------------------------------------------------------------------------------------------------------------------------
当然你也可以这样:
[~/shell]# hexdump test.sh -C
00000000 66 69 6c 65 6e 61 6d 65 3d 24 31 0a 73 74 72 69 |filename=$1.stri|
00000010 6e 67 31 3d 65 78 69 73 74 0a 73 74 72 69 6e 67 |ng1=exist.string|
00000020 32 3d 78 69 0a 63 6f 6d 6d 61 6e 64 3d 22 63 61 |2=xi.command="ca|
00000030 74 20 24 66 69 6c 65 6e 61 6d 65 20 7c 20 67 72 |t $filename | gr|
00000040 65 70 20 24 73 74 72 69 6e 67 31 20 7c 20 67 72 |ep $string1 | gr|
00000050 65 70 20 24 73 74 72 69 6e 67 32 22 0a 65 76 61 |ep $string2".eva|
00000060 6c 20 24 63 6f 6d 6d 61 6e 64 0a |l $command.|
0000006b
Iframe刷新页面:
parent.window.location.reload();
div层刷行页面:window.location.reload();
建立table表:
插入如下数据:
ID FQQ FTime
1 372647693 2100-11-11
2 372647693 2100-11-11
1 372647694 2100-11-12
2 37264764 2100-11-15
查询如下:
查询结果:
退化为:
641009005 FQQ FTime
641009005 37264764 2100-11-15
641009005 372647693 2100-11-11
641009005 372647694 2100-11-12
CREATE TABLE `table` (
`ID` tinyint(4) NOT NULL,
`FQQ` varchar(12) NOT NULL,
`FTime` varchar(21) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
`ID` tinyint(4) NOT NULL,
`FQQ` varchar(12) NOT NULL,
`FTime` varchar(21) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
插入如下数据:
ID FQQ FTime
1 372647693 2100-11-11
2 372647693 2100-11-11
1 372647694 2100-11-12
2 37264764 2100-11-15
查询如下:
SELECT * , count( DISTINCT FQQ )
FROM `table`
GROUP BY FQQ
LIMIT 0 , 30
FROM `table`
GROUP BY FQQ
LIMIT 0 , 30
查询结果:
ID FQQ FTime count(distinct FQQ)
2 37264764 2100-11-15 1
1 372647693 2100-11-11 1
1 372647694 2100-11-12 1
2 37264764 2100-11-15 1
1 372647693 2100-11-11 1
1 372647694 2100-11-12 1
退化为:
SELECT 641009005 , FQQ, FTime
FROM `table`
GROUP BY FQQ
LIMIT 0 , 30
FROM `table`
GROUP BY FQQ
LIMIT 0 , 30
641009005 FQQ FTime
641009005 37264764 2100-11-15
641009005 372647693 2100-11-11
641009005 372647694 2100-11-12
在shell开发中,很多时候我们需要操作mysql数据库(比如:查询数据、导出数据等),但是我们又无法进入mysql命令行的环境,就需要在shell环境中模拟mysql的环境,使用mysql相关命令,本文总结几种shell操作mysql的方法,供大家参考。
方案1
view plaincopy to clipboardprint?
01.mysql -uuser -ppasswd -e"insert LogTable values(...)"
mysql -uuser -ppasswd -e"insert LogTable values(...)"
优点:语句简单
缺点:支持的sql相对简单
方案2
准备一个sql脚本,名字为update.sql,例如:
view plaincopy to clipboardprint?
01.CREATE TABLE `user` (
02. `id` varchar(36) NOT NULL COMMENT '主键',
03. `username` varchar(50) NOT NULL COMMENT '用户名',
04. `password` varchar(50) NOT NULL COMMENT '用户密码',
05. `createdate` date NOT NULL COMMENT '创建时间',
06. `age` int(11) NOT NULL COMMENT '年龄',
07. PRIMARY KEY (`id`)
08.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
09.DROP TABLE IF EXISTS `visit_log`;
10.CREATE TABLE `visit_log` (
11. `id` varchar(36) character set utf8 NOT NULL,
12. `type` int(11) NOT NULL,
13. `content` text character set utf8 NOT NULL,
14. `createdate` date NOT NULL,
15. PRIMARY KEY (`id`)
16.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='访问日志';
CREATE TABLE `user` (
`id` varchar(36) NOT NULL COMMENT '主键',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(50) NOT NULL COMMENT '用户密码',
`createdate` date NOT NULL COMMENT '创建时间',
`age` int(11) NOT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
DROP TABLE IF EXISTS `visit_log`;
CREATE TABLE `visit_log` (
`id` varchar(36) character set utf8 NOT NULL,
`type` int(11) NOT NULL,
`content` text character set utf8 NOT NULL,
`createdate` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='访问日志';
新建一个update_mysql.sh,内容如下:
view plaincopy to clipboardprint?
01.use chbdb;
02.source update.sql
use chbdb;
source update.sql
然后执行如下命令:
view plaincopy to clipboardprint?
01.cat update_mysql.sh | mysql --user=root -ppassword
cat update_mysql.sh | mysql --user=root -ppassword
优点:支持复杂的sql脚本
缺点:
1> 需要两个文件:update.sql和update_mysql.sh
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案3
新建一个shell脚本,格式如下:
view plaincopy to clipboardprint?
01.#!/bin/bash
02.mysql -u* -h* -p* <<EOF
03. Your SQL script.
04.EOF
#!/bin/bash
mysql -u* -h* -p* <<EOF
Your SQL script.
EOF
例如:
view plaincopy to clipboardprint?
01.#!/bin/bash
02.mysql -uroot -ppassword <<EOF
03. use chbdb;
04. CREATE TABLE user (
05. id varchar(36) NOT NULL COMMENT '主键',
06. username varchar(50) NOT NULL COMMENT '用户名',
07. password varchar(50) NOT NULL COMMENT '用户密码',
08. createdate date NOT NULL COMMENT '创建时间',
09. age int(11) NOT NULL COMMENT '年龄',
10. PRIMARY KEY (`id`)
11.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
#!/bin/bash
mysql -uroot -ppassword <<EOF
use chbdb;
CREATE TABLE user (
id varchar(36) NOT NULL COMMENT '主键',
username varchar(50) NOT NULL COMMENT '用户名',
password varchar(50) NOT NULL COMMENT '用户密码',
createdate date NOT NULL COMMENT '创建时间',
age int(11) NOT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
优点:
1>支持复杂的sql脚本
2>无需其它额外文件
缺点:
1> 表名、字段不能使用单引号,需要修改原有sql语句
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案4
准备一个sql脚本,如update.sql,然后执行如下命令:
view plaincopy to clipboardprint?
01.mysql -uroot -ppassword < update.sql
mysql -uroot -ppassword < update.sql
优点:支持复杂的sql脚本
缺点:
1> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
大家知道在mysql命令行中使用source命令,即使中间出错,后续脚本也会继续执行,但是如上几种方式,均无法解决该问题,如果大家有好的建议,请回复,谢谢!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hbcui1984/archive/2010/01/03/5125387.aspx
方案1
view plaincopy to clipboardprint?
01.mysql -uuser -ppasswd -e"insert LogTable values(...)"
mysql -uuser -ppasswd -e"insert LogTable values(...)"
优点:语句简单
缺点:支持的sql相对简单
方案2
准备一个sql脚本,名字为update.sql,例如:
view plaincopy to clipboardprint?
01.CREATE TABLE `user` (
02. `id` varchar(36) NOT NULL COMMENT '主键',
03. `username` varchar(50) NOT NULL COMMENT '用户名',
04. `password` varchar(50) NOT NULL COMMENT '用户密码',
05. `createdate` date NOT NULL COMMENT '创建时间',
06. `age` int(11) NOT NULL COMMENT '年龄',
07. PRIMARY KEY (`id`)
08.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
09.DROP TABLE IF EXISTS `visit_log`;
10.CREATE TABLE `visit_log` (
11. `id` varchar(36) character set utf8 NOT NULL,
12. `type` int(11) NOT NULL,
13. `content` text character set utf8 NOT NULL,
14. `createdate` date NOT NULL,
15. PRIMARY KEY (`id`)
16.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='访问日志';
CREATE TABLE `user` (
`id` varchar(36) NOT NULL COMMENT '主键',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(50) NOT NULL COMMENT '用户密码',
`createdate` date NOT NULL COMMENT '创建时间',
`age` int(11) NOT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
DROP TABLE IF EXISTS `visit_log`;
CREATE TABLE `visit_log` (
`id` varchar(36) character set utf8 NOT NULL,
`type` int(11) NOT NULL,
`content` text character set utf8 NOT NULL,
`createdate` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='访问日志';
新建一个update_mysql.sh,内容如下:
view plaincopy to clipboardprint?
01.use chbdb;
02.source update.sql
use chbdb;
source update.sql
然后执行如下命令:
view plaincopy to clipboardprint?
01.cat update_mysql.sh | mysql --user=root -ppassword
cat update_mysql.sh | mysql --user=root -ppassword
优点:支持复杂的sql脚本
缺点:
1> 需要两个文件:update.sql和update_mysql.sh
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案3
新建一个shell脚本,格式如下:
view plaincopy to clipboardprint?
01.#!/bin/bash
02.mysql -u* -h* -p* <<EOF
03. Your SQL script.
04.EOF
#!/bin/bash
mysql -u* -h* -p* <<EOF
Your SQL script.
EOF
例如:
view plaincopy to clipboardprint?
01.#!/bin/bash
02.mysql -uroot -ppassword <<EOF
03. use chbdb;
04. CREATE TABLE user (
05. id varchar(36) NOT NULL COMMENT '主键',
06. username varchar(50) NOT NULL COMMENT '用户名',
07. password varchar(50) NOT NULL COMMENT '用户密码',
08. createdate date NOT NULL COMMENT '创建时间',
09. age int(11) NOT NULL COMMENT '年龄',
10. PRIMARY KEY (`id`)
11.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
#!/bin/bash
mysql -uroot -ppassword <<EOF
use chbdb;
CREATE TABLE user (
id varchar(36) NOT NULL COMMENT '主键',
username varchar(50) NOT NULL COMMENT '用户名',
password varchar(50) NOT NULL COMMENT '用户密码',
createdate date NOT NULL COMMENT '创建时间',
age int(11) NOT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
优点:
1>支持复杂的sql脚本
2>无需其它额外文件
缺点:
1> 表名、字段不能使用单引号,需要修改原有sql语句
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案4
准备一个sql脚本,如update.sql,然后执行如下命令:
view plaincopy to clipboardprint?
01.mysql -uroot -ppassword < update.sql
mysql -uroot -ppassword < update.sql
优点:支持复杂的sql脚本
缺点:
1> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
大家知道在mysql命令行中使用source命令,即使中间出错,后续脚本也会继续执行,但是如上几种方式,均无法解决该问题,如果大家有好的建议,请回复,谢谢!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hbcui1984/archive/2010/01/03/5125387.aspx
陈胜滋长了骄傲情绪,听信谗言,诛杀故人,与起义群众的关系日益疏远。派往各地的将领也不听陈胜节制,甚至为争权夺利而互相残杀。如武臣到邯郸,自立为赵王,以陈余为大将军,张耳为丞相。陈胜命他率兵入关支持周文,他却抗命而派韩广略取燕地。韩广在燕地旧贵族的怂恿下,也自立为燕王。周市至魏地,立魏国旧贵族宁陵君咎为魏王。围攻荥阳的起义军将领田臧与吴广意见不合,竟假借陈胜之命杀死吴广,结果导致这支起义军的全军覆灭。而章邯在解除了起义军对荥阳的包围后,倾全力向陈县猛扑。陈胜亲自督军应战,不幸失利。秦二世二年十二月,陈胜退至下城父(今安徽蒙城西北),被判徒庄贾杀害。“张楚”政权至此遂亡。
说白了就是他们起义依靠的是阶级的仇恨以及一股血勇之气,当胜利来得如此快又如此大时,被胜利冲晕头脑的起义军领导阶层便开始无法适应了,这也就是人们常常说的打天下易,守天下难
项羽是楚国的没落贵族,而刘邦则是秦朝的一个小小政府官员,陈胜吴广起义给了他们一个实现自己梦想和霸业的机会,当陈胜吴广起义失败后,项羽和刘邦才逐渐走上历史舞台
被自己的贪欲害死,与其他人无关。
农民 心态,注定只是昙花一现
是被自己手下杀的,跟远在天边,互相不认识的项羽刘邦无关
被自己人害死的
吕雉的家族与吕不韦有联系吗?
◎吕雉的父亲吕公(吕文)是秦朝末年齐国始祖吕尚的后裔。
而吕不韦原是卫国的商人,后来到赵国,再到秦国为相。
两个家族无论其背景与身份,都不相同,没有任何关系。
说白了就是他们起义依靠的是阶级的仇恨以及一股血勇之气,当胜利来得如此快又如此大时,被胜利冲晕头脑的起义军领导阶层便开始无法适应了,这也就是人们常常说的打天下易,守天下难
项羽是楚国的没落贵族,而刘邦则是秦朝的一个小小政府官员,陈胜吴广起义给了他们一个实现自己梦想和霸业的机会,当陈胜吴广起义失败后,项羽和刘邦才逐渐走上历史舞台
被自己的贪欲害死,与其他人无关。
农民 心态,注定只是昙花一现
是被自己手下杀的,跟远在天边,互相不认识的项羽刘邦无关
被自己人害死的
吕雉的家族与吕不韦有联系吗?
◎吕雉的父亲吕公(吕文)是秦朝末年齐国始祖吕尚的后裔。
而吕不韦原是卫国的商人,后来到赵国,再到秦国为相。
两个家族无论其背景与身份,都不相同,没有任何关系。
firefox 浏览器ajax提交中文乱码完美解决
最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助。
众所周知,使用AJAX传送和接收中文参数时,如果不在客户端和服务器做相应的处理就会出现乱码问题,在网上相应的文章也不少,但是有的情况下很难从中找到符合自己理想的答案,我今天就是在网上找了很多,但是都差不多,讲ASP和JSP的比较多(我是用的PHP),所以到最后都没找到自己满意的答案。
AJAX的中文乱码可以大概分为两中,第一种是向服务器端发送中文参数时(xmlhttp.open(“get|post”,url,true)), 服务器端接收到的为乱码,这个也是我今天遇到的问题,没做处理之前,在IE里是正常的,但是在Firefox里面就出现了乱码,我先把接收到参数输出到一个文本里,没有发现什么问题,郁闷了,然后我就把查询语句在输出来观察(我这里是要从数据库里查出与参数相关的东西),终于发现问题,IE和 Firefox输出的参数不一样,虽然汉字上都一样,但是和前后连接上有细小的区别,于是认定了是编码问题,在网上查找了相关资料,都没能解决问题,但是得到一些启示,因为AJAX发送数据都是采用UTF-8编码的方式发送的,所以要在服务器端进行编码转换(我这里页面是采用GB2312编码的,如果是采用UTF-8的话应该不会有这步的问题),所以我在服务器端进行了UTF-8转GB2312,
$str=iconv(“UTF-8″,”GB2312″,$str);
然后测试,在Firefox上顺利解决了问题,以为大公告成了,可是再到IE下测试,发现IE又出现了问题,服务器端接收到的参数没值,这下就郁闷了,突然看到发送头设置了setRequestHeader(“Content-Type”,”application/x-www-form- urlencoded”);,就找到问题所在了,然后就在发送那里进行了参数编码:
geturl=encodeURI(geturl);
geturl=encodeURI(geturl); //两次也可以写成geturl=encodeURI(encodeURI(geturl));
xmlhttp.open(“GET”,geturl,true);
然后再到服务器端进行URL解码:
$str=urldecode($str); //解码
$ str =iconv(“UTF-8″,”GB2312″,$ str); //编码转换
注意:解码必须在编码转换前面,不然得不到正确值
保存测试,IE和Firefox都能正常了。
第二种就是服务器端向客户端输出中文时出现乱码,这类问题网上的答案就比较多了,也都能解决,为了避免各位再去查找,我在这里就COPY下J
原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。
ajax乱码解决办法一:
在服务器指定发送数据的格式:
在jsp文件中:
response.setContentType(“text/text;charset=UTF-8″);//返回的是txt文本文件
或是
response.setContentType(“text/xml;charset=UTF-8″);//返回的xml文件
PHP:header(”Content-Type:text/html;charset=GB2312”);
ajax乱码解决方法二:
PHP发送中文、Ajax接收
只需在php顶部加入一句:
header(‘Content-type: text/html;charset=GB2312′);
xmlHttp会正确解析其中的中文。
Ajax发送中文、PHP接收
这个比较复杂:
Ajax中先用encodeURIComponent对要提交的中文进行编码
PHP中:
$GB2312string=iconv( ‘UTF-8′, ‘gb2312//IGNORE’ , $RequestAjaxString);
PHP写入MySQL数据库
建立conn时,query一下set names “gb2312″
==================================================
注意红色部分!!!否则无法使用!!!具体原因自己猜!
iconv( “UTF-8″,”GBK” , $gametypes["name"]);
原创:
我的乱码问题是AJAX取数据时产生乱码,本来页面是采用GBK编码的。后来显示为乱码,我使用UE把它转换成UTF-8后,
页面上原来的元素就可以显示正确了。但是,数据库取出来的值还是会乱码。
ob_get_contents ();
取出所有的显示数据,然后输出到日志文件,显示全是乱码。
使用UE把文件再转换成GBK,然后再输出,显示就正确了。
这里再使用:header(‘Content-Type:text/html;charset=GBK’);
前台页面显示就正常。
来源:http://www.chhua.com/web-note313
最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助。
众所周知,使用AJAX传送和接收中文参数时,如果不在客户端和服务器做相应的处理就会出现乱码问题,在网上相应的文章也不少,但是有的情况下很难从中找到符合自己理想的答案,我今天就是在网上找了很多,但是都差不多,讲ASP和JSP的比较多(我是用的PHP),所以到最后都没找到自己满意的答案。
AJAX的中文乱码可以大概分为两中,第一种是向服务器端发送中文参数时(xmlhttp.open(“get|post”,url,true)), 服务器端接收到的为乱码,这个也是我今天遇到的问题,没做处理之前,在IE里是正常的,但是在Firefox里面就出现了乱码,我先把接收到参数输出到一个文本里,没有发现什么问题,郁闷了,然后我就把查询语句在输出来观察(我这里是要从数据库里查出与参数相关的东西),终于发现问题,IE和 Firefox输出的参数不一样,虽然汉字上都一样,但是和前后连接上有细小的区别,于是认定了是编码问题,在网上查找了相关资料,都没能解决问题,但是得到一些启示,因为AJAX发送数据都是采用UTF-8编码的方式发送的,所以要在服务器端进行编码转换(我这里页面是采用GB2312编码的,如果是采用UTF-8的话应该不会有这步的问题),所以我在服务器端进行了UTF-8转GB2312,
$str=iconv(“UTF-8″,”GB2312″,$str);
然后测试,在Firefox上顺利解决了问题,以为大公告成了,可是再到IE下测试,发现IE又出现了问题,服务器端接收到的参数没值,这下就郁闷了,突然看到发送头设置了setRequestHeader(“Content-Type”,”application/x-www-form- urlencoded”);,就找到问题所在了,然后就在发送那里进行了参数编码:
geturl=encodeURI(geturl);
geturl=encodeURI(geturl); //两次也可以写成geturl=encodeURI(encodeURI(geturl));
xmlhttp.open(“GET”,geturl,true);
然后再到服务器端进行URL解码:
$str=urldecode($str); //解码
$ str =iconv(“UTF-8″,”GB2312″,$ str); //编码转换
注意:解码必须在编码转换前面,不然得不到正确值
保存测试,IE和Firefox都能正常了。
第二种就是服务器端向客户端输出中文时出现乱码,这类问题网上的答案就比较多了,也都能解决,为了避免各位再去查找,我在这里就COPY下J
原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。
ajax乱码解决办法一:
在服务器指定发送数据的格式:
在jsp文件中:
response.setContentType(“text/text;charset=UTF-8″);//返回的是txt文本文件
或是
response.setContentType(“text/xml;charset=UTF-8″);//返回的xml文件
PHP:header(”Content-Type:text/html;charset=GB2312”);
ajax乱码解决方法二:
PHP发送中文、Ajax接收
只需在php顶部加入一句:
header(‘Content-type: text/html;charset=GB2312′);
xmlHttp会正确解析其中的中文。
Ajax发送中文、PHP接收
这个比较复杂:
Ajax中先用encodeURIComponent对要提交的中文进行编码
PHP中:
$GB2312string=iconv( ‘UTF-8′, ‘gb2312//IGNORE’ , $RequestAjaxString);
PHP写入MySQL数据库
建立conn时,query一下set names “gb2312″
==================================================
注意红色部分!!!否则无法使用!!!具体原因自己猜!
iconv( “UTF-8″,”GBK” , $gametypes["name"]);
原创:
我的乱码问题是AJAX取数据时产生乱码,本来页面是采用GBK编码的。后来显示为乱码,我使用UE把它转换成UTF-8后,
页面上原来的元素就可以显示正确了。但是,数据库取出来的值还是会乱码。
ob_get_contents ();
取出所有的显示数据,然后输出到日志文件,显示全是乱码。
使用UE把文件再转换成GBK,然后再输出,显示就正确了。
这里再使用:header(‘Content-Type:text/html;charset=GBK’);
前台页面显示就正常。
来源:http://www.chhua.com/web-note313
php中需要查看错误log,如何设置?
首先需要在php.ini打开开关和制定错误log路径
log_errors = On
error_log = d://phperror.log //windows下的设置
如果是在linux 下,使用lighttpd服务器,则可以使用如下方式查看log文件
tail -n 20 /usr/local/lighttpd/log/php-error.log
在php代码中如何记录log,在PHP官方文档中有个函数error_log(),使用方法如下:
定义和用法
error_log() 函数向服务器错误记录、文件或远程目标发送一个错误。
若成功,返回 true,否则返回 false。
语法
error_log(error,type,destination,headers)
______________________________________________________________
ini_set("error_log", "F:/wwwroot/7751/logs/php_error.log");
error_log("index.php exec...", 0);
如果要打印出sql,则相应的query方法里加上error_log($sql,0);即可
error_log是要系统权限的,safe_mode下不能使用。
首先需要在php.ini打开开关和制定错误log路径
log_errors = On
error_log = d://phperror.log //windows下的设置
如果是在linux 下,使用lighttpd服务器,则可以使用如下方式查看log文件
tail -n 20 /usr/local/lighttpd/log/php-error.log
在php代码中如何记录log,在PHP官方文档中有个函数error_log(),使用方法如下:
定义和用法
error_log() 函数向服务器错误记录、文件或远程目标发送一个错误。
若成功,返回 true,否则返回 false。
语法
error_log(error,type,destination,headers)
______________________________________________________________
ini_set("error_log", "F:/wwwroot/7751/logs/php_error.log");
error_log("index.php exec...", 0);
如果要打印出sql,则相应的query方法里加上error_log($sql,0);即可
error_log是要系统权限的,safe_mode下不能使用。
Firefox浏览器模拟iPad
下载一个 User Agent Switch 的插件。
安装之后,点击 工具 > Default User Agent > Edit User Agent,添加一个 iPad 的 User Agent。
User Agent 上面有了。
App Code Name 输入:iPad。
App Name 输入:Mobile Safari
App Version 输入:5.0 (Macintosh; en-US)
最新内存管理插件:
addons-memory firefox内存优化
发布一个快捷切换hosts的小工具:SwitchHosts!
http://oldj.net/article/switchhosts/
DownLoad:
https://github.com/oldj/SwitchHosts/downloads
http://cloud.github.com/downloads/oldj/SwitchHosts/SwitchHosts_v0.2.2.1785.zip
_______________________________________________________________
问:
那我在内网host,外网host,这块切换环境有没有好的Firefox插件?
答:
switchhost
chrome有插件
firefox上的post get工具:
最佳答案: 扩展 Live HTTP Headers 或者poster
DNS FLusher 2.0.5
Firefox插件 web developer查看cookie及Form表单值很方便,及其它两款不错的插件:
web developer https://addons.mozilla.org/zh-CN/firefox/addon/60/
小D词典
SecureLogin
Memory Fox简介:
这是一个具备释放Firefox内存功能的Firefox扩展,而且经过试用后发现效果相当明显,不仅具备给Firefox释放内存的功能,还具备给当前系统运行的所有程序释放内存的功能,而且使用起来非常简单,启用后一切事情全是自动的了,非常方便。
http://www.softinn.org/memory-fox/
我们采用Firefox的插件Regular Expression Tester(意思是“正则表达式测试工具”):
使用Regular Expression Tester
在Firefox的菜单栏选择“工具——扩展”,下拉菜单中选择Regular Expression Tester,就可以看到Regular Expression Tester的主界面。 我们可以看到,这个工具分为三大块,最上面的Regular Expression文本框用于输入正则表达式,中间的Search Text文本框用于输入待匹配的文本,下面的Result则显示匹配(还包括替换,将来我们会看到)的结果,左下角显示正则表达式操作进行的时间,右下角显示匹配发生的次数。
----------------------------------------------
HTML Regex Data Extractor正则表达式匹配,抓站神马的最合适了。
----------------------------------------------
有firefox缓存查看的插件么?新加插件:cache Viewer Continued 0.8。
第一名:Firebug firephp firecookie
switchHosts Change Hosts DNS Flusher pagediff web developer httpfox
第二名:Easy DragToGo
第三名:Web Develope
Firebug的jQuery开发伴侣 FireQueryr :blog.sina.com.cn/s/blog_4b93170a0102dt2s.html
LinrLightWeb :这软件帮 助你检查你的网页是否符合标准,结果将帮助你迅速地解决问题。
Html Validator :小巧有用。
Total Validator :安装前,请确认您已安装Firebug插件,1. 开启网页编辑模式,随意编辑网页——Fiddler的好搭档;
firequery
dns flusher
httpfox
firecookie
PageDiff
第四名:SecureLogin
第五名:IE Tab
第六名:MediaWrap
第七名:FlashGot
第八名:支持英语、日语的小D词典
第九名:让FireFox使用IE收藏夹的PlainOldFavorites
第十名:Adblock_Plus
Fast Dial 3.4: Fast Dial 用一套网站的缩略图面板它取代了“about:blank”页面。右键点击缩略图,在上下文菜单依次选择“Fast Dial”、“设置URL”。选取一个 URL 之后点击“OK”。一两秒之后就会出现一个缩略图,以后只需点击缩略图就可以打开网站了。你也可以右键点击页面在上下文菜单中选择“添加到Fast Dial”来指定任何网页。
https://addons.mozilla.org/zh-cn/firefox/addon/fast-dial-5721/
下载一个 User Agent Switch 的插件。
安装之后,点击 工具 > Default User Agent > Edit User Agent,添加一个 iPad 的 User Agent。
User Agent 上面有了。
App Code Name 输入:iPad。
App Name 输入:Mobile Safari
App Version 输入:5.0 (Macintosh; en-US)
最新内存管理插件:
addons-memory firefox内存优化
发布一个快捷切换hosts的小工具:SwitchHosts!
http://oldj.net/article/switchhosts/
DownLoad:
https://github.com/oldj/SwitchHosts/downloads
http://cloud.github.com/downloads/oldj/SwitchHosts/SwitchHosts_v0.2.2.1785.zip
_______________________________________________________________
问:
那我在内网host,外网host,这块切换环境有没有好的Firefox插件?
答:
switchhost
chrome有插件
firefox上的post get工具:
最佳答案: 扩展 Live HTTP Headers 或者poster
DNS FLusher 2.0.5
Firefox插件 web developer查看cookie及Form表单值很方便,及其它两款不错的插件:
web developer https://addons.mozilla.org/zh-CN/firefox/addon/60/
小D词典
SecureLogin
Memory Fox简介:
这是一个具备释放Firefox内存功能的Firefox扩展,而且经过试用后发现效果相当明显,不仅具备给Firefox释放内存的功能,还具备给当前系统运行的所有程序释放内存的功能,而且使用起来非常简单,启用后一切事情全是自动的了,非常方便。
http://www.softinn.org/memory-fox/
我们采用Firefox的插件Regular Expression Tester(意思是“正则表达式测试工具”):
使用Regular Expression Tester
在Firefox的菜单栏选择“工具——扩展”,下拉菜单中选择Regular Expression Tester,就可以看到Regular Expression Tester的主界面。 我们可以看到,这个工具分为三大块,最上面的Regular Expression文本框用于输入正则表达式,中间的Search Text文本框用于输入待匹配的文本,下面的Result则显示匹配(还包括替换,将来我们会看到)的结果,左下角显示正则表达式操作进行的时间,右下角显示匹配发生的次数。
----------------------------------------------
HTML Regex Data Extractor正则表达式匹配,抓站神马的最合适了。
----------------------------------------------
有firefox缓存查看的插件么?新加插件:cache Viewer Continued 0.8。
第一名:Firebug firephp firecookie
switchHosts Change Hosts DNS Flusher pagediff web developer httpfox
第二名:Easy DragToGo
第三名:Web Develope
Firebug的jQuery开发伴侣 FireQueryr :blog.sina.com.cn/s/blog_4b93170a0102dt2s.html
LinrLightWeb :这软件帮 助你检查你的网页是否符合标准,结果将帮助你迅速地解决问题。
Html Validator :小巧有用。
Total Validator :安装前,请确认您已安装Firebug插件,1. 开启网页编辑模式,随意编辑网页——Fiddler的好搭档;
firequery
dns flusher
httpfox
firecookie
PageDiff
第四名:SecureLogin
第五名:IE Tab
第六名:MediaWrap
第七名:FlashGot
第八名:支持英语、日语的小D词典
第九名:让FireFox使用IE收藏夹的PlainOldFavorites
第十名:Adblock_Plus
Fast Dial 3.4: Fast Dial 用一套网站的缩略图面板它取代了“about:blank”页面。右键点击缩略图,在上下文菜单依次选择“Fast Dial”、“设置URL”。选取一个 URL 之后点击“OK”。一两秒之后就会出现一个缩略图,以后只需点击缩略图就可以打开网站了。你也可以右键点击页面在上下文菜单中选择“添加到Fast Dial”来指定任何网页。
https://addons.mozilla.org/zh-cn/firefox/addon/fast-dial-5721/
string strip_tags ( string str [, string allowable_tags] ) 返回一个去除了HTML标签的字符串;可以使用第二个参数来设置不需要删除的标签。 这个函数是用来把HTML标签 还有XML标签 包括PHP标签都给省略去的一个函数。
使用方法:
前提:假如现在有这样一个字符串,
PHP代码
$str = "<p>我来自<b><a href='http://www.jackxiang.com'>Jackxiang的博客站</a></b></p>";
1.不保留任何HTML标签,代码会是这样:
PHP代码
echo strip_tags($str);
// 输出:我来自Jackxiang的博客站
2. 只保留<a>一个标签的话,只需要将<a>字符串写到strip_tags的第二个参数中,代码会是这样:
PHP代码
echo strip_tags($str, "<a>");
// 输出:我来自<a href='http://www.jackxiang.com'>Jackxiang的博客站</a>
3. 我们要保留<p>与<b>…多个标签,只需要将多个标签用空格分隔后写到strip_tags的第二个参数中,代码会是这样:
PHP代码
echo strip_tags($str, "<p> <b>");
// 输出:<p>我来自<b>Jackxiang的博客站</b></p>
问:这个标签可以多个不去掉吗?
空格间隔:上面的:
使用方法:
前提:假如现在有这样一个字符串,
PHP代码
$str = "<p>我来自<b><a href='http://www.jackxiang.com'>Jackxiang的博客站</a></b></p>";
1.不保留任何HTML标签,代码会是这样:
PHP代码
echo strip_tags($str);
// 输出:我来自Jackxiang的博客站
2. 只保留<a>一个标签的话,只需要将<a>字符串写到strip_tags的第二个参数中,代码会是这样:
PHP代码
echo strip_tags($str, "<a>");
// 输出:我来自<a href='http://www.jackxiang.com'>Jackxiang的博客站</a>
3. 我们要保留<p>与<b>…多个标签,只需要将多个标签用空格分隔后写到strip_tags的第二个参数中,代码会是这样:
PHP代码
echo strip_tags($str, "<p> <b>");
// 输出:<p>我来自<b>Jackxiang的博客站</b></p>
问:这个标签可以多个不去掉吗?
空格间隔:上面的:
echo strip_tags($str, "<p> <b>");
,空格隔开了<p>这儿是空格<b>; 即可!
linux的优势我想大家都知道,就是作为服务器,它非常高效稳定。然后对于一些24*7的服务器系统来说,即使系统非常稳定,也不能保证服务器时时刻刻都在运行,比如断电,服务进程异常停止,受到攻击崩溃点情况。为了解决这些问题,现在比较流行两台或者多台服务器集群,一台作为主服务器,令一台作为备用服务器,当主服务器的服务停止后,备用服务器立刻能够接管起主服务器的工作。
通过研究,发现linux下的这种工具很丰富。有免费的,也有收费的,比如linux-HA(http://www.linux-ha.org/),cman(也是不错的软件,通过图形界面来管理服务器节点)。还看到一个日本人开发的集群套件,单价几百万日元,当然这是因为收费的大多数原因是他们提供技术支持。
既然如此,到底这些集群软件是怎么实现的呢?其实并不复杂。
我写个简单的脚本来示范一下集群软件的工作原理,一台服务器是否在工作,我们可以形象地解释它有没有“心跳”
测试主机心跳点评脚本:我是以局域网中两台配置相同的机器,一台作为主服务器master(ip 192.168.0.1),令一台作
为备用服务器slave(ip 192.168.0.2,来提供httpd网站服务,网站的地址是192.168.0.111,属于master上一个浮动ip。
首先让主服务器开启网站服务,然后备用服务器关闭网站服务,运行如上脚本,然后slave会去ping master的IPI,并把
结果存入变量。光能ping通主机并不能保证网站服务还是可用的,于是我们用抓包软件抓取master的一张,若成功了,隔
三秒后再去重复以上步骤,ping不通slave就直接新建一个浮动ip,并开启httpd服务
若ping的通而抓不到包则slave也接管服务,并将master上的httpd服务当掉的消息存入日志。
当主服务器重新开机后,备用服务器应该把ip还给主服务器。于是当重新ping通master并抓包成功后,slave放弃浮动ip
并停止服务。
基本工作原理就是这样,区别在于集群软件用的相互之间测试心跳的途径不同,我用的是较为简单的icmp协议和测试服务
相结合的办法。简单实用,但是要考虑防火墙的具体配置情况,仅让192.168.0.2的icmp能通过,不让其他主机有机可趁于是
在master上配置防火墙。
来源:http://www.linuxdiyf.com/bbs/thread-70819-1-1.html
通过研究,发现linux下的这种工具很丰富。有免费的,也有收费的,比如linux-HA(http://www.linux-ha.org/),cman(也是不错的软件,通过图形界面来管理服务器节点)。还看到一个日本人开发的集群套件,单价几百万日元,当然这是因为收费的大多数原因是他们提供技术支持。
既然如此,到底这些集群软件是怎么实现的呢?其实并不复杂。
我写个简单的脚本来示范一下集群软件的工作原理,一台服务器是否在工作,我们可以形象地解释它有没有“心跳”
#!bin/bash
#description: I have created a cluster with two computers
#One is the master with IP--192.168.0.1
#The other one is the slave with IP--192.168.0.2
#The float_ip is 192.168.0.111
while true
do
ping 192.168.0.111 -c3 #&>/dev/null
result=$?
sleep 3
if [ $result -ne 0 ]
then
wget -t3 http://192.168.0.1 -O /dev/null #&>/dev/null
[ $? -ne 0 ] && ifconfig eth0:1 192.168.0.111
fi
&& echo "Master apache service is down">>/var/log/ha.log
if [ $result -eq 0 ]
then
ifconfig eth0:0|grep $float_ip
[ $? -ne 0 ] && ifconfig eth0:1 down
fi
done
#description: I have created a cluster with two computers
#One is the master with IP--192.168.0.1
#The other one is the slave with IP--192.168.0.2
#The float_ip is 192.168.0.111
while true
do
ping 192.168.0.111 -c3 #&>/dev/null
result=$?
sleep 3
if [ $result -ne 0 ]
then
wget -t3 http://192.168.0.1 -O /dev/null #&>/dev/null
[ $? -ne 0 ] && ifconfig eth0:1 192.168.0.111
fi
&& echo "Master apache service is down">>/var/log/ha.log
if [ $result -eq 0 ]
then
ifconfig eth0:0|grep $float_ip
[ $? -ne 0 ] && ifconfig eth0:1 down
fi
done
测试主机心跳点评脚本:我是以局域网中两台配置相同的机器,一台作为主服务器master(ip 192.168.0.1),令一台作
为备用服务器slave(ip 192.168.0.2,来提供httpd网站服务,网站的地址是192.168.0.111,属于master上一个浮动ip。
首先让主服务器开启网站服务,然后备用服务器关闭网站服务,运行如上脚本,然后slave会去ping master的IPI,并把
结果存入变量。光能ping通主机并不能保证网站服务还是可用的,于是我们用抓包软件抓取master的一张,若成功了,隔
三秒后再去重复以上步骤,ping不通slave就直接新建一个浮动ip,并开启httpd服务
若ping的通而抓不到包则slave也接管服务,并将master上的httpd服务当掉的消息存入日志。
当主服务器重新开机后,备用服务器应该把ip还给主服务器。于是当重新ping通master并抓包成功后,slave放弃浮动ip
并停止服务。
基本工作原理就是这样,区别在于集群软件用的相互之间测试心跳的途径不同,我用的是较为简单的icmp协议和测试服务
相结合的办法。简单实用,但是要考虑防火墙的具体配置情况,仅让192.168.0.2的icmp能通过,不让其他主机有机可趁于是
在master上配置防火墙。
iptables -I INPUT -p icmp --snat 192.168.0.2 -j accept
iptables -I INPUT -P icmp -j drop
对于基于TCP协议80端口的httpd服务也类似配置,这样就可以既实用又保证安全性了。iptables -I INPUT -P icmp -j drop
来源:http://www.linuxdiyf.com/bbs/thread-70819-1-1.html
1.数据库的操作:
perl对多种数据库操作都方法一样,且操作极其方便,简单,并且能够直接得到对数据库的操作结果。
Php对不同数据库操作方法不同,需要调用不同函数,且不能直接得到对数据库的操作结果。
Mod_perl对ORACLE数据库的访问速度快,在数据库访问速度上快于php。
2.Perl语言历史较长,在网上有很多的共享资源,实现各种功能的成熟的函数包内容丰富,性能稳定,经过了长期的测试,php的共
享资源没有perl丰富,因此在扩展性上不如perl.
Perl语言更能实现程序的模块化,面向对象,利于长期开发和大型网站,随着开发的深入,能够写出高效率的代码,代码的重用性高
,有利于后续版本的开发。
Php的嵌入式语言结构决定了它在代码重用和模块化管理上不如perl,它适用于短期的快速开发,但随着开发的深入,它比不过perl.
C语言也有很长的历史,但它不支持面向对象。
Java支持面向对象,优点很多,但限于目前的人力和能力,暂时无法使用。
3.在代码执行速度上,mod_perl与FastCGI采取了更好的解决方案,页面下载速度大为提高,并不次于php,优秀的函数包和访问率
高的页面可以采用驻留内存的方法。需要强调的是页面的下载速度是与多种因素有关的,如果采用模块化的编程,精简代码,速度怎
么会慢?只有效率不高的代码速度才会慢。
比较起来C和Java在执行速度上才具备真正的优势。
C也属于CGI脚本范畴,由perl向C语言转化比较容易,很多网站都采用这样的方式。
4.Perl的安装也更简单,perl是apache自带的,说明它们的结合更紧密,php需要自行安装。
5.放眼现在,国外真正优秀的门户网站都是用CGI编程,速度不慢,因为硬件设备是决定速度的关键。着眼未来,perl是一种稳定的
,扩展性强的,利于长期开发的语言,使用perl不会错。
Perl、PHP、ASP、JSP技术比较
本文将对目前最常用的四种动态网页语言Perl(Practical Extraction and Report Language)、PHP(Hypertext
Preprocessor)、ASP(Active Server Pages)、JSP(JavaServer Pages)进行一些技术性的比较。
Perl
Perl(Practical Extraction and Report Language)是一种很古老的脚本语言。最初的Web应用大多是用Perl编写的,Perl很
像C语言,使用非常灵活,对于文件操作和处理具有和C语言一样的方便快捷。
也正是因为Perl的灵活性和“过度”的冗余语法,也因此导致许多Perl程序的代码令人难以阅读和维护,因此使用的人在逐渐减
少,并且目前有被Python替代的可能。
另外Perl对于CPU的消耗似乎较高,效率似乎有一些不足。
Perl开发的成功案例:
Movable Type — 世界上使用最多的Blog系统之一,功能强大的足以和一个CMS系统相比拟。
Awstats — 非常经典的日志系统,速度极快,功能也非常强大。
结论:Perl在部分应用中能发挥很大优势,但其维护性差使得其普及变得很困难。
PHP
PHP(Hypertext Preprocessor)是一种嵌入HTML页面中的脚本语言。它大量地借用C和Perl语言的语法, 并结合PHP自己的特性
,使Web开发者能够快速地写出动态产生页面。
PHP是完全免费的开源产品,不用花钱,Apache和MYSQL也是用样免费开源,在国外非常流行,PHP和MYSQL搭配使用,可以非常快
速的搭建一套不错的动态网站系统,因此国外大多数主机系统都配有免费的APACHE+PHP+MYSQL。通常认为这种搭配的执行效率比
IIS+ASP+ACCESS要高,而后者的使用还必须另外交钱给微软。
PHP的语法和Perl很相似,但是PHP所包含的函数却远远多于Perl,PHP没有命名空间,编程时候必须努力避免模块的名称冲突。
一个开源的语言虽然需要简单的语法和丰富的函数,但PHP内部结构的天生缺陷导致了PHP不适合于编写比中小型业余网站更大的网站
。
PHP开发的成功案例:
MediaWiki — 著名的维基百科(Wiki)程序,如此庞大的条目居然只用PHP+MYSQL就能够支持,真是不可思议。
WordPress — 著名的Blog系统,功能上丝毫不输于Movable Type,不少用户都纷纷从Movable Type转移到了WordPress。
结论:PHP语法简单,非常易学易用,很利于快速开发各种功能不同的定制网站,PHP因为结构上的缺陷,使的PHP在复杂的大型
项目上的开发和维护都比较困难。
ASP
ASP(Active Server Pages)微软的Windows IIS系统自带的脚本语言,利用它可以执行动态的Web服务应用程序。ASP的语法非
常类似Visual BASIC,学过VB的人可以很快上手,ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的
一个不能很好支持跨平台的语言。
因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
ASP在国内异常流行,因为国内大多使用的是盗版的Windows和盗版的SQLServer,而ASP+COM+SQLServer实际上也是一种不错的
搭配,其性能也不输于PHP+MYSQL,特别是Windows系统和SQLServer都有图形界面,比APACHE和MYSQL易于维护,因此对于不重视知识
产权的国家来说也是一种不错的选择。
不过,正因为ASP很简单,所以单纯使用ASP所能完成的功能也是有限的,好在COM(Component Object Model)技术拯救了ASP,
微软提供了COM/DCOM技术,极大拓宽了ASP的应用范围,使得ASP几乎具有无限可扩充性。
结论:和PHP一样,ASP简单而易于维护,很适合小型网站应用,通过DCOM和MTS技术,ASP甚至还可以完成小规模的企业应用,但
ASP的致命缺点就是不支持跨平台的系统,在大型项目开发和维护上非常困难。
JSP
JSP(JavaServer Pages)是Sun公司推出的一种动态网页技术。JSP技术是以Java语言作为脚本语言的,熟悉JAVA语言的人可以
很快上手。
JSP本身虽然也是脚本语言,但是却和PHP、ASP有着本质的区别。PHP和ASP都是由语言引擎解释执行程序代码,而JSP代码却被编
译成Servlet并由Java虚拟机执行,这种编译操作仅在对JSP页面的第一次请求时发生。因此普遍认为JSP的执行效率比PHP和ASP都高
。
JSP是一种服务器端的脚本语言,最大的好处就是开发效率较高,JSP可以使用JavaBeans或者EJB(Enterprise JavaBeans)来执
行应用程序所要求的更为复杂的处理,但是这种网站架构因为其业务规则代码与页面代码混为一团,不利于维护,因此并不适应大型
应用的要求,取而代之的是基于MVC的Web架构。MVC的核心思想是将应用分为模型、视图和控制器三部分。模型是指应用程序的数据
,以及对这些数据的操作;视图是指用户界面;控制器负责用户界面和程序数据之间的同步。通过MVC的Web架构,可以弱化各个部分
的耦合关系,并将业务逻辑处理与页面以及数据分离开来,这样当其中一个模块的代码发生改变时,并不影响其他模块的正常运行,
所以基于MVC的Web架构更适应于大型应用开发的潮流。
因此,不少国外的大型企业系统和商务系统都使用以上的MVC架构,能够支持高度复杂的基于Web的大型应用。
结论:JSP对于网站开发来讲不像PHP和ASP那样易学易用,支持JAVA的主机也少于支持PHP的主机,这从一定程度上限制了Java技
术在网站上的发展,不过在企业软件应用上来讲,MVC还是拥有相当大的优势的,虽然其配置和部署相对其他脚本语言来说要复杂一
些,但对于跨平台的中大型企业应用系统来讲,基于JAVA技术的MVC架构几乎成为唯一的选择。
周偶然与fcicq讨论到一个关于perlcc的优化问题。据说用perlcc将perl程序编译成C程序后再用gcc -O3进行优化,速度可能会快一些。于是就测了测,顺便试了试其他语言的情况。
测试程序是Ackermann函数。也许用它来做benchmark不太合适,但毕竟这是个纯数学+多次递归+耗时的运算,也能反映一定问题吧。
先来看Perl的原版。
$ cat ack.pl
#!/usr/bin/perl
sub ackermann {
my ( $m, $n ) = @_;
return $n + 1 if $m == 0;
return ackermann( $m - 1, 1 ) if $n == 0;
return ackermann( $m - 1, ackermann( $m, $n - 1 ) );
}
print ackermann( 3, 10 ), "\n";
#!/usr/bin/perl
sub ackermann {
my ( $m, $n ) = @_;
return $n + 1 if $m == 0;
return ackermann( $m - 1, 1 ) if $n == 0;
return ackermann( $m - 1, ackermann( $m, $n - 1 ) );
}
print ackermann( 3, 10 ), "\n";
$ time ./ack.pl
8189
real 1m5.044s
user 1m4.412s
sys 0m0.620s结果约为65秒。然后用perlcc编译并gcc -O3优化试试:
$ cp /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/DynaLoader/DynaLoader.a .
$ ar xv DynaLoader.a # 先弄个必要的DynaLoader.o否则会连接错误
$ perl -c -o ack-perlcc.c ack.pl
$ gcc -O3 -c -o ack-perlcc.o `perl -MExtUtils::Embed -e ccopts` ack-perlcc.c
$ gcc -o ack-perlcc `perl -MExtUtils::Embed -e ldopts` DynaLoader.o ack-perlcc.o
$ time ./ack-perlcc
8189
real 1m3.487s
user 1m3.012s
sys 0m0.484s用了63秒,跟perl是同一数量级的。可见这个perlcc之后没什么效果。
遗憾之余顺手写了个纯C版本:
$ cat myack.c
#include <stdio.h>
int ackermann(int m, int n);
int main() {
int result = ackermann(3, 10);
printf("%d\n", result);
return 0;
}
int ackermann(int m, int n) {
if (m == 0) return n+1;
if (n == 0) return ackermann(m-1, 1);
return ackermann(m-1, ackermann(m, n-1));
}
int ackermann(int m, int n);
int main() {
int result = ackermann(3, 10);
printf("%d\n", result);
return 0;
}
int ackermann(int m, int n) {
if (m == 0) return n+1;
if (n == 0) return ackermann(m-1, 1);
return ackermann(m-1, ackermann(m, n-1));
}
$ gcc -O3 -o myack myack.c
$ time ./myack
8189
real 0m0.231s
user 0m0.228s
sys 0m0.004s哇!0.23秒,比perl语言快了280倍以上。看来谈到效率时果然C语言才是王道。也难怪为什么C程序员的待遇那么高了。
当然这个程序是纯粹的数学运算,发挥不出perl的长处,才会让perl效率如此低吧。
PHP也有同样的问题。还是这个Ackermann函数,用纯PHP写出来的效率很低,但如果将函数写成php extension再调用,效率几乎等同于C语言的效率。于是得出个结论,复杂的算法还是不要用PHP直接实现,而是写成extension吧。