这不是最新的文章,但绝对称得上经典,耐心看完后你会有所收获!
转自“蓝森林”网站
原作者迪-克斯莫(Roberto Di Cosmo)博士的网站
[译者按]本文是在法国互联网上流传很广的对微软的檄文,作者是计算机博士,现就职于法国巴黎第七大学计算机系。原文已经被翻译成英语、德语、西班牙语和意大利语,可以在http://www.pps.jussieu.fr/~dicosmo/找到。
一、引言
圣诞前期间,我再次被媒界铺天盖地的报道所震惊。“多媒体”、“万维网”、“互联网”这些时髦词汇及其派生物如雨后春笋充人耳目。在这些报纸、杂志和那些即兴“专家”眼里,您如果手里没有一台崭新的、价钱昂贵的、能把您带入那五彩缤纷的虚拟空间的计算机,您就不算是个幸福的人。
我们时刻都在听着一个永恒不变的教导:世界上只有一种计算机,它叫PC,当然一定是安装着Intel芯片的PC,而且世界上只存在一个必不可少的软件-微软生产的Window系列(大家干脆懒得去区分“操作系统”和“应用软件”这两个截然不同的名词,媒界所说的Window97实际上就是Window95捆绑上word、Excel等办公软件,被称为Office97的东西)。
更令人奇怪的还在后头,今天美国人已经开始从漫长的冬眠里觉醒,意识到这两个超级跨国公司的阴险嘴脸:它们利用自己的垄断地位,扼杀了无数产品性能远远高于自己的公司。而我们法国却厚颜无耻的在向这两个托拉斯献媚争宠。我佩服Ralph Nader(勇敢的站出来保护消费者的利益,令美国通用汽车公司撤回它们生产的不安全汽车),佩服美国司法部对微软的起诉,更佩服美国民众对此事的强烈反响:美国著名的亲微软的CNN电视台在网上做了民意测验,结果绝大多数网民支持司法部的举动,CNN竟然中止了此项调查,在无数网民的抗议下,不得不公布结果。
但是法国的民众还沉睡在微软那温柔的摇篮里,他们梦见一个仁慈的善者在向所有的学校乡村分发免费的Window95,真心实意的帮助法国弥补技术上的落后;他们微笑着看着天蓝色的屏幕上显示出一条条令人安心的信息,告诉用户某某环节某某过程引起了某某例外,当然这只是您自己的操作不当,不是Window的错误;他们在这美梦里从来不反问一下:一个比几十年前能把人类送上月球又安全送回来时所用的计算机还强劲几倍、几十倍的PC,被安装上微软的Office97以后,为什么不能正确的处理一本只有百来页的资料?
阅读全文
转自“蓝森林”网站
原作者迪-克斯莫(Roberto Di Cosmo)博士的网站
[译者按]本文是在法国互联网上流传很广的对微软的檄文,作者是计算机博士,现就职于法国巴黎第七大学计算机系。原文已经被翻译成英语、德语、西班牙语和意大利语,可以在http://www.pps.jussieu.fr/~dicosmo/找到。
一、引言
圣诞前期间,我再次被媒界铺天盖地的报道所震惊。“多媒体”、“万维网”、“互联网”这些时髦词汇及其派生物如雨后春笋充人耳目。在这些报纸、杂志和那些即兴“专家”眼里,您如果手里没有一台崭新的、价钱昂贵的、能把您带入那五彩缤纷的虚拟空间的计算机,您就不算是个幸福的人。
我们时刻都在听着一个永恒不变的教导:世界上只有一种计算机,它叫PC,当然一定是安装着Intel芯片的PC,而且世界上只存在一个必不可少的软件-微软生产的Window系列(大家干脆懒得去区分“操作系统”和“应用软件”这两个截然不同的名词,媒界所说的Window97实际上就是Window95捆绑上word、Excel等办公软件,被称为Office97的东西)。
更令人奇怪的还在后头,今天美国人已经开始从漫长的冬眠里觉醒,意识到这两个超级跨国公司的阴险嘴脸:它们利用自己的垄断地位,扼杀了无数产品性能远远高于自己的公司。而我们法国却厚颜无耻的在向这两个托拉斯献媚争宠。我佩服Ralph Nader(勇敢的站出来保护消费者的利益,令美国通用汽车公司撤回它们生产的不安全汽车),佩服美国司法部对微软的起诉,更佩服美国民众对此事的强烈反响:美国著名的亲微软的CNN电视台在网上做了民意测验,结果绝大多数网民支持司法部的举动,CNN竟然中止了此项调查,在无数网民的抗议下,不得不公布结果。
但是法国的民众还沉睡在微软那温柔的摇篮里,他们梦见一个仁慈的善者在向所有的学校乡村分发免费的Window95,真心实意的帮助法国弥补技术上的落后;他们微笑着看着天蓝色的屏幕上显示出一条条令人安心的信息,告诉用户某某环节某某过程引起了某某例外,当然这只是您自己的操作不当,不是Window的错误;他们在这美梦里从来不反问一下:一个比几十年前能把人类送上月球又安全送回来时所用的计算机还强劲几倍、几十倍的PC,被安装上微软的Office97以后,为什么不能正确的处理一本只有百来页的资料?

<?php
$year = $_REQUEST['year'];
$moth = $_REQUEST['moth'];
$title = "新浪互联星空播客每日运营报表";
$chword = iconv("UTF-8","GBK", $title);
$filename = $year.iconv("UTF-8","GBK", "年").$moth.iconv("UTF-8","GBK", "月").$day.$chword;
//$filename = $year."-".$moth;
header("Content-type:application/vnd.ms-excel");
//header("Content-Disposition:filename=test.xls");
header("Content-Disposition:filename=".$filename.".xls");
$title = "日期\tPV\tUIP\t注册用户数\t视频上传量\t视频播放量\t当日视频总量\t当日视频播放总时长\t\n";
echo iconv("UTF-8","GBK", $title); //由于php是utf8的编码,为此要转化为gbk到xsl中。。否则乱码
后面按照一定格式输出,比如用"\t"来分割各个字段。
while (!$rs->EOF)
{//遍历记录集
$result=array("day_key"=>$rs->fields['day_key'],"pv"=>$rs->fields['pv'],"uip"=>$rs->fields['uip'],"reg_member"=> $rs->fields['reg_member'],"upload_ct"=>$rs->fields['upload_ct'],"play_ct"=>$rs->fields['play_ct'],"video_total"=>$rs->fields['video_total'],"play_time"=>$rs->fields['play_time']);
//echo count($result);
foreach ($result as $value)
{
echo $value."\t";
}
echo "\n";
unset($result);
$rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
}
$year = $_REQUEST['year'];
$moth = $_REQUEST['moth'];
$title = "新浪互联星空播客每日运营报表";
$chword = iconv("UTF-8","GBK", $title);
$filename = $year.iconv("UTF-8","GBK", "年").$moth.iconv("UTF-8","GBK", "月").$day.$chword;
//$filename = $year."-".$moth;
header("Content-type:application/vnd.ms-excel");
//header("Content-Disposition:filename=test.xls");
header("Content-Disposition:filename=".$filename.".xls");
$title = "日期\tPV\tUIP\t注册用户数\t视频上传量\t视频播放量\t当日视频总量\t当日视频播放总时长\t\n";
echo iconv("UTF-8","GBK", $title); //由于php是utf8的编码,为此要转化为gbk到xsl中。。否则乱码
后面按照一定格式输出,比如用"\t"来分割各个字段。
while (!$rs->EOF)
{//遍历记录集
$result=array("day_key"=>$rs->fields['day_key'],"pv"=>$rs->fields['pv'],"uip"=>$rs->fields['uip'],"reg_member"=> $rs->fields['reg_member'],"upload_ct"=>$rs->fields['upload_ct'],"play_ct"=>$rs->fields['play_ct'],"video_total"=>$rs->fields['video_total'],"play_time"=>$rs->fields['play_time']);
//echo count($result);
foreach ($result as $value)
{
echo $value."\t";
}
echo "\n";
unset($result);
$rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
}
在编写php程序的时候,往往会出现对其post get 等的编码,于是就有对空格的处理,程序如下:
<?php
$file=file("D:\wwwroot\www\htdocs\sinanet.txt");
//$file=file("D:\wwwroot\www\htdocs\sinatest.txt");
$count=0;
$line=0;
for($i=0;$i<=count($file);$i++)
{
$line=$line+1;
echo $line."\n";
$result = explode("sinanet",$file[$i]);
for($j=0;$j<count($result);$j++)
{
if($result[$j])
{
$url="http://you.video.sina.com.cn/pg/search/iaskSearch.class.php?key=\"".urlencode($result[$j])."\"";
$judge=file_get_contents($url);
$judge_handle = strstr($judge,"抱歉");//专辑推荐
if($judge_handle)
{ $count=$count+1;
$rest = substr($judge_handle, 0, 14);
echo $rest;
echo "关键词:".$result[$j]."\n";
}else{
echo $url;
echo "\n关键词:".$result[$j]."可能没有出现抱歉***!"."\n";
}
}else{
echo "有问题:".$result[$j]."\n";
}
}
echo "\n";
}
echo "总共找到抱歉条目:".$count."分析文件".$line."行!";
?>
以上语句如果不用urlencode()来进行编码,往往容易出现问题,example:
<?php
$key = "Chinese Democracy";
$key = urlencode($key);
$url = "http://you.video.sina.com.cn/pg/search/iaskSearch.class.php?key=".$key;
$judge= file_get_contents($url);
echo $judge;
return;
$judge_handle = strstr($judge,"抱歉");//专辑推荐
if($judge_handle)
{
$count=$count+1;
$rest = substr($judge_handle, 0, 14);
echo $rest;
echo "关键词:".$result[$j]."\n";
}else{
echo $url;
echo "<br>关键词:".$result[$j]."可能没有出现抱歉***!"."\n";
}
?>
不加上urlencode会出现如下问题:$url = "http://you.video.sina.com.cn/pg/search/iaskSearch.class.php?key=’Chinese‘ 而不是:"Chinese Democracy",为此最好每次涉及到url的时候加上urlencode.
<?php
$file=file("D:\wwwroot\www\htdocs\sinanet.txt");
//$file=file("D:\wwwroot\www\htdocs\sinatest.txt");
$count=0;
$line=0;
for($i=0;$i<=count($file);$i++)
{
$line=$line+1;
echo $line."\n";
$result = explode("sinanet",$file[$i]);
for($j=0;$j<count($result);$j++)
{
if($result[$j])
{
$url="http://you.video.sina.com.cn/pg/search/iaskSearch.class.php?key=\"".urlencode($result[$j])."\"";
$judge=file_get_contents($url);
$judge_handle = strstr($judge,"抱歉");//专辑推荐
if($judge_handle)
{ $count=$count+1;
$rest = substr($judge_handle, 0, 14);
echo $rest;
echo "关键词:".$result[$j]."\n";
}else{
echo $url;
echo "\n关键词:".$result[$j]."可能没有出现抱歉***!"."\n";
}
}else{
echo "有问题:".$result[$j]."\n";
}
}
echo "\n";
}
echo "总共找到抱歉条目:".$count."分析文件".$line."行!";
?>
以上语句如果不用urlencode()来进行编码,往往容易出现问题,example:
<?php
$key = "Chinese Democracy";
$key = urlencode($key);
$url = "http://you.video.sina.com.cn/pg/search/iaskSearch.class.php?key=".$key;
$judge= file_get_contents($url);
echo $judge;
return;
$judge_handle = strstr($judge,"抱歉");//专辑推荐
if($judge_handle)
{
$count=$count+1;
$rest = substr($judge_handle, 0, 14);
echo $rest;
echo "关键词:".$result[$j]."\n";
}else{
echo $url;
echo "<br>关键词:".$result[$j]."可能没有出现抱歉***!"."\n";
}
?>
不加上urlencode会出现如下问题:$url = "http://you.video.sina.com.cn/pg/search/iaskSearch.class.php?key=’Chinese‘ 而不是:"Chinese Democracy",为此最好每次涉及到url的时候加上urlencode.
还是有关中文的问题。PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。
采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到。需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在 php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。
采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到。需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在 php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。
1. 必须有一个圈子。无论如何做都是画地为牢:不加入一个圈子,就成为所有人的敌人;加入一个圈子,就成为另一个圈子的敌人;加入两个圈子,就等于没有加入圈子。只有孤独求败的精英才可完全避免圈子的困扰——这种人通常只有一个圈子,圈子里只站着老板一个人。
2. 必须争取成为第二名。名次与帮助你的人数成正比——如果是第一名,将因缺乏帮助而成为第二名;第二名永远是得道多助的位置,坏处是永远不能成为第一名。
3. 必须理解职责的定义。职责是你必须要做的工作,但办公室的生存定律是,职责就是你必须要做的工作之外的所有工作。
4. 必须参加每一场饭局。如果参加,你在饭局上的发言会变成流言;如果不参加,你的流言会变成饭局上的发言。
5. 必须懂得八卦定理。和一位以上的同事成为亲密朋友,你的所有缺点与隐私将在办公室内公开;和一位以下的同事成为亲密朋友,所有人都会对你的缺点与隐私感兴趣。
6. 必须明白加班是一种艺术。如果你在上班时间做事,会因为没有加班而被认为不够勤奋;如果你不在上班时间做事,你会被认为工作效率低下而不得不去加班。
7. 必须熟练接受批评的方法。面对上司的判断,认为你没错,你缺乏认识问题的能力;认为你错了,你没有解决问题的能力——接受错误的最好方式就是对错误避而不谈。最后一条,不许和老板谈公正。
8. 必须理解“难得糊涂”的词义。糊涂让你被人认为没有主见,不糊涂让你被人认为难以相处——“难得糊涂”在于糊涂的时机,什么时候糊涂取决于你不糊涂的程度。
9. 必须明白集体主义是一种选择。如果你不支持大部分人的决定,想法一定不会被通过;如果你支持大部分人的决定,将减少晋升机会——有能力的人总是站在集体的反面。
阅读全文
2. 必须争取成为第二名。名次与帮助你的人数成正比——如果是第一名,将因缺乏帮助而成为第二名;第二名永远是得道多助的位置,坏处是永远不能成为第一名。
3. 必须理解职责的定义。职责是你必须要做的工作,但办公室的生存定律是,职责就是你必须要做的工作之外的所有工作。
4. 必须参加每一场饭局。如果参加,你在饭局上的发言会变成流言;如果不参加,你的流言会变成饭局上的发言。
5. 必须懂得八卦定理。和一位以上的同事成为亲密朋友,你的所有缺点与隐私将在办公室内公开;和一位以下的同事成为亲密朋友,所有人都会对你的缺点与隐私感兴趣。
6. 必须明白加班是一种艺术。如果你在上班时间做事,会因为没有加班而被认为不够勤奋;如果你不在上班时间做事,你会被认为工作效率低下而不得不去加班。
7. 必须熟练接受批评的方法。面对上司的判断,认为你没错,你缺乏认识问题的能力;认为你错了,你没有解决问题的能力——接受错误的最好方式就是对错误避而不谈。最后一条,不许和老板谈公正。
8. 必须理解“难得糊涂”的词义。糊涂让你被人认为没有主见,不糊涂让你被人认为难以相处——“难得糊涂”在于糊涂的时机,什么时候糊涂取决于你不糊涂的程度。
9. 必须明白集体主义是一种选择。如果你不支持大部分人的决定,想法一定不会被通过;如果你支持大部分人的决定,将减少晋升机会——有能力的人总是站在集体的反面。

MySQL5.1地的确提供了好多有力的工具来帮助我们DBA进行数据库管理。
现在看一下这个压力测试工具mysqlslap.
关于他的选项手册上以及--help介绍的很详细。
我解释一下一些常用的选项。
这里要注意的几个选项:
--concurrency代表并发数量,多个可以用逗号隔开,当然你也可以用自己的分隔符隔开,这个时候要用到--delimiter开关。
--engines代表要测试的引擎,可以有多个,用分隔符隔开。
--iterations代表要运行这些测试多少次。
--auto-generate-sql 代表用系统自己生成的SQL脚本来测试。
--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)
--number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。比如倒数第二个结果2=200/100。
--debug-info 代表要额外输出CPU以及内存的相关信息。
--number-int-cols 代表示例表中的INTEGER类型的属性有几个。
--number-char-cols 意思同上。
--create-schema 代表自己定义的模式(在MySQL中也就是库)。
--query 代表自己的SQL脚本。
--only-print 如果只想打印看看SQL语句是什么,可以用这个选项。
现在来看一些我测试的例子。
1、用自带的SQL脚本来测试。
MySQL版本为5.1.23
[root@localhost ~]# mysqlslap --defaults-file=/usr/local/mysql-maria/my.cnf --concurrency=50,100,200 --iterations=1 --number-int-cols=4 --number-char-cols=35 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam,innodb --number-of-queries=200 --debug-info -uroot -p1 -S/tmp/mysql_3310.sock
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.063 seconds
Minimum number of seconds to run all queries: 0.063 seconds
Maximum number of seconds to run all queries: 0.063 seconds
Number of clients running queries: 50
Average number of queries per client: 4
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.070 seconds
Minimum number of seconds to run all queries: 0.070 seconds
Maximum number of seconds to run all queries: 0.070 seconds
Number of clients running queries: 100
Average number of queries per client: 2
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.092 seconds
Minimum number of seconds to run all queries: 0.092 seconds
Maximum number of seconds to run all queries: 0.092 seconds
Number of clients running queries: 200
Average number of queries per client: 1
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.115 seconds
Minimum number of seconds to run all queries: 0.115 seconds
Maximum number of seconds to run all queries: 0.115 seconds
Number of clients running queries: 50
Average number of queries per client: 4
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.134 seconds
Minimum number of seconds to run all queries: 0.134 seconds
Maximum number of seconds to run all queries: 0.134 seconds
Number of clients running queries: 100
Average number of queries per client: 2
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.192 seconds
Minimum number of seconds to run all queries: 0.192 seconds
Maximum number of seconds to run all queries: 0.192 seconds
Number of clients running queries: 200
Average number of queries per client: 1
User time 0.06, System time 0.15
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 5803, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 8173, Involuntary context switches 528
我来解释一下结果的含义。
拿每个引擎最后一个Benchmark示例。
对于INNODB引擎,200个客户端同时运行这些SQL语句平均要花0.192秒。相应的MYISAM为0.092秒。
现在看一下这个压力测试工具mysqlslap.
关于他的选项手册上以及--help介绍的很详细。
我解释一下一些常用的选项。
这里要注意的几个选项:
--concurrency代表并发数量,多个可以用逗号隔开,当然你也可以用自己的分隔符隔开,这个时候要用到--delimiter开关。
--engines代表要测试的引擎,可以有多个,用分隔符隔开。
--iterations代表要运行这些测试多少次。
--auto-generate-sql 代表用系统自己生成的SQL脚本来测试。
--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)
--number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。比如倒数第二个结果2=200/100。
--debug-info 代表要额外输出CPU以及内存的相关信息。
--number-int-cols 代表示例表中的INTEGER类型的属性有几个。
--number-char-cols 意思同上。
--create-schema 代表自己定义的模式(在MySQL中也就是库)。
--query 代表自己的SQL脚本。
--only-print 如果只想打印看看SQL语句是什么,可以用这个选项。
现在来看一些我测试的例子。
1、用自带的SQL脚本来测试。
MySQL版本为5.1.23
[root@localhost ~]# mysqlslap --defaults-file=/usr/local/mysql-maria/my.cnf --concurrency=50,100,200 --iterations=1 --number-int-cols=4 --number-char-cols=35 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam,innodb --number-of-queries=200 --debug-info -uroot -p1 -S/tmp/mysql_3310.sock
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.063 seconds
Minimum number of seconds to run all queries: 0.063 seconds
Maximum number of seconds to run all queries: 0.063 seconds
Number of clients running queries: 50
Average number of queries per client: 4
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.070 seconds
Minimum number of seconds to run all queries: 0.070 seconds
Maximum number of seconds to run all queries: 0.070 seconds
Number of clients running queries: 100
Average number of queries per client: 2
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.092 seconds
Minimum number of seconds to run all queries: 0.092 seconds
Maximum number of seconds to run all queries: 0.092 seconds
Number of clients running queries: 200
Average number of queries per client: 1
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.115 seconds
Minimum number of seconds to run all queries: 0.115 seconds
Maximum number of seconds to run all queries: 0.115 seconds
Number of clients running queries: 50
Average number of queries per client: 4
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.134 seconds
Minimum number of seconds to run all queries: 0.134 seconds
Maximum number of seconds to run all queries: 0.134 seconds
Number of clients running queries: 100
Average number of queries per client: 2
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.192 seconds
Minimum number of seconds to run all queries: 0.192 seconds
Maximum number of seconds to run all queries: 0.192 seconds
Number of clients running queries: 200
Average number of queries per client: 1
User time 0.06, System time 0.15
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 5803, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 8173, Involuntary context switches 528
我来解释一下结果的含义。
拿每个引擎最后一个Benchmark示例。
对于INNODB引擎,200个客户端同时运行这些SQL语句平均要花0.192秒。相应的MYISAM为0.092秒。
一直在寻找一个完美的IDE统一体,可以统一完成所有PHP,javascript,css,html的编辑。
我一直在尝试,试过zend studio,editplus,ultraeditor,DW,始终无法在一个编辑器里完成所有的操作,怎样都会少那么一点支持。
终于!在zend studio for eclipse 出来之后我看到了希望,就是因为eclipse传说是个强大的插线板!
首次接触eclipse,经过几天的尝试,终于为这个插线板插上了完善的功能了。
1.PHP相关的所有功能zend studio for eclipse已经完善地提供了,只是用惯了zend studio 5.5的话会有点不习惯,咋说也要适应一下eclipse的习惯。
2.最难解决的是js和css的相关支持,特别是js,实在是让广大开发人员头痛的东西。用了几年的ultraeditor+alert()的编辑调试终于受不了了,于是一直在找一个完美一点的js编辑器,
【ultraeditor,editplus】之类的文本编辑器确实可以提供很快速的编辑,但是代码提示辅助实在不足,调试就更加不用说了,一句句alert()。
【Dreamweaver】也是很多人使用的,但这东西很明显不是专门为写js设计的,写css倒是很完美,对js基本只是提供了代码高亮而已
【1st javascript editor,Antechinus JavaScript Editor v9】这2个js编辑器可以说已经非常完善了,强大的代码提示,代码库辅助等功能,完全是为js而存在的。可惜的是这2者对中文的支持实在让人无奈,因为这2者都是不支持utf-8编码的文档的,所有utf-8编码的文档中的中文都只能看到乱码,只认gb2312 。没办法只能继续寻找。
【aptana】一个新兴的基于eclipse的插件,可以说这个插件已经完美地解决了js,css,html的编写了,加上强大的调试功能(非pro版的只支持firefox的调试,不知又没破解,pro版的就可以支持IE调试),唯一的缺点就是慢!没办法,基于eclipse的东西,至少准备200m 的空闲内存,通常是能吃掉200~300m的。
好!现在的问题就是在zend studio for eclipse 上插上aptana就完美啦
1.装好zend studio for eclipse,网上已经有完美的破解了
2.下载aptana的插件版:http://update.aptana.com/update/studio/3.2/ ,Download Plugin Update Site ,下载下来的zip文件不用解压。
3.插上:打开zend studio for eclipse,help->software updates->find and install...
选search for new features to install,next,New Archived site,选刚才下载的zip文件···之后就一步步next,accept的下去就是了。重启之后就完成了aptana的安装了
4.其实这样安装好之后还没没完成的,编辑起来无论是PHP还是HTML代码,都还是默认由zend来管理的,aptana还没能管事。(其实zend studio for eclipse已经可以比较好地支持js的代码提示了,当然没aptana强啦,还有就是不支持不支持css)。
5.最关键的一步就是让aptana来管理全部的*.html,*.js,*.css文件。
window->preferences->General->Editors->File Associations。就是在这页设置文件相关编辑器的,只要在这里设置
*.html,*.js,*.css的Association editors为aptan就可以(设置成Default)。
好了,现在又有一个问题,如果您是使用一些php框架,例如fleaphp,cakephp之类的,或者是smarty之类的,会有可能使用后缀比较特别的template文件,view文件。
例如cakephp使用的是*.thtml,当然这些文件后缀的使用是可以改变的(cakephp改起来比较不方便,而且可能会影响框架某些功能的使用,这个问题我在cakephp的官方论坛问过,大家都是建议改变编辑器的设置来支持*.thtml),而改变文件的支持就是在上面说的那页文件相关编辑器(File Associations)里面自己添加设置啦。
aptan新版本还可以支持php,我没有详细测试其功能,试了一下,代码提示的功能还是比较完善的,如果只使用代码提示功能还是可以代替一下zend studio的哦。
aptana的php插件:http://update.aptana.com/update/php/3.2/
安装方法跟aptana的安装一样,但是很如果装进去zend studio里很可能会抢掉zend的功能哦!反正我插进去后在*.thtml
文件里面无法使用···这点有待研究
写了这么多,算是对这几天的寻找做了总结吧,总结一下相关的关键点:
1.aptana,http://update.aptana.com/update/studio/3.2/
2.aptana的php插件:http://update.aptana.com/update/php/3.2/
3.eclipse文件相关编辑器设置:
window->preferences->General->Editors->File Associations。就是在这页设置文件相关编辑器的
4.模板文件特殊后缀的支持:文件相关编辑器(File Associations)
还要扩展一下 bugfree 和 project 提供 web浏览器给 eclipse也许是个解决方案。
开辟一个论坛 讨论开发工具集成方案 和 部署服务方案 以及 各种工具的优化应用模式 还有 好的项目管理模式以及开发模式。
zendeclipse 直接将 apatan下的plugins features拷贝到 zendeclipse下就可以在zend下开启apatan的相关功能,再将apatan安装一遍,对任意文件进行调试,aptana会提示要安装 firebug插件,同意。安装后卸载apatan。这样就可以使用 apatan的firebug了。需要注意的是调试前要开启firefox
注意软件版本号 Zend Studio for Eclipse - 6.0.0
apatan 1.1
我一直在尝试,试过zend studio,editplus,ultraeditor,DW,始终无法在一个编辑器里完成所有的操作,怎样都会少那么一点支持。
终于!在zend studio for eclipse 出来之后我看到了希望,就是因为eclipse传说是个强大的插线板!
首次接触eclipse,经过几天的尝试,终于为这个插线板插上了完善的功能了。
1.PHP相关的所有功能zend studio for eclipse已经完善地提供了,只是用惯了zend studio 5.5的话会有点不习惯,咋说也要适应一下eclipse的习惯。
2.最难解决的是js和css的相关支持,特别是js,实在是让广大开发人员头痛的东西。用了几年的ultraeditor+alert()的编辑调试终于受不了了,于是一直在找一个完美一点的js编辑器,
【ultraeditor,editplus】之类的文本编辑器确实可以提供很快速的编辑,但是代码提示辅助实在不足,调试就更加不用说了,一句句alert()。
【Dreamweaver】也是很多人使用的,但这东西很明显不是专门为写js设计的,写css倒是很完美,对js基本只是提供了代码高亮而已
【1st javascript editor,Antechinus JavaScript Editor v9】这2个js编辑器可以说已经非常完善了,强大的代码提示,代码库辅助等功能,完全是为js而存在的。可惜的是这2者对中文的支持实在让人无奈,因为这2者都是不支持utf-8编码的文档的,所有utf-8编码的文档中的中文都只能看到乱码,只认gb2312 。没办法只能继续寻找。
【aptana】一个新兴的基于eclipse的插件,可以说这个插件已经完美地解决了js,css,html的编写了,加上强大的调试功能(非pro版的只支持firefox的调试,不知又没破解,pro版的就可以支持IE调试),唯一的缺点就是慢!没办法,基于eclipse的东西,至少准备200m 的空闲内存,通常是能吃掉200~300m的。
好!现在的问题就是在zend studio for eclipse 上插上aptana就完美啦
1.装好zend studio for eclipse,网上已经有完美的破解了
2.下载aptana的插件版:http://update.aptana.com/update/studio/3.2/ ,Download Plugin Update Site ,下载下来的zip文件不用解压。
3.插上:打开zend studio for eclipse,help->software updates->find and install...
选search for new features to install,next,New Archived site,选刚才下载的zip文件···之后就一步步next,accept的下去就是了。重启之后就完成了aptana的安装了
4.其实这样安装好之后还没没完成的,编辑起来无论是PHP还是HTML代码,都还是默认由zend来管理的,aptana还没能管事。(其实zend studio for eclipse已经可以比较好地支持js的代码提示了,当然没aptana强啦,还有就是不支持不支持css)。
5.最关键的一步就是让aptana来管理全部的*.html,*.js,*.css文件。
window->preferences->General->Editors->File Associations。就是在这页设置文件相关编辑器的,只要在这里设置
*.html,*.js,*.css的Association editors为aptan就可以(设置成Default)。
好了,现在又有一个问题,如果您是使用一些php框架,例如fleaphp,cakephp之类的,或者是smarty之类的,会有可能使用后缀比较特别的template文件,view文件。
例如cakephp使用的是*.thtml,当然这些文件后缀的使用是可以改变的(cakephp改起来比较不方便,而且可能会影响框架某些功能的使用,这个问题我在cakephp的官方论坛问过,大家都是建议改变编辑器的设置来支持*.thtml),而改变文件的支持就是在上面说的那页文件相关编辑器(File Associations)里面自己添加设置啦。
aptan新版本还可以支持php,我没有详细测试其功能,试了一下,代码提示的功能还是比较完善的,如果只使用代码提示功能还是可以代替一下zend studio的哦。
aptana的php插件:http://update.aptana.com/update/php/3.2/
安装方法跟aptana的安装一样,但是很如果装进去zend studio里很可能会抢掉zend的功能哦!反正我插进去后在*.thtml
文件里面无法使用···这点有待研究
写了这么多,算是对这几天的寻找做了总结吧,总结一下相关的关键点:
1.aptana,http://update.aptana.com/update/studio/3.2/
2.aptana的php插件:http://update.aptana.com/update/php/3.2/
3.eclipse文件相关编辑器设置:
window->preferences->General->Editors->File Associations。就是在这页设置文件相关编辑器的
4.模板文件特殊后缀的支持:文件相关编辑器(File Associations)
还要扩展一下 bugfree 和 project 提供 web浏览器给 eclipse也许是个解决方案。
开辟一个论坛 讨论开发工具集成方案 和 部署服务方案 以及 各种工具的优化应用模式 还有 好的项目管理模式以及开发模式。
zendeclipse 直接将 apatan下的plugins features拷贝到 zendeclipse下就可以在zend下开启apatan的相关功能,再将apatan安装一遍,对任意文件进行调试,aptana会提示要安装 firebug插件,同意。安装后卸载apatan。这样就可以使用 apatan的firebug了。需要注意的是调试前要开启firefox
注意软件版本号 Zend Studio for Eclipse - 6.0.0
apatan 1.1
提起运算符的优先级,很多了解C++的过来人都会想:这有什么难的?不就是谁的优先级高就算谁么。确实如此,运算符的优先级不是一个大问题,但对于一个初学者来说,却经常轻易在上面迷糊与犯错。而对于一个了解C++的人来说,我相信也会偶然在上面摔倒,不信就继续往下读。
“优先级高的先运算”带来的困惑
C++中运算符的优先级有一张表,表里把运算符进行了分类,这张表是不需要死记硬背的,只要有个大致的轮廓就OK了。例如应该记住最低优先级是逗号运算符,其次是赋值运算符,再其次是三目运算符。而关系运算符的优先级高于逻辑运算符(不包括逻辑非运算),算术运算符的优先级高于关系运算符,象++和﹣﹣的优先级比前面几个都高,但最高的要属()了。知道这些后,你的脑海里一定有一条准则了:优先级高的先运算。那么下面看一个例子:
int x=1,y=0;
!x&&x+y&++y;
上面的语句中出现了!、&& 、+、++这四个运算符,那么问题来了,到底先算谁呢?
有一个姓蔡的同学站起来说,++运算符在这里面优先级最高,理所应当最先算++,既先计算++y,再算!x,再算x+y,最后把它们&&起来。按照蔡同学的思路,第二步的结果是0&&x+y&&1,由于&&是严格运算,有一个为0结果既为0,所以不需要计算x+y了,整个语句的结果是:假。按照上面蔡同学的说法,执行完后y的值应该是1了,这对不对呢?
一位姓高的同学站起来反驳道,我觉得应该先计算!x,假如值为假,则不需要计算下去,最后结果为假。假如值为真,再计算x+y,同理假如其值为真,再去计算++y,否则最后结果也为假。
蔡同学不服起来说,高同学你觉得++和!谁的优先级高呢?高同学答道,那当然是++高。蔡同学接着问,那为什么还要先计算!呢?高同学答不出来了。
是呀,为什么要先算呢? 三层交换技术 交换机与路由器密码恢复 交换机的选购 路由器设置专题 路由故障处理手册 数字化校园网解决方案 加括号确定优先级的方法
高同学说的是正确的,为什么呢?下面我给大家解释一下。当多个优先级不同的运算符在一起时,为了不混淆,可以先加上括号,这样就分出层次了,相同层次的考虑结合性问题,当确定下来先算那块时,再往这块里面深入。例如上面的例子,我们可以这样加上括号:从左向右看,由于!比&&优先级高,所以有(!x),又由于&&比+优先级低,所以有(x+y),而++优先级高于&&,所以(++y)。这样整个式子就变成了:(!x)&&(x+y)&&(++y),最外层的是两个&&运算,由于&&的结合性是从左至右,所以上式可看成:A&&B&&C,先计算A,再计算B,最后算C。由于x=1,则!x就为假,后面的就不需要再算了,整个语句的值为假。执行完后,y的值没变,还是0。
所以碰到不清楚先算谁后算谁时,先加个括号看看,就明白了先后次序。下面做一个加括号的练习:给语句c=a>b?a:b;加括号。此语句有三个运算符:=、>、? :,应该怎样加括号呢?
第一种方案:c=((a>b)?a:b);
第二种方案:c=(a>(b?a:b));
第三种方案:(c=a)>(b?a:b);
应该是那一种呢?按照运算符优先级的高低顺序,>优先级高于=,所以不可能把(c=a)括起来。而>优先级高于? :运算符。所以也不可能把(b?a:b)括起来。因此,第一种答案正确。
下面再看一个类似的例子:
int i=8,j=4,k;
k=i
猛然一看,有些人上来可能就要计算++i和++j了。这里不妨先加括号看看。从左至右看,<的优先级高于=而且又高于? :,所以有k=(i
所以运算符的优先级千万要小心,既不是想象的那么难,也不是想象的那么轻易。
“优先级高的先运算”带来的困惑
C++中运算符的优先级有一张表,表里把运算符进行了分类,这张表是不需要死记硬背的,只要有个大致的轮廓就OK了。例如应该记住最低优先级是逗号运算符,其次是赋值运算符,再其次是三目运算符。而关系运算符的优先级高于逻辑运算符(不包括逻辑非运算),算术运算符的优先级高于关系运算符,象++和﹣﹣的优先级比前面几个都高,但最高的要属()了。知道这些后,你的脑海里一定有一条准则了:优先级高的先运算。那么下面看一个例子:
int x=1,y=0;
!x&&x+y&++y;
上面的语句中出现了!、&& 、+、++这四个运算符,那么问题来了,到底先算谁呢?
有一个姓蔡的同学站起来说,++运算符在这里面优先级最高,理所应当最先算++,既先计算++y,再算!x,再算x+y,最后把它们&&起来。按照蔡同学的思路,第二步的结果是0&&x+y&&1,由于&&是严格运算,有一个为0结果既为0,所以不需要计算x+y了,整个语句的结果是:假。按照上面蔡同学的说法,执行完后y的值应该是1了,这对不对呢?
一位姓高的同学站起来反驳道,我觉得应该先计算!x,假如值为假,则不需要计算下去,最后结果为假。假如值为真,再计算x+y,同理假如其值为真,再去计算++y,否则最后结果也为假。
蔡同学不服起来说,高同学你觉得++和!谁的优先级高呢?高同学答道,那当然是++高。蔡同学接着问,那为什么还要先计算!呢?高同学答不出来了。
是呀,为什么要先算呢? 三层交换技术 交换机与路由器密码恢复 交换机的选购 路由器设置专题 路由故障处理手册 数字化校园网解决方案 加括号确定优先级的方法
高同学说的是正确的,为什么呢?下面我给大家解释一下。当多个优先级不同的运算符在一起时,为了不混淆,可以先加上括号,这样就分出层次了,相同层次的考虑结合性问题,当确定下来先算那块时,再往这块里面深入。例如上面的例子,我们可以这样加上括号:从左向右看,由于!比&&优先级高,所以有(!x),又由于&&比+优先级低,所以有(x+y),而++优先级高于&&,所以(++y)。这样整个式子就变成了:(!x)&&(x+y)&&(++y),最外层的是两个&&运算,由于&&的结合性是从左至右,所以上式可看成:A&&B&&C,先计算A,再计算B,最后算C。由于x=1,则!x就为假,后面的就不需要再算了,整个语句的值为假。执行完后,y的值没变,还是0。
所以碰到不清楚先算谁后算谁时,先加个括号看看,就明白了先后次序。下面做一个加括号的练习:给语句c=a>b?a:b;加括号。此语句有三个运算符:=、>、? :,应该怎样加括号呢?
第一种方案:c=((a>b)?a:b);
第二种方案:c=(a>(b?a:b));
第三种方案:(c=a)>(b?a:b);
应该是那一种呢?按照运算符优先级的高低顺序,>优先级高于=,所以不可能把(c=a)括起来。而>优先级高于? :运算符。所以也不可能把(b?a:b)括起来。因此,第一种答案正确。
下面再看一个类似的例子:
int i=8,j=4,k;
k=i
猛然一看,有些人上来可能就要计算++i和++j了。这里不妨先加括号看看。从左至右看,<的优先级高于=而且又高于? :,所以有k=(i
所以运算符的优先级千万要小心,既不是想象的那么难,也不是想象的那么轻易。
快下班了,写点鉴赏的东西:
歌曲名称:千年之恋
歌手名称:信乐团
谁在悬崖沏一壶茶 我个人觉得应该修改为心在悬崖沏一壶茶,谁不能代表谁,而心更加能说明人的主观性和浪漫的情感。
温热前世的牵挂 谁又愿意不相信前世,更加主主观,人们往往喜欢,就像我宁愿相信主一样,尽管我是学物理的:)
而我在调整千年的时差 为何要调整时差呢?是恨和爱的铰接,还是对离得太远的恋人们的一种对互相的期盼吗?
爱恨全喝下 这一步说明还很年轻,爱河的水还浅,喝光了看似自己看透的爱和恨。
岁月在岩石上敲打 时间在恋人们的慢慢的走过。
我又留长了头发 又字,体现了一个人对一种状态的回归,长:说明了痴情不改、
耐心等待海岸线的变化 已经死了心的他或她已经高度成熟?应该仅仅还是一种境界的提升罢了。
大雨就要下 对心境的描述,但为何用大雨来寄托。
风 狠狠的刮 风,本来无情,为何用了人类的狠狠来表态呢?更进一步。
谁 在害怕 这句话,却反倒道出了人的狠心。
海风一直眷恋着沙 说明本来我们该在一起,很是眷恋的一种唯美情感表达。
你却错过我的年华 错过了,路过了,就像死了心还在的感觉。
错过我新长的枝丫 为何会新长呢?说的是有些时候当时没有抓住哦,而自己一直在改变,而来不及了的一种深刻的埋怨,极度的嫉狠。
和我的白发
蝴蝶依旧狂恋着花 自然现象,赋 比 兴 中兴的手法,Next(蝶恋花)
你却错过我的年华
错过我转世的脸颊 任然相信,但人已经各有主了吧,估计!
你还爱我吗 呵呵,心软了
我等你一句话 这句话,是爱恨的焦点,全局。
一生行走望断天崖 泪水已经已经盲目了。。。。。下句全是。。。
最远不过是晚霞
而你今生又在哪户人家
欲语泪先下
沙滩上消失的浪花
让我慢慢想起家
曾经许下的永远又在哪
总是放不下
啊 轮回的记忆在风化
我将它牢牢记下
海风一直眷恋着沙
你却错过我的年华
错过我新长的枝丫
和我的白发
蝴蝶依旧狂恋着花
你却错过我的年华
错过我转世的脸颊
你还爱我吗
我等你一句话
蝴蝶依旧狂恋着花
你却错过我的年华
错过我转世的脸颊
你还爱我吗
我等你一句话
歌曲名称:千年之恋
歌手名称:信乐团
谁在悬崖沏一壶茶 我个人觉得应该修改为心在悬崖沏一壶茶,谁不能代表谁,而心更加能说明人的主观性和浪漫的情感。
温热前世的牵挂 谁又愿意不相信前世,更加主主观,人们往往喜欢,就像我宁愿相信主一样,尽管我是学物理的:)
而我在调整千年的时差 为何要调整时差呢?是恨和爱的铰接,还是对离得太远的恋人们的一种对互相的期盼吗?
爱恨全喝下 这一步说明还很年轻,爱河的水还浅,喝光了看似自己看透的爱和恨。
岁月在岩石上敲打 时间在恋人们的慢慢的走过。
我又留长了头发 又字,体现了一个人对一种状态的回归,长:说明了痴情不改、
耐心等待海岸线的变化 已经死了心的他或她已经高度成熟?应该仅仅还是一种境界的提升罢了。
大雨就要下 对心境的描述,但为何用大雨来寄托。
风 狠狠的刮 风,本来无情,为何用了人类的狠狠来表态呢?更进一步。
谁 在害怕 这句话,却反倒道出了人的狠心。
海风一直眷恋着沙 说明本来我们该在一起,很是眷恋的一种唯美情感表达。
你却错过我的年华 错过了,路过了,就像死了心还在的感觉。
错过我新长的枝丫 为何会新长呢?说的是有些时候当时没有抓住哦,而自己一直在改变,而来不及了的一种深刻的埋怨,极度的嫉狠。
和我的白发
蝴蝶依旧狂恋着花 自然现象,赋 比 兴 中兴的手法,Next(蝶恋花)
你却错过我的年华
错过我转世的脸颊 任然相信,但人已经各有主了吧,估计!
你还爱我吗 呵呵,心软了
我等你一句话 这句话,是爱恨的焦点,全局。
一生行走望断天崖 泪水已经已经盲目了。。。。。下句全是。。。
最远不过是晚霞
而你今生又在哪户人家
欲语泪先下
沙滩上消失的浪花
让我慢慢想起家
曾经许下的永远又在哪
总是放不下
啊 轮回的记忆在风化
我将它牢牢记下
海风一直眷恋着沙
你却错过我的年华
错过我新长的枝丫
和我的白发
蝴蝶依旧狂恋着花
你却错过我的年华
错过我转世的脸颊
你还爱我吗
我等你一句话
蝴蝶依旧狂恋着花
你却错过我的年华
错过我转世的脸颊
你还爱我吗
我等你一句话
body{overflow-x:hidden;width:98%;}
程序如:
number_format.php :
用正则的方法进行分割:
---------- 调试PHP ----------
1,234.56
输出完成 (耗时 0 秒) - 正常终止
要把SQL查询出来的数值以下面的方法显示
1122222.21 显示为1,122,222.21
用number_format函数这么写啊?!
各位最好给个代码,谢谢
$number=1122222.21;
echo number_format($number, 2, ".", ",");
我需要:
$result=array("day_key"=>$rs->fields['day_key'],"week"=>$rs->fields['week'],"pv"=>number_format($rs->fields['pv'], 0, "", ","),"uip"=>number_format($rs->fields['uip'], 0, "", ","),"reg_member"=>number_format($rs->fields['reg_member'], 0, "", ","),"upload_ct"=>number_format($rs->fields['upload_ct'], 0, "", ","),"play_ct"=>number_format($rs->fields['play_ct'], 0, "", ","),"video_total"=>number_format($rs->fields['video_total'], 0, "", ","),"play_time"=>number_format($rs->fields['play_time'], 0, "", ","));
参考:http://www.phpe.net/manual/function.number-format.php
首个字母大写:
执行后,如下:
再参考:http://www.jb51.net/article/30478.htm
number_format.php :
用正则的方法进行分割:
---------- 调试PHP ----------
1,234.56
输出完成 (耗时 0 秒) - 正常终止
要把SQL查询出来的数值以下面的方法显示
1122222.21 显示为1,122,222.21
用number_format函数这么写啊?!
各位最好给个代码,谢谢
$number=1122222.21;
echo number_format($number, 2, ".", ",");
我需要:
$result=array("day_key"=>$rs->fields['day_key'],"week"=>$rs->fields['week'],"pv"=>number_format($rs->fields['pv'], 0, "", ","),"uip"=>number_format($rs->fields['uip'], 0, "", ","),"reg_member"=>number_format($rs->fields['reg_member'], 0, "", ","),"upload_ct"=>number_format($rs->fields['upload_ct'], 0, "", ","),"play_ct"=>number_format($rs->fields['play_ct'], 0, "", ","),"video_total"=>number_format($rs->fields['video_total'], 0, "", ","),"play_time"=>number_format($rs->fields['play_time'], 0, "", ","));
参考:http://www.phpe.net/manual/function.number-format.php
首个字母大写:
执行后,如下:
再参考:http://www.jb51.net/article/30478.htm
很多网页都是框架结构的,在很多的情况下会通过按钮点击事件或链接,跳出框架转到其它界面。
例如说点击“注销登录”返回到登录界面。
一、通过运行脚本跳出框架有以下几种写法:
1. <script language = javascript>window.open('Login.aspx','_top')</script>"
2. <script language = javascript>window.open('Login.aspx','_parent')</script>"
3. <script language = javascript>window.parent.location.href='login.aspx'</script>
4. Response.Write("<script>window.parent.opener=null;window.top.close();</script>")
Response.Write("<script>window.open('index.aspx','');</script>")
这种方法会先关闭原框架窗口,再重新打开一个新的窗口。这在很多功能界面对浏览器进行了改变设置,而回到登陆界面又用缺省设置的情况下适用。
二、链接跳出框架
这种情况就很简单了,加上 target="_top" 属性就可以了。
例如说点击“注销登录”返回到登录界面。
一、通过运行脚本跳出框架有以下几种写法:
1. <script language = javascript>window.open('Login.aspx','_top')</script>"
2. <script language = javascript>window.open('Login.aspx','_parent')</script>"
3. <script language = javascript>window.parent.location.href='login.aspx'</script>
4. Response.Write("<script>window.parent.opener=null;window.top.close();</script>")
Response.Write("<script>window.open('index.aspx','');</script>")
这种方法会先关闭原框架窗口,再重新打开一个新的窗口。这在很多功能界面对浏览器进行了改变设置,而回到登陆界面又用缺省设置的情况下适用。
二、链接跳出框架
这种情况就很简单了,加上 target="_top" 属性就可以了。
得高人(easy)指点,我试过,这个方法真好用!
解决办法是:
UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
WHERE User = 'usrname';
各位看官,注意到 OLD_PASSWORD( ) 这个函数么?
easy 高!
不過還得刷新,加以下一句:
mysql> FLUSH PRIVILEGES;
新版Mysql密码算法不同导致“Client does not support authentication protocol requested by server”错误
MySql4.1.7密码算法不同,你可以做如下选择:
1)使用PHP5,用php_mysqli.dll,而不是以前的php_mysql.dll
2)将MySql的密码改用原来的那套算法(本文介绍)
以前一直用Mysql 3.23.44,PHP5正式发布后,喜欢尝鲜的我忍不住了,用了几天PHP5,才感觉我的Mysql太弱,于是乎升级我的Mysql,心一横,最新的Mysql 5.0.1,嘿嘿,不信数据库弱。
安装很顺利,登录到mysql
G:\Mysql\bin>mysql -uroot
mysql>......
然后删除一些不用的帐号,只留下了一个root帐号。
更新root密码:
mysql>update user set password=password('password') where host='localhost' and user='root';
成功!
退出并重新启动Mysql服务。
接下来配置phpMyadmin的Config.inc.php
修改Mysql用户名、密码
打开phpMyadmin,登录:
结果很意外竟然弹出错误信息:
Client does not support authentication protocol requested by server;
意思好像是需要我升级客户端,我彻底失望了,我以为Mysql 5.0.1也和3.23.44一样好安装。
后来,我用Google搜索错误信息中的部分内容,搜索到了Mysql的官方网站,一看,明白了,原来是password算法的问题,因为5.0.1版Mysql的password算法和3.23.44的算法不一样了
(原文地址:http://dev.mysql.com/doc/mysql/en/Old_client.html)
采取官方网站的解决办法,一次搞定,嘿嘿
mysql>SET PASSWORD FOR
>'root'@'localhost' = OLD_PASSWORD('newpassword');
写此文章,仅希望有同样问题的朋友能尽快解决此问题。
今天又用一种方法更改了密码,因为现在才知道以前的命令用错了,old-password要直接输入才对!
今天的方法是,update mysql.user set password = old_password('newpwd')
where host = 'localhost' and user = 'root';
然后flush priviledges;
ok,重新登陆,搞定!
解决办法是:
UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
WHERE User = 'usrname';
各位看官,注意到 OLD_PASSWORD( ) 这个函数么?
easy 高!
不過還得刷新,加以下一句:
mysql> FLUSH PRIVILEGES;
新版Mysql密码算法不同导致“Client does not support authentication protocol requested by server”错误
MySql4.1.7密码算法不同,你可以做如下选择:
1)使用PHP5,用php_mysqli.dll,而不是以前的php_mysql.dll
2)将MySql的密码改用原来的那套算法(本文介绍)
以前一直用Mysql 3.23.44,PHP5正式发布后,喜欢尝鲜的我忍不住了,用了几天PHP5,才感觉我的Mysql太弱,于是乎升级我的Mysql,心一横,最新的Mysql 5.0.1,嘿嘿,不信数据库弱。
安装很顺利,登录到mysql
G:\Mysql\bin>mysql -uroot
mysql>......
然后删除一些不用的帐号,只留下了一个root帐号。
更新root密码:
mysql>update user set password=password('password') where host='localhost' and user='root';
成功!
退出并重新启动Mysql服务。
接下来配置phpMyadmin的Config.inc.php
修改Mysql用户名、密码
打开phpMyadmin,登录:
结果很意外竟然弹出错误信息:
Client does not support authentication protocol requested by server;
意思好像是需要我升级客户端,我彻底失望了,我以为Mysql 5.0.1也和3.23.44一样好安装。
后来,我用Google搜索错误信息中的部分内容,搜索到了Mysql的官方网站,一看,明白了,原来是password算法的问题,因为5.0.1版Mysql的password算法和3.23.44的算法不一样了
(原文地址:http://dev.mysql.com/doc/mysql/en/Old_client.html)
采取官方网站的解决办法,一次搞定,嘿嘿
mysql>SET PASSWORD FOR
>'root'@'localhost' = OLD_PASSWORD('newpassword');
写此文章,仅希望有同样问题的朋友能尽快解决此问题。
今天又用一种方法更改了密码,因为现在才知道以前的命令用错了,old-password要直接输入才对!
今天的方法是,update mysql.user set password = old_password('newpwd')
where host = 'localhost' and user = 'root';
然后flush priviledges;
ok,重新登陆,搞定!
[IE下的Firebug,微软开发的和Firefox下的IE插件]发现IE版firebug,最近又出了一个和firefox下的firebug一样的在IE上可以调试使用。
Php/Js/Shell/Go jackxiang 2008-7-5 18:38
一直在firefox下用firebug调试web UI,在IE下简直就是噩梦,njj发现了IE版的firebug Internet Explorer Developer Toolbar,立即告诉了我,IE下调试兼容页面的苦难日子终于过去了。
http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&DisplayLang=en
---------------------------------------------------------------------------------------------------------------------------------------------------------
这个工具的用法,我还在探索中……
和firefox下的firebug一样的在IE上可以使用:
http://www.cnblogs.com/hooray/archive/2011/04/21/2023289.html
---------------------------------------------------------------------------------------------------------------------------------------------------------
IE下使用firebug:
把下面这段代码复制到地址栏,然后运行即可。
firebug官网:https://getfirebug.com/
_______________________________________________________________________________________
Add Time: 2014-03-21 (下面都不是问题,用fiddler2直接加载进去即可,可以修改下高度,查看下样式足够了。)
如果你想让页面默认就有一个firebug的小按钮进行调试,那直接加一句:
<head>
...
<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>
...
</head>
虽然现在能在IE是使用fb了,但是IE上的fb缺陷还是有的,比如html代码不会实时更新,尤其是在测试jquery插件的时候就无奈了。
不过总的来说,firebug for ie还是解决了我们在IE上检查样式及代码提供了一个很好的工具。
http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&DisplayLang=en
---------------------------------------------------------------------------------------------------------------------------------------------------------
这个工具的用法,我还在探索中……
和firefox下的firebug一样的在IE上可以使用:
http://www.cnblogs.com/hooray/archive/2011/04/21/2023289.html
---------------------------------------------------------------------------------------------------------------------------------------------------------
IE下使用firebug:
把下面这段代码复制到地址栏,然后运行即可。
firebug官网:https://getfirebug.com/
_______________________________________________________________________________________
Add Time: 2014-03-21 (下面都不是问题,用fiddler2直接加载进去即可,可以修改下高度,查看下样式足够了。)
如果你想让页面默认就有一个firebug的小按钮进行调试,那直接加一句:
<head>
...
<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>
...
</head>
虽然现在能在IE是使用fb了,但是IE上的fb缺陷还是有的,比如html代码不会实时更新,尤其是在测试jquery插件的时候就无奈了。
不过总的来说,firebug for ie还是解决了我们在IE上检查样式及代码提供了一个很好的工具。