近期把一个垃圾域名无意指向了一个短信站点,在没有任何管理的情况下,居然给带来了不少的引导注册量。而且BAIDU排名也仅仅靠推广的后面。效果非常好,以前我一心优化精英的站点,好不容易才把PR做到5,GOOGLE收录量30多万页,现在一个垃圾域名比PR=5的域名还爽。
var delta=0.015
var collection;
function floaters() {
this.items = [];
this.addItem = function(id,x,y,content)
{
document.write('<DIV id='+id+' style="Z-INDEX: 0; POSITION: absolute; width:80px; height:60px;left:'+(typeof(x)=='string'?eval(x):x)+';top:'+(typeof(y)=='string'?eval(y):y)+'">'+content+'</DIV>');
var newItem = {};
newItem.object = document.getElementById(id);
newItem.x = x;
newItem.y = y;
this.items[this.items.length] = newItem;
}
this.play = function()
{
collection = this.items
setInterval('play()',10);
}
}
function play()
{
if(screen.width<=800)
{
for(var i=0;i<collection.length;i++)
{
collection[i].object.style.display = 'none';
}
return;
}
for(var i=0;i<collection.length;i++)
{
var followObj = collection[i].object;
var followObj_x = (typeof(collection[i].x)=='string'?eval(collection[i].x):collection[i].x);
var followObj_y = (typeof(collection[i].y)=='string'?eval(collection[i].y):collection[i].y);
if(followObj.offsetLeft!=(document.body.scrollLeft+followObj_x)) {
var dx=(document.body.scrollLeft+followObj_x-followObj.offsetLeft)*delta;
dx=(dx>0?1:-1)*Math.ceil(Math.abs(dx));
followObj.style.left=followObj.offsetLeft+dx;
}
if(followObj.offsetTop!=(document.body.scrollTop+followObj_y)) {
var dy=(document.body.scrollTop+followObj_y-followObj.offsetTop)*delta;
dy=(dy>0?1:-1)*Math.ceil(Math.abs(dy));
followObj.style.top=followObj.offsetTop+dy;
}
followObj.style.display = '';
}
}
var theFloaters = new floaters();
theFloaters.addItem('followDiv1','document.body.clientWidth-100',0,'</a><br><a href=广告链接地址 target=_blank><img src=广告图片地址 width=100 height=400 border=0></a>');
theFloaters.addItem('followDiv2',0,0,'<br><a href=广告链接地址 target=_blank><img src=广告图片地址 width=100 height=400 border=0></a>');
theFloaters.play();
把上面的代码另存为一个JS文件,然后在想实现此效果的页面用<script type="text/javascript" language="javascript1.2" src="*.js"></SCRIPT>调用即可,*代表你另存的文件名!注意修改广告图片地址和连接地址!
但是,要成为一名PHP编程高手却并不容易。并不像很多人想象的那样,只要能够飞快地编写几条简单的代码去解决一个复杂的问题就是PHP编程高手了,真正的PHP高手还需要考虑更多的其它问题。以下三条准则是一名成熟的PHP程序员在编程中应该首先遵循的准则。
1.懒惰是金
2.编写漂亮的代码
3.追求程序的速度,而不是编程的速度
一、懒惰是金
做一个懒惰的程序员吗?这个想法太奇怪了!因为这个世界上最忙碌的人可能就是计算机程序员了。但正是因为程序员太忙了,所以才应该在编程时学会偷懒。
对于一个程序员来说,懒惰的方法有两种:其一,大胆使用现成的别人的程序代码,把这些代码融入到你自己的程序或者项目中去。其二是编写一些有用的代码建立一个函数库,在将来编写程序时可以顺手拈来,省去了许多重复的劳动,自然就可以懒惰一点了。
这两种偷懒的方法都非常适合PHP程序员了。
首先,PHP是在自由开放的环境中诞生和成长的一门语言。在世界各地,有成千上万的程序员,他们一直在为PHP的完美而不断奋斗,他们也愿意和别人分享自己的聪明才智和自己编写的代码。你每天都可以从一些PHP网站、邮件列表、新闻组发现大量的优秀的程序代码。这样说,我并不是鼓励你整天等着让别人为你编写代码,但是你可以“站在伟人的肩膀上”,充分发扬“拿来主义”,聪明地应用别人的程序代码可以节省你大量时间。其次,在PHP中,你可以方便地建立自己的函数库,这样可以在你以后编写程序时省去很多麻烦。
下面笔者为大家介绍几个通用的函数,这些函数有的来自网上的一些开放源代码的项目,有的精选自邮件列表。如果你能把它们加入到你自己的函数库中,迟早你将会发现自己受益无穷。
1.通用数据库处理函数
和其它的CGI函数相比,PHP的优点之一是具有很强大的数据库处理能力。但是,在PHP中,对于不同的数据库都使用一些特定的函数来专门处理,缺少通用的数据库处理函数。这大大降低了程序代码的可移植性,这也为初学编程的朋友带来了很多不便。
在网上,许多程序员都通过封装类解决了这个问题。他们编写了统一的函数用来处理任何流行的数据库——不管是在Linux世界深受欢迎的Mysql还是在Windows平台上广泛流行的SqlServer。就笔者个人来说,非常喜欢使用这些函数,因为可以直接使用一些简单的诸如"query"、"next_record"之类的函数,而不需要考虑数据库的连接、数据库句柄这些复杂的东西,更不需要考虑使用的是何种数据库。
如果你需要这些函数,你可以通过访问以下的几个网址而得到:
http://phplib.netuse.de/
http://phpclasses.UpperDesign.com/browse.html/package/20
http://phpdb.linuxbox.com/
2.变量调试函数
PHP程序的调试一直是一件让人头疼的事,它既不像VB等高级语言那样有集成的编译调试环境,也不想Perl那样可以在Linux或者DOS环境下直接运行。其实,我们完全可以通过灵活地使用echo语句来完成对PHP的调试工作。
下面的几个函数可以让你随时查看程序中任何变量的类型及其值。
function ss_array_as_string (&$array, $column = 0) {
$str = "Array(
n";
while(list($var, $val) = each($array)){
for ($i = 0; $i < $column+1; $i++){
$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";
}
$str .= $var. ==> ;
$str .= ss_as_string($val, $column+1)."
n";
}
for ($i = 0; $i < $column; $i++){
$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";
}
return $str.);
}
function ss_object_as_string (&$object, $column = 0) {
if (empty($object->classname)) {
return "$object";
}
else {
$str = $object->classname."(
n";
while (list(,$var) = each($object->persistent_slots)) {
for ($i = 0; $i < $column; $i++){
$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";
}
global $$var;
$str .= $var. ==> ;
$str .= ss_as_string($$var, column+1)."
n";
}
for ($i = 0; $i < $column; $i++){
$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";
}
return $str.);
}
}
function ss_as_string (&$thing, $column = 0) {
if (is_object($thing)) {
return ss_object_as_string($thing, $column);
}
elseif (is_array($thing)) {
return ss_array_as_string($thing, $column);
}
elseif (is_double($thing)) {
return "Double(".$thing.")";
}
elseif (is_long($thing)) {
return "Long(".$thing.")";
}
elseif (is_string($thing)) {
return "String(".$thing.")";
}
else {
return "Unknown(".$thing.")";
}
}
需要的时候,在程序中简单地加入下面的一条代码即可查看程序中的所使用的变量(包括数组和对象)的类型和值:
echo ss_as_string($my_variable);
使用下面的语句,我们可以直接查看程序中所有的变量的值:
echo ss_as_string($GLOBALS);
3. 控制Log信息的函数
调试PHP程序的另外一种重要的方法就是查看Log信息。如果能够方便地控制Log信息的级别以及Log信息的显示内容,将会给程序调试带来更多的便利。下面的几个函数可以方便地实现这个功能。
$ss_log_level = 0;
$ss_log_filename = /tmp/ss-log;
$ss_log_levels = array(
NONE => 0,
ERROR => 1,
INFO => 2,
DEBUG => 3);
function ss_log_set_level ($level = ERROR) {
global $ss_log_level;
$ss_log_level = $level;
}
function ss_log ($level, $message) {
global $ss_log_level, $ss-log-filename;
if ($ss_log_levels[$ss_log_level] < $ss_log_levels[$level]) {
// 不显示Log信息
return false;
}
$fd = fopen($ss_log_filename, "a+");
fputs($fd, $level. - [.ss_timestamp_pretty().] - .$message."n");
fclose($fd);
return true;
}
function ss_log_reset () {
global $ss_log_filename;
@unlink($ss_log_filename);
}
在上面的函数中,有四个Log级别变量。运行PHP程序时,只有当Log的级别低于预设的级别值时,Log信息才可以被记录和显示出来。例如,在程序中加入如下的一条语句:
ss_log_set_level(INFO);
那么,运行PHP程序时,只有ERROR和INFO级别的LOG信息才能被记录和显示出来,DEBUG级的信息则被忽略了。除此之外,我们还可以设定显示的信息内容,其语句如下:
ss_log(ERROR, "testing level ERROR");
ss_log(INFO, "testing level INFO");
ss_log(DEBUG, "testing level DEBUG");
你也可以随时使用下面的语句清空LOG信息:
ss_log_reset();
4.速度测试函数
为了优化代码,我们需要一种可以测试代码运行时间的方法,从而来选择最优的代码。下面的函数可以测试运行代码所需的时间:
function ss_timing_start ($name = default) {
global $ss_timing_start_times;
$ss_timing_start_times[$name] = explode( , microtime());
}
function ss_timing_stop ($name = default) {
global $ss_timing_stop_times;
$ss_timing_stop_times[$name] = explode(, microtime());
}
function ss_timing_current ($name = default) {
global $ss_timing_start_times, $ss_timing_stop_times;
if (!isset($ss_timing_start_times[$name])) {
return 0;
}
if (!isset($ss_timing_stop_times[$name])) {
$stop_time = explode(, microtime());
}
else {
$stop_time = $ss_timing_stop_times[$name];
}
$current = $stop_time[1] - $ss_timing_start_times[$name][1];
$current += $stop_time[0] - $ss_timing_start_times[$name][0];
return $current;
}
现在可以轻松地检查任何一段代码的执行时间了,甚至我们可以同时使用多个计时器,只需在使用上述的几个函数时设定不同的参数作为计时器的名称就可以了。
5.调试和优化数据库的操作
对于数据库来说,运行速度是至关重要的。尽管很多书籍和文章都讲授了一些快速运行数据库的方法,但是所有的方法都必须经过实践的检验。下面我们将把PHPLib函数库中的query()函数和上面介绍的几个函数综合起来编写成新的query()函数,和原先的函数相比,这个函数增加了运行时间的监测功能。
function query($Query_String, $halt_on_error = 1) {
$this->connect();
ss_timing_start();
$this->Query_ID = @mysql_query($Query_String,$this->Link_ID);
ss_timing_stop();
ss_log(INFO, ss_timing_current(). Secs - .$Query_String);
$this->Row = 0;
$this->Errno = mysql_errno();
$this->Error = mysql_error();
if ($halt_on_error && !$this->Query_ID) {
$this->halt("Invalid SQL: ".$Query_String);
}
return $this->Query_ID;
}
二、编写漂亮的代码
1.将后台程序与前端程序分开
在编写PHP程序时,有些代码是用来处理一些事务,例如操作数据库、进行数学运算等,而另外的一些代码则只是事务处理的结果显示出来,例如一些使用echo语句将结果以HTML的格式显示在Web浏览器上的PHP代码以及那些直接嵌入PHP程序的HTML代码。首先我们应该清晰地区分这两种代码,把前者称为后台程序,把后者称为前端程序。
因为PHP是一种嵌入式编程语言,也就是说,所有的PHP代码都可以嵌入到HTML代码之中,这为程序的编写带来了许多便利之处。但是,“物极必反”,如果在一段较长的程序中将PHP代码和HTML代码混合编写,这将使程序杂乱无章,不利于程序的维护和阅读。所以我们需要尽可能地将这些程序中混杂于HTML代码中的PHP代码移植出来,在专门的文件中将这些代码封装成函数,然后在HTML代码中使用include语句来包含这些文件,在适当的位置调用这些函数即可。
这种做法一方面使HTML代码和PHP代码都简单易读,另一方面因为HTML代码需要不断更新,而这种分离的方法可以确保后台程序不会被破坏。
同前端程序不同,后台程序更多追求的是稳定、结构化,极少更改,所以应该认真地设计和管理。其实,在设计台程序时,投入大量时间是值得的,“现在栽树,以后乘凉”,在以后的设计工作中将可以轻松地使用现在编写的后台程序。
2.灵活使用包含文件
正如前面所说的那样,后台程序应当安排在一系列的包含文件中。包含文件可以通过include语句在需要时动态装入,也可以在php.ini文件中通过使用auto_prepend_file指令预先自动装入。
如果使用后一种方法的话,虽然取得了一劳永逸的好处,但是也有一些缺点值得我们注意。下面的一段代码向我们展示了解析一个庞大的包含文件需要一定的时间:
require(timing.inc);
ss_timing_start();
include(test.inc);
ss_timing_stop();
echo
.ss_timing_current().
;
?>
在上面的代码中,test.inc是一个1000行的包含文件,运行的结果显示,解析这个包含文件花费了0.6秒钟,对于一个大型网站来说,这个速度并不是可以忽略不记的。
使用包含文件的另外一个缺点是:如果一个文件中的一个语句发生错误,将会使整个网站的PHP程序都无法运行。所以使用起来也及其小心。
其实,对包含文件稍做处理,即可以使包含文件只在需要时进行解析。下面的代码使abc.inc文件只在程序需要时才作解析:
if ( defined( __LIBA_INC) ) return;
define( __LIBA_INC, 1 );
/*
* 代码...
*/
?>
3.使用面向对象的编程方法
PHP也是一种面向对象的语言,面向对象的编程方法是优秀的程序员们非常推崇的一种软件设计方法,在PHP编程中可以充分发挥面向对象语言的优势,对编程中的对象进行封装。在前面的代码中,我们使用了面向对象的方法,例如在管理数据库时,我们将query()函数封装进数据库类中,这极大地方便了代码的管理,增加了程序的可读性。
三、追求程序速度,而不是编程的速度
在网站建设中,程序运行速度和网页下载速度都是关系成败的重要因素。作为一名Web程序员,应该更加注意代码的运行速度。下面介绍的几种方法都在不同程度上提高了代码的运行速度。
1.使用内嵌的HTML代码,而不是PHP的echo语句。
因为PHP是一门嵌入式Web编程语言,可以将HTML代码和PHP代码相互嵌入。但是很多程序员担心在HTML代码中过多的使用""嵌入PHP代码会多次调用PHP解释器,从而降低了PHP代码的运行速度,所以宁愿使用PHP的echo语句来输出HTML代码,而不直接使用HTML代码。但事实却恰恰相反。每一个PHP页面只调用一次PHP解释器来解释所有的PHP代码,所以,只在需要时才嵌入PHP代码,而大多数的时候直接使用HTML代码输入结果,不但不会降低程序的运行速度,而且因为减少了对echo语句的解析,往往可以提高代码的运行速度。
下面的一段代码证明了我们的结论。在这段代码中,我们使用了前面介绍的时间测试函数。
使用str-replace而不是ereg-replace
习惯使用Perl进行编程的程序员更加愿意使用ereg_replace完成字符串替换工作,因为在PHP中ereg_replace的用法和Perl中模式匹配的用法相近。但是,下面的这段代码证明,使用str_replace 代替 ereg_replace将可以大大提高代码的运行速度。
测试str_replace和ereg_replace的运行速度
//这段代码测试str_replace的运行速度
emphasis; ?>
for ($i=0; $i<1000; $i++) {
str_replace(i>, b>, $string).
;
}
?>
//这段代码测试ereg_replace的运行速度
for ($i=0; $i<1000; $i++) {
ereg_replace(<([/]*)i>, <\\1b>, $string).
;
}
?>
//打印结果
结论
使用str_replace的时间 -
使用ereg_pattern的时间 -
运行上面的代码,得到的结果是:
使用str_replace的时间 - 0.089757
使用ereg_pattern的时间 - 0.248881
从运行的结果我们可以看出使用str_replace替代ereg_replace作为字符串替换函数,极大地提高了代码的运行速度。
3.注意字符串的引用
PHP和其它很多编程语言一样,可以使用双引号(\"\")来引用字符串,也可以使用单引号()。但是在PHP中,如果使用双引号来引用字符串,那么PHP解析器将首先分析字符串中有没有对变量的引用,有变量的话,将对变量进行替换。如果是单引号,则没有如此复杂——直接将单引号包含起来的所有字符串直接显示出来。显然,在PHP编程中,如果使用单引号引用字符串变量要比使用双引号快速一些。
4.在数据库中避免使用联合操作
比起其它的Web编程语言来说,PHP的数据库功能十分强大。但是在PHP中数据库的运行仍然是一件十分费时费力的事情,所以,作为一个Web程序员,要尽量减少数据库的查询操作,同时应该为数据库建立适当的索引。另一件值得注意的事情是在用PHP操作数据库时,尽可能不使用多个数据表的联合操作,尽管联合操作可以增强数据库的查询功能,但是却大大增加了服务器的负担。
为了说明这个问题,我们可以看看下面的这个简单的例子。
我们在数据库中创建了两个数据表foo和big_foo。在数据表foo中,只有一个字段,包含了从1-1000之间的所有自然数。数据表big_foo同样只有一个字段,但包含了从1-1,000,000之间的全部自然数。所以,从大小上说,big_foo等于foo与它自身进行了联合操作。
$db->query(\"select * from foo\");
0.032273 secs
$db->next_record();
0.00048999999999999 secs
$db->query(\"insert into foo values (NULL)\");
0.019506 secs
$db->query(\"select * from foo as a, foo as b\");
17.280596 secs
$db->query(\"select * from foo as a, foo as b where a.id > b.id\");
14.645251 secs
$db->query(\"select * from foo as a, foo as b where a.id = b.id\");
0.041269 secs
$db->query(\"select * from big_foo\");
25.393672 secs
从上面操作结果我们可以发现,对于两个有1000条记录的数据表进行联合,其速度并不比对一个1000000条纪录的大型数据表单独进行操作快多少。
5.注意include与require的区别
在PHP变成中,include()与require()的功能相同,但在用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如在下面的一个例子中,如果变量$somgthing为真,则将包含文件somefile:
if($something){
include(\"somefile\");
}
但不管$something取何值,下面的代码将把文件somefile包含进文件里:
if($something){
require(\"somefile\");
}
下面的这个有趣的例子充分说明了这两个函数之间的不同。
$i = 1;
while ($i < 3) {
require(\"somefile.$i\");
$i++;
}
在这段代码中,每一次循环的时候,程序都将把同一个文件包含进去。很显然这不是程序员的初衷,从代码中我们可以看出这段代码希望在每次循环时,将不同的文件包含进来。如果要完成这个功能,必须求助函数include():
$i = 1;
while ($i < 3) {
include(\"somefile.$i\");
$i++;
}
6.注意echo和print的区别
PHP中echo和print的功能也基本相同,但是两者之间也有细微差别。在PHP代码中可以把print作为一个普通函数来使用,例如执行下面的代码后变量$res的值将为1。
$ret = print \"Hello World\";
这意味着print可用在一些复杂的表达式中,而echo则不行。同样,在代码中echo语句的运行速度要略微快于print语句,因为echo语句不要求返回任何数值.
Chonqing — A Beautiful Mountain City |
Chongqing is located at the convergence of the Yangzi river (Chang Jiang) and Jianling river and also a gateway to western China. As a representative city, it enables you to feel the rapid pace of development in western China. The thousand-year-old wharf, the once wartime Capital during World War II, and the burgeoning municipality directly under the central government are only a few attractions of the city that are worth visiting. It might be regarded as one of the largest mountain cities of the world, which features rivers, forests, springs, waterfalls, gorges, and caverns. This cliff-side city overlooks the confluence of the Yangtze and Jialing Rivers. Its urban skyscrapers erect at the foot of hills as well as beside the rivers, making spectacular scenery with a myriad of twinkling lights at night. From this city, after one-night going down by boating along the Yangtze River, you may have a great pleasure to enjoy the world-famous resorts: the small Three Gorges and the great Three Gorges. Furthermore, the modern transport networks enable you to travel to any place within Chongqing municipality in 8 hours, and in downtown in only half hour. As one of World Culture Heritages, Dazu Stone Carvings (Buddhist Grottoes) is also only a 2-hour bus away the city center.
|
Passport and Visa |
A valid passport and visa for visiting China are required which can be obtained at your local Chinese Embassy or the nearest Consulate General. Official Conference Invitation Letter will be sent to the participants by ICMIT Secretariat upon receiving your Registration Form.
|
Weather |
The annual average temperature is about 18˚C with 6˚C~8˚C in winter and 27˚C~38˚C in summer. So the optimal season to visit Chonqing is not the hot summer or the cold winter, but spring and autumn. The average temperature in September is 24˚C, when our Conference will be being held, with daytime high of 28˚C and nighttime low of 21˚C. It is an ideal time for tourists to enjoy the beautiful sites of Chongqing.
|
Time Difference |
Los Angeles (Pacific Standard Time)+15 hours, London-7 hours, Argentina-11 hours. Despite its enormous size, China is set to Beijing time throughout the country.
|
Insurance |
The Organizing Committee cannot accept any liability for personal accidents or loss or damage to the private property of any participants during the Conference or indirectly arising from attending the Conference. It is advisable that participants should take adequate travel and health insurances before leaving their own countries.
|
Electricity |
The electricity supply is 220V, 50Hz in China.
|
Currency Exchange |
In China, only RMB is used. However, exchange centers can be found at airports, most hotels and large shopping centers. The exchange rate is about US $ 1 = RMB 8.30. When exchanging money, please keep your receipt so that you can convert any remaining RMB back to foreign currency when leaving China. Visa, MasterCard, American Express, Diners Club and JCB are accepted in many department stores and hotels. It may be difficult to draw cash with credit cards. The Bank of China and most hotels can cash travelers’ checks issued by any foreign banks or financial institutions. Participants will need to show a passport and pay a 0.75 percent commission. Travelers’ checks signed over to a third party cannot be cashed in China, but can be presented for collection through the Bank of China.
|
Transportation |
Transportation in Chongqing is convenient, with expressways, taxis, buses, boats, and trains. Bus: There are mini, air-conditioned, and sightseeing buses in Chongqing. Most city buses run from 5:30am ~ 21:00pm and cost RMB1~3. Taxi:Taxies are everywhere in the city, and taxi is one of the most convenient ways to get around. Taxies charge RMB5 for the first 3km, then RMB1.2 for every additional 1km, plus RMB0.6 for every 5 minutes of waiting period. Toll fees are extra, RMB5 for bridges and RMB10 for expressways. It costs around US $20 to travel from the airport to the downtown. Light rail: The full fare is about RMB 3~5.
|
Reconfirmation of Air Ticket |
Departure air ticket (both international and domestic) should be reconfirmed 72 hours in advance. Calling the airline office in Chongqing is advised. But these offices are not open on weekends. |
Scheduled Flights of Chongqing International Airport |
Chongqing Jiangbei International Airport’s distinctive floral logo makes daily appearances in more than 38 key domestic destinations as well as some other cities in different countries. Direct international flights between Chongqing and Nagoya of Japan, Bangkok of Thailand, Seoul of Korea or Singapore are available and more international air routes will be available in 2005. Traveling to Chongqing can also be very convenient through connections at Hongkong, Beijing, Shanghai, Guangzhou, Shenzhen and so on. |
十二年后回望家驹-一些见闻-一些琐事(组图)
这张相片应该很多人见过,那是家驹十七岁第一次上台表演时照的,如此年轻稚气.
很多人的钱包里放着相片,可能都是自己最喜欢的人的相片.
而这张相片就一直放在家驹的钱包里,没有更换过,一直到他离世那一刻也依然是……
家驹外号四眼仔,他近视,在台上演出的时候,据说都是看不清楚远一点的事物。
而他在台下的大部分时光都是戴着眼镜的,怎么看着象个书呆子呀:)
吹笛的家驹,86年剖析演出.
演出时候唱[龙的传人].
93年中央一次颁奖晚会,BEYOND也被邀请去了
崔健的演出,BEYOND特地去到广州捧场。
十多年前的王菲,应该算得上是BEYOND的师妹了。因为当年他们是同一个经纪人,BEYOND也时不时会助王菲一下,那时BEYOND已经红遍香港,而王菲正在努力。
圣诞帽帽
家驹的最后一次公开演出
无力回天,英年早逝!
电视台采访
家驹早期的登台表演视频截图
少年时的家驹 可爱中透着坚强
好象是家驹唯一一次西装领带登台表演
家驹 你的歌声永远活跃在我们的心中
家驹逝世的当天被采访的歌迷
家驹下葬前的一次公开记者招待会。
主要是阿荣回答问题,而家强只是说了几句感谢的话后就匆匆离开了,估计是太过于悲愤的原因!
歌迷们徘徊在殡仪馆的门口,等候着拜祭家驹。
众多圈中人士前来凭吊
花圈中的祝福
PAUL和世荣都站在家属行列中。
哭泣的记者,估计生前采访过家驹
家驹正式出殡!
歌迷们因太过激动和悲愤,虽说安排了大批警力,但场面再度失控!
车并不是很豪华
它数量也不多
但 它们送走的是一个唯一的音乐骄子 ----家驹
除了难受,没别的感觉了
家驹正式下葬
葬礼中的家强 阿荣 贯中 以及家驹的亲属
为他送上一句真挚的祝福
向家驹告别
哀悼会中,在场几乎所有的人都哭泣了 都流泪了……
这 是家驹生前标志性的手势 它的含义代表的就是:爱
爱的手势 现在的那些“腕”们又谁会做这个手势 又有谁能问心无愧地去做这个手势?
没有 只有家驹
家驹 现在你还好吗?
昨日的四人辉煌
昨日的快乐与激情
今日却……
一切都成了回忆
家驹安息的地方(香港将军澳华人永远坟场)
我第一次听到家驹的歌是在1993年5月(几号忘了),从那时起爱上了BEYOND爱上了家驹,遗憾的是一月以后(1993年6月30日)一个地球就要毁灭的消息降临了------家驹走了!!!从那以后家驹的音乐陪我走过了十二个春秋从不间断!!每年的6月30日我都会听家驹的音乐看家驹的照片默默的祝福他。家驹离开了我们大家可他依然活在我们的心中!爱BEYOND爱家驹的朋友们我们一起祝福他祝福在天堂的家驹吧!(发贴的时候我是听着家驹的音乐流着眼泪发完的,希望和各位BEYOND迷一起分享!进来的BEYOND迷请留下你们的感受在下谢谢你们对家驹的支持!!)
有机会我一定去“香港将军澳华人永远坟场”
(祭奠家驹是我十二年的愿望)
爱家驹的朋友来这里祝福家驹吧!
http://www.bdlly.com/ShowPost.asp?forumid=289&id=344
http://www.utspeed.com/htmldata/1/2005_10/article_3_1.html
http://bbs.utspeed.com/index.php ... eply13786reply13786
网站推广软件《登录奇兵》数据添加器1.1发布 - 2005-10-29 23:21:43 pm - niuboy
说明:
进一步了解《登录奇兵》中数据的特殊性,完善了引擎网站所添加数据与《登录奇兵》的结合,使得数据添加的能用性提高。
用户数据添加操作中,数据如果不符合条件,会给出提示,避免提交无效数据。
下载:http://proxy123.com.ru/download/addurlhack1.10.rar
网站推广软件《登录奇兵》数据添加器1.0发布
--------------------------------------------------------------------------------
落伍首度发布简介:给网站推广软件《登录奇兵》添加引擎登录数据。
里面附上动画教程。
只支持不需要验证和登陆的网站。
比如,访客留言板、blog博客、引擎登陆等。
适用于《登录奇兵》3.x
作者:niuboy
作者网站:http://www.utspeed.com
下载:网站推广软件《登录奇兵》数据添加器1.0发布如果不能够运行,请下载下面的运行支持库
http://proxy123.com.ru/download/library_proxygo.rar
使用简要说明:
数据添加部分,按照我的教程做。然后运行登录奇兵(我在帖子里面给了下载地址了)。需要先安装登录奇兵,把软件放在同一目录内.
特别注意:addurlhack.dbf 和《登陆奇兵》默认数据库不能够用本软件打开,请按照动画教程的操作去做。
http://www.utspeed.com/message.php?action=view&commentid=5
登录奇兵v3.01注册版 (附正版数据库,已经过校验这一个 - 2005-10-27 13:56:48 pm - niuboy
http://soft.vv66.com/li1/2292.zip
启动 Windows 资源管理器。
浏览到 C:\Program Files\Common Files\System\MSADC
右键单击文件夹,然后在快捷菜单中单击属性。
在属性对话框中,单击安全性选项卡,然后检查 Everyone 组是否具有完全控制权限。
如果 Everyone 组没有完全控制权限,则执行下列步骤:
单击添加,然后在“选择用户、计算机或组”对话框的底部键入 Everyone。
单击确定。
确保选中了允许列的完全控制对话框。
启用父目录
function send_mail($to, $subject = 'No subject', $body) {
$loc_host = "#"; //发信计算机名,可随意
$smtp_acc = "#"; //Smtp认证的用户名,
$smtp_pass="password"; //Smtp认证的密码,一般等同pop3密码
$smtp_host="#"; //SMTP服务器地址,类似 smtp.tom.com
$from="#"; //发信人Email地址,你的发信信箱地址
$headers = "Content-Type: text/plain; charset=\"gb2312\"\r\nContent-Transfer-Encoding: base64";
$lb="\r\n"; //linebreak
$hdr = explode($lb,$headers); //解析后的hdr
if($body) {$bdy = preg_replace("/^\./","..",explode($lb,$body));}//解析后的Body
$smtp = array(
//1、EHLO,期待返回220或者250
array("EHLO ".$loc_host.$lb,"220,250","HELO error: "),
//2、发送Auth Login,期待返回334
array("AUTH LOGIN".$lb,"334","AUTH error:"),
//3、发送经过Base64编码的用户名,期待返回334
array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION error : "),
//4、发送经过Base64编码的密码,期待返回235
array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION error : "));
//5、发送Mail From,期待返回250
$smtp[] = array("MAIL FROM: <".$from.">".$lb,"250","MAIL FROM error: ");
//6、发送Rcpt To。期待返回250
$smtp[] = array("RCPT TO: <".$to.">".$lb,"250","RCPT TO error: ");
//7、发送DATA,期待返回354
$smtp[] = array("DATA".$lb,"354","DATA error: ");
//8.0、发送From
$smtp[] = array("From: ".$from.$lb,"","");
//8.2、发送To
$smtp[] = array("To: ".$to.$lb,"","");
//8.1、发送标题
$smtp[] = array("Subject: ".$subject.$lb,"","");
//8.3、发送其他Header内容
foreach($hdr as $h) {$smtp[] = array($h.$lb,"","");}
//8.4、发送一个空行,结束Header发送
$smtp[] = array($lb,"","");
//8.5、发送信件主体
if($bdy) {foreach($bdy as $b) {$smtp[] = array(base64_encode($b.$lb).$lb,"","");}}
//9、发送“.”表示信件结束,期待返回250
$smtp[] = array(".".$lb,"250","DATA(end)error: ");
//10、发送Quit,退出,期待返回221
$smtp[] = array("QUIT".$lb,"221","QUIT error: ");
//打开smtp服务器端口
$fp = @fsockopen($smtp_host, 25);
if (!$fp) echo "<b>Error:</b> Cannot conect to ".$smtp_host."<br>";
while($result = @fgets($fp, 1024)){if(substr($result,3,1) == " ") { break; }}
$result_str="";
//发送smtp数组中的命令/数据
foreach($smtp as $req){
//发送信息
@fputs($fp, $req[0]);
//如果需要接收服务器返回信息,则
if($req[1]){
//接收信息
while($result = @fgets($fp, 1024)){
if(substr($result,3,1) == " ") { break; }
};
if (!strstr($req[1],substr($result,0,3))){
$result_str.=$req[2].$result."<br>";
}
}
}
//关闭连接
@fclose($fp);
return $result_str;
}
?>
在我看来这个是一个必然的事情,盛大传奇现在已经到了非常衰败的地方.比如盛大特许的重庆网安为例,早已经开始合区,在线人数远远不如以前.哪怕新区也人少的可怜...不过现在盛大转向游戏免费,服务收费的模式.感觉就象私服一样.卖装备赚钱...前景也不容乐观
新浪专题:http://tech.sina.com.cn/focus/sndamir_free/index.shtml
要明白这种攻击的基本原理,还是要从TCP连接建立的过程开始说起:
大家都知道,TCP与UDP不同,它是基于连接的,也就是说:为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是TCP连接,建立TCP连接的标准过程是这样的:
首先,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;
第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。
第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。
以上的连接过程在TCP协议中被称为三次握手(Three-way Handshake)。
问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。
从防御角度来说,有几种简单的解决方法,第一种是缩短SYN Timeout时间,由于SYN Flood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度 xSYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间,例如设置为20秒以下(过低的SYN Timeout设置可能会影响客户的正常访问),可以成倍的降低服务器的负荷。
第二种方法是设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。
可是上述的两种方法只能对付比较原始的SYN Flood攻击,缩短SYN Timeout时间仅在对方攻击频度不高的情况下生效,SYN Cookie更依赖于对方使用真实的IP地址,如果攻击者以数万/秒的速度发送SYN报文,同时利用SOCK_RAW随机改写IP报文中的源地址,以上的方法将毫无用武之地。