PHP,ASP,ASP.NET2.0,JSP运算速度之比较

该日志由 Kevin 发表于 2006, May 20, 10:54 AM

原文: http://www.xiacong.com/blogview.asp?logID=373

今天下午做了一个测试,分别让asp,asp.net2.0,php,jsp执行2000万次的整数运算和浮点运算,看看速度如何.

基本上都是用的最新版本进行测试,测试环境如下:

服务器操作系统 Microsoft Windows NT 5.2.3790 Service Pack 1 
CPU总数:2.66G双核
内存:2048M DDR2-533

-------------------------------------------------------------------------------------------------
服务器IIS版本 Microsoft-IIS/6.0 
.NET Framework 版本 2.0.50727.42 
-------------------------------------------------------------------------------------------------
Apache/2.2.2 (Win32) PHP/5.1.4
JAVA运行环境名称  Java(TM) 2 Runtime Environment, Standard Edition  1.5.0_06-b05 
JAVA运行环境说明书名称  Java Platform API Specification  1.5 
JAVA虚拟机名称  Java HotSpot(TM) Client VM  1.5.0_06-b05 
JAVA虚拟机说明书名称  Java Virtual Machine Specification  1.0 
-------------------------------------------------------------------------------------------------
Apache/2.2.2 (Win32) PHP/5.1.4
PHP版本 PHP Version 5.1.2 
服务器语种 Server Language  
ZEND版本 ZEND Version 2.1.0 

测试结果如下:

ASP:
2000万次整数运算:平均7750毫秒
2000万次浮点运算:平均16296.9 毫秒 

PHP:
2000万次整数运算:平均2049毫秒
2000万次浮点运算:平均2050毫秒 

JSP:
2000万次整数运算:平均31毫秒
2000万次浮点运算:平均469 毫秒 

ASP.NET2.0:
2000万次整数运算:平均31毫秒
2000万次浮点运算:平均203.125 毫秒 

SmartTemplate学习笔记

该日志由 Kevin 发表于 2006, May 20, 10:41 AM

目录 
1、SmartTemplate的效率 
2、基本变量 
3、逻辑运算结构 
4、模式(Methods) 
5、扩展类(Extensions) 未完成 
------------------------------------------------------------------------ 

1、SmartTemplate的效率 
虽然他有很多的程序来形成强大的功能,但在执行时只有你调用的才被导入,所以不用担心这方面的速度影响,同样这套模版系统是为最快的执行效率而优化过的,比起目前市场上常见的Smarty,要快不少(Smarty采用后期缓存,所以比较可能不是很准确)。 

2、SmartTemplate的变量
Array的变量是由SmartTemplate内建函数assign()来赋值的

具体语法如下 
assign ( 模版中的变量, 要替换的内容 )
或 
assign ( Array内容 ) 
正如其他程序的变量一样,smartTemplate的变量是由特殊的{}所包含的。里面的内容可以是String,Array,Int,或者是Long Text等等(基本上php支持的) 
在储存Array数据时,smartTemplate运用了我们常见的父子级分割符".",所以一个特殊的Array数据由Array Handle和具体位置的索引组成(Numerical Index or Associative Index)。 
下面是一个例子 
在php环境下运行以下程序 

<?php 
    $template  =  new SmartTemplate('template.html'); 
    $text  =  'Sample Text'; 
    $template->assign( 'TITLE', $text ); 
    $template->output(); 
?> 


模版 

<html> {TITLE} </html>
 

输出 

<html> Sample Text </html>
 

在只有一个Array的情况下,可以直接省略前面的array handle,就象在使用javascript时,document.window.close()可以省略为window.close() 

<?php 
    $user  =  array( 
                 'NAME'  => 'John Doe', 
                 'GROUP' => 'Admin', 
                 'AGE'   => '42', 
              ); 
    $template  =  new SmartTemplate('user.html'); 
    $template->assign( $user ); 
    $template->output(); 
?>
 

模版 
 
Name:  {NAME} 
Group: {GROUP} 
Age:   {AGE} 


输出 

Name:  John Doe 
Group: Admin 
Age:   42 


下面是另外一个例子。使用了SmartTemplate的循环函数<!-- begin Array名 -->XXXXXX<!-- end Array名> 
他的功能类似foreach(),只要有东西,就一直循环显示 

<?php 
    $links  =  array( 
                   array( 
                       'TITLE' => 'PHP', 
                       'URL'   => 'http://www.php.net/', 
                   ), 
                   array( 
                       'TITLE' => 'Apache', 
                       'URL'   => 'http://www.php.net/', 
                   ), 
                   array( 
                       'TITLE' => 'MySQL', 
                       'URL'   => 'http://www.mysql.com/', 
                   ), 
               ); 
    $template  =  new SmartTemplate('links.html'); 
    $template->assign( 'links', $links ); 
    $template->output(); 
?> 


HTML模版 

<html> 
<h3> Sample Links </h3> 
<!-- BEGIN links --> 
    <a href="{URL}"> {TITLE} </a> 
<!-- END links --> 
</html> 


<html> 
<h3> Sample Links </h3> 
    <a href="http://www.php.net/"> PHP </a> 
    <a href="http://www.apache.org/"> Apache </a> 
    <a href="http://www.mysql.com/"> MySQL </a> 
</html> 


3、SmartTemplate的逻辑控制结构 

★If和end If 

语法: 
<!-- IF 变量 --> 变量已被赋值! <!-- ENDIF 变量 --> 
如果IF后面直接跟变量,变量为Null时会返回0,否则返回1 

<!-- IF name=="John Doe" --> Your name is John Doe! <!-- ENDIF name --> 


==判断是否相等,如果相等返回1,不相等返回0 

<!-- IF name!="John Doe" --> Your name is not John Doe! <!-- ENDIF name --> 


!=判断是否不等,如果成立返回1,相等则返回0 

例子: 

<?php 
    require_once "class.smarttemplate.php"; 
    $page = new SmartTemplate("if.html"); 
    $page->assign( 'username',   'John Doe' ); 
    $page->assign( 'usergroup',  'ADMIN' ); 
    $page->assign( 'picture',    '' ); 
    $page->output(); 
?>  


HTML 
 
<!-- IF username --> <H3> Welcome, {username} </H3> <!-- ENDIF --> 
<!-- IF picture --> <img src="{picture}"> <!-- ENDIF picture --> 
<!-- IF usergroup="ADMIN" --> 
<a href="admin.php"> ADMIN Login </a><br> 
<!-- ENDIF usergroup --> 


输出

<H3> Welcome, John Doe </H3> 
<a href="admin.php"> ADMIN Login </a><br> 

 
★IF的子局 else 
如果else子句出现在一个逻辑循环中,当if的条件不成立时则会被运行。 
例子 

<?php 
    require_once "class.smarttemplate.php"; 
    $page = new SmartTemplate("else.html"); 
    $page->assign( 'username',   'John Doe' ); 
    $page->assign( 'usergroup',  'ADMIN' ); 
    $page->assign( 'picture',    '' ); 
    $page->output(); 
?> 
 

模版 
 
<!-- IF username --> 
<H3> Welcome, {username} </H3> 
<!-- ENDIF --> 
<!-- IF picture --> 
<img src="{picture}"> 
<!-- ELSE --> 
Picture not available! <br> 
<!-- ENDIF picture --> 
<!-- IF usergroup="ADMIN" --> 
<a href="admin.php"> ADMIN Login </a><br> 
<!-- ELSE --> 
You are in guest mode! 
<!-- ENDIF usergroup -->
 

输出 

<H3> Welcome, John Doe </H3> 
Picture not available! <br> 
<a href="admin.php"> ADMIN Login </a><br>
 

★elseif 

elseif是else和if组合起来的一种结构,其意义为"除此之外如果..." 
以下是一个例子 

<?php 
    require_once "class.smarttemplate.php"; 
    $page = new SmartTemplate("elseif.html"); 
    $page->assign( 'usergroup',  'INTERNAL' ); 
    $page->output(); 
?>
  

模版文件 

<!-- IF usergroup="ADMIN" --> 
<a href="admin.php"> 管理员登陆 </a><br> 
<!-- ELSEIF usergroup="SUPPORT" --> 
<a href="support.php"> 帮助人员登陆</a><br> 
<!-- ELSEIF usergroup --> 
<a href="other.php"> 普通方式登陆 </a><br> 
<!-- ELSE --> 
You don't even have a usergroup! 
<!-- ENDIF -->
 

运行php得到的输出 

<a href="other.php"> 普通方式登陆 </a><br> 


★Begin...End 

这个语句用于读取一个整数索引矩阵(Numerical Array,以数字为索引的数组)的值.而每个整数矩阵的子矩阵则成为以字符串为索引的矩阵(Associative Array)然后在<!-- begin --> 和 <!-- end -->之间的语句将会被读取并且重复执行. 
附加:,每个associative array(字符串为索引的矩阵)会有两个附加的值 
ROWCNT : 此元素在父矩阵中的具体位置 (0,1,2,3,...n) (就是目前在第几个矩阵) 
ROWBIT : 矩阵序号的最后一位. (0,1,0,1,0,1,...) 
下面是一个例子 
 
<?php 
    require_once "class.smarttemplate.php"; 
    $page = new SmartTemplate("begin_end.html"); 
    $users = array( 
               array( 'NAME' => 'John Doe',   'GROUP' => 'ADMIN' ), 
               array( 'NAME' => 'Jack Doe',   'GROUP' => 'SUPPORT' ), 
               array( 'NAME' => 'James Doe',  'GROUP' => 'GUEST' ), 
               array( 'NAME' => 'Jane Doe',   'GROUP' => 'GUEST' ), 
             ); 
    $page->assign( 'users',  $users ); 
    $page->output(); 
?> 
 

HTML模版 

<style type="text/css"> 
.col0 { background-color: #D0D0D0; } 
.col1 { background-color: #F0F0F0; } 
</style> 
<table border="1" cellpadding="2" cellspacing="0"> 
<tr> 
<th> No </th> 
<th> Username </th> 
<th> Usergroup </th> 
</tr> 
<!-- BEGIN users --> 
<tr class="col{ROWBIT}"> 
<td> {ROWCNT} </td> 
<td> {NAME} </td> 
<td> {GROUP} </td> 
</tr> 
<!-- END users --> 
</table> 


最后的输出 
 
<style type="text/css"> 
.col0 { background-color: #D0D0D0; } 
.col1 { background-color: #F0F0F0; } 
</style> 
<table border="1" cellpadding="2" cellspacing="0"> 
<tr> 
<th> No </th> 
<th> Username </th> 
<th> Usergroup </th> 
</tr> 
<tr class="col0"> 
<td> 0 </td> 
<td> John Doe </td> 
<td> ADMIN </td> 
</tr> 
<tr class="col1"> 
<td> 1 </td> 
<td> Jack Doe </td> 
<td> SUPPORT </td> 
</tr> 
<tr class="col0"> 
<td> 2 </td> 
<td> James Doe </td> 
<td> GUEST </td> 
</tr> 
<tr class="col1"> 
<td> 3 </td> 
<td> Jane Doe </td> 
<td> GUEST </td> 
</tr> 
</table> 


☆smartTemplate的方法 

注:以下列出的方法并不会在模版设计中出前,他们属于smartTemplate的代码编辑部分,但是如果为了实现更深一步的模版设计,下面的内容是肯定有用的. 

★基础方法:assign (中文意思:赋值) 

语法: 
assign ( 变量名, 混合内容 ) 
或者 
assign ( 矩阵变量 ) 

更多介绍在变量介绍部分 

★Append(附加) 

语法:append ( 变量名, 内容 ) 

对所提供的变量附加提供的内容 
例子: 

<?php 
    $page  =  new SmartTemplate('links.html'); 
    $page->append('links' => array( 
                                 'TITLE' => 'PHP', 
                                 'URL'   => 'http://www.php.net/' 
                             )); 
    $page->append('links' => array( 
                                 'TITLE' => 'Apache', 
                                 'URL'   => 'http://www.apache.org/' 
                             )); 
    $page->append('links' => array( 
                                 'TITLE' => 'MySQL', 
                                 'URL'   => 'http://www.mysql.com/' 
                             )); 
    $page->output(); 
?> 


模版 
 
<html> 
<h3> Sample Links </h3> 
<!-- BEGIN links --> 
    <a href="{URL}"> {TITLE} </a> 
<!-- END links --> 
</html>
 

最终输出 

<html> 
<h3> Sample Links </h3> 
    <a href="http://www.php.net/"> PHP </a> 
    <a href="http://www.apache.org/"> Apache </a> 
    <a href="http://www.mysql.com/"> MySQL </a> 
</html>
 

另外一个附加字符串的例子: 
 
<?php 
    $page  =  new SmartTemplate('template.html'); 
    $page->append('TITLE' => 'Hello '); 
    $page->append('TITLE' => 'World '); 
    $page->append('TITLE' => '!'); 
    $page->output(); 
?> 


输出将会得到 
 
<html> Hello World ! </html>

SmartTemplate(适用于企业级PHP开发的模板引擎)

该日志由 Kevin 发表于 2006, May 20, 10:39 AM

作者:乔楚

基本方法

SmartTemplate::assign()
void assign ( string PLACEHOLDER, mixed CONTENT ) or void assign ( array CONTENT )
给模板占位符(PLACEHOLDER)或者列表(CONTENT)赋值. 可以使用散列数组或者标量 
  
例子1:标量赋值 

<?php
    $template  =  new SmartTemplate('template.html');
    $text  =  'Sample Text';
    $template->assign( 'TITLE', $text );
    $template->output();
?>


模板(template.html):  

<html> {TITLE} </html>


输出:  

<html> Sample Text </html>


例子2: 多个标量赋值 

<?php
    $template  =  new SmartTemplate('user.html');

    $template->assign( 'NAME',  'John Doe' );
    $template->assign( 'GROUP', 'Admin'    );
    $template->assign( 'AGE',   '42'       );

    $template->output();
?>



模板(user.html):  

Name: {NAME}
Group: {GROUP}
Age:   {AGE}


输出:  

Name:  John Doe
Group: Admin
Age:   42


例子3: 使用数组给多个标量赋值 

<?php
    $user  =  array(
                 'NAME'  => 'John Doe', 
                 'GROUP' => 'Admin',
                 'AGE'   => '42',
              );

    $template  =  new SmartTemplate('user.html');
    $template->assign( $user );
    $template->output();
?>



模板(user.html):  

Name:  {NAME}
Group: {GROUP}
Age:   {AGE}


输出:  

Name:  John Doe
Group: Admin
Age:   42

  
例子4: 命名空间 

<?php
    $admin  =  array(
                   'NAME'  => 'John Doe', 
                   'AGE'   => '42',
               );
    $guest  =  array(
                   'NAME'  => 'Roger Rabbit', 
                   'AGE'   => '16',
               );

    $template  =  new SmartTemplate('users.html');

    $template->assign( 'admin', $admin );
    $template->assign( 'guest', $guest );

    $template->output();
?>


模板(user.html): 占位符(PLACEHOLDER)对应数组,“.”对应数组“[]” 

Admin Name: {admin.NAME}
Admin Age:  {admin.AGE}

Guest Name: {guest.NAME}
Guest Age:  {guest.AGE}


输出:  

Admin Name: John Doe
Admin Age:  42

Guest Name: Roger Rabbit
Guest Age:  16


例子5: 使用数组命名空间 

<?php
    $users  =  array(
                   'admin' => array(
                       'NAME'  => 'John Doe', 
                       'AGE'   => '42',
                   ),
                   'guest' => array(
                       'NAME'  => 'Roger Rabbit', 
                       'AGE'   => '16',
                   ),
               );
    $template  =  new SmartTemplate('users.html');
    $template->assign( $users );
    $template->output();
?>


模板(user.html): 占位符(PLACEHOLDER)对应数组,“.”对应数组“[]” 

Admin Name: {admin.NAME}
Admin Age:  {admin.AGE}

Guest Name: {guest.NAME}
Guest Age:  {guest.AGE}


输出:  

Admin Name: John Doe
Admin Age:  42

Guest Name: Roger Rabbit
Guest Age:  16


例子6: 命名空间, 3个部分 

<?php
    $template  =  new SmartTemplate('template.html');
    $content['world']['europe']['germany']  =  'DE';
    $template->assign( 'top_level_domain', $content );
    $template->output();
?>


模板(template.html): 占位符(PLACEHOLDER)对应数组,“.”对应数组“[]” 

<html>German TLD: {top_level_domain.world.europe.germany} </html>


输出:  

<html>German TLD: DE </html>

  
例子7: 列表赋值 

<?php
    $links  =  array(
                   array(
                       'TITLE' => 'PHP',
                       'URL'   => 'http://www.php.net/',
                   ),
                   array(
                       'TITLE' => 'Apache',
                       'URL'   => 'http://www.php.net/',
                   ),
                   array(
                       'TITLE' => 'MySQL',
                       'URL'   => 'http://www.mysql.com/',
                   ),
               );
    $template  =  new SmartTemplate('links.html');
    $template->assign( 'links', $links );
    $template->output();
?>


模板(links.html): 结构名称lnks对应数组 

<html>
<h3> Sample Links </h3>
<!-- BEGIN links -->
    <a href="{URL}"> {TITLE} </a>
<!-- END links -->
</html>


输出:  

<html>
<h3> Sample Links </h3>
    <a href="http://www.php.net/"> PHP </a>
    <a href="http://www.apache.org/"> Apache </a>
    <a href="http://www.mysql.com/"> MySQL </a>
</html>

  
Example 8: 使用数组于多个命名空间 

<?php
    $title  =  'Sample Links';  //  Page Title
    $target =  '_blank';        //  The Same Target for all links
    $links  =  array(
                   array(
                       'TITLE' => 'PHP',
                       'URL'   => 'http://www.php.net/',
                   ),
                   array(
                       'TITLE' => 'Apache',
                       'URL'   => 'http://www.php.net/',
                   ),
                   array(
                       'TITLE' => 'MySQL',
                       'URL'   => 'http://www.mysql.com/',
                   ),
               );

    $template  =  new SmartTemplate('links.html');
    $template->assign( 'TITLE', $title );
    $template->assign( 'TARGET', $target );
    $template->assign( 'links',  $links  );
    $template->output();
?>


注意: 

TITLE 与 links..TITLE 使用不同的命名空间! 
TARGET 不是 links 数组的成员. 如果使用在 BEGIN..END 块之内, 他必须被引用为 {parent.TARGET} 或者 {top.TARGET}. 

其他可能的用法:  

{top.TITLE}, {parent.parent.PAGE_ID}, {top.users.ADMIN}, 等等.. 

模板(links.html):  

<html>
<h3> {TITLE} </h3>
<!-- BEGIN links -->
    <a target='{parent.TARGET}' href="{URL}"> {TITLE} </a>
<!-- END links -->
</html>


输出:  

<html>
<h3> Sample Links </h3>
    <a target="_blank" href="http://www.php.net/"> PHP </a>
    <a target="_blank" href="http://www.apache.org/"> Apache </a>
    <a target="_blank" href="http://www.mysql.com/"> MySQL </a>
</html>


SmartTemplate::append() void append ( string PLACEHOLDER, mixed CONTENT ) 
追加内容给模板占位符. 可以使用散列数组或者标量. 

例子1 (列表): 

<?php
    $page  =  new SmartTemplate('links.html');
    $page->append('links' => array( 
                                 'TITLE' => 'PHP',
                                 'URL'   => 'http://www.php.net/'
                             ));
    $page->append('links' => array( 
                                 'TITLE' => 'Apache',
                                 'URL'   => 'http://www.apache.org/'
                             ));
    $page->append('links' => array( 
                                 'TITLE' => 'MySQL',
                                 'URL'   => 'http://www.mysql.com/'
                             ));
    $page->output();
?>


模板(links.html): 列表追加为行 

<html>
<h3> Sample Links </h3>
<!-- BEGIN links -->
    <a href="{URL}"> {TITLE} </a>
<!-- END links -->
</html>


输出:  

<html>
<h3> Sample Links </h3>
    <a href="http://www.php.net/"> PHP </a>
    <a href="http://www.apache.org/"> Apache </a>
    <a href="http://www.mysql.com/"> MySQL </a>
</html>


例子2 (标量): 

<?php
    $page  =  new SmartTemplate('template.html');
    $page->append('TITLE' => 'Hello ');
    $page->append('TITLE' => 'World ');
    $page->append('TITLE' => '!');
    $page->output();
?>


模板(template.html): 标量为内容的追加 

<html> {TITLE} </html>


输出:  

<html> Hello World !</html>


SmartTemplate::output() void output ()
解析模板并输出结果. 

例子:  

<?php
    $page  =  new SmartTemplate('template.html');
    $page->assign('TITLE' => 'Sample Title');
    $page->output();
?>


SmartTemplate::result() string result ()
解析模板并返回结果. 
例子:  

<?php
    $page  =  new SmartTemplate('template.html');
    $page->assign('TITLE' => 'Sample Title');
    $output  =  $page->result();
    echo 'Output page: ' . $output;
?>


SmartTemplate::use_cache void use_cache ( [mixed key] ) 

激活内建的输出缓存. 判断当前执行的脚本 (判断依据$_SERVER[REQUEST URI]) 是否在确定的时间内执行过. 如果执行过, use_cache 将返回缓存的页面给浏览器并且中止运行. 
如果没有一个有效的输出句柄可以使用,use_cache将激活PHP输出缓存,并且返回数据到执行它的脚本. 下面的脚本执行时, use_cache 捕获所有输出到浏览器的内容,并保存到缓存目录. 缓存的每一个文件名称是唯一的,他根据当前执行的脚本文件名称,GET参数(REQUEST_URI)以及可选得参数来自东设定. 
如果脚本有一些重要的工作,例如记录日志等,那么应该在use_cache 之前调用你的代码. 
例子:  

<?php
    $page  =  SmartTemplate('template.html');
    $page->cache_dir       =  '/tmp/';  //  Where to store cache files
    $page->cache_lifetime  =  120;      //  Keep cache for 120 seconds
    $page->use_cache();                 //  Activate ouput cache
    //
    //  Assemble Page Content
    //
    $page->output();
?>


SmartTemplate::debug() void debug () 

激活内建调试器. Debug 能够代替或者内嵌在 output . 他列出了指定的变量及其内容的详细列表, 编译后的模板和模板的原来结构. 
Debug 对于确定和排除模板中的错误非常有用.

流程控制 

SmartPHP 例子: if
if ... endif 控制有条件的输出模板的部分. 


语法如下: 
变量不为空 

<!-- IF var --> var 不为空! <!-- ENDIF var -->

  
变量值判断 

<!-- IF name=="HonestQiao" --> Your name is HonestQiao! <!-- ENDIF name -->

  
变量值否定判断 

<!-- IF name!=" HonestQiao " --> Your name is not HonestQiao! <!-- ENDIF name --> 


(var 在 ENDIF 之后是可选的,但是最好加上) 

 if.php:   

<?php
    require_once "class.smarttemplate.php";
    $page = new SmartTemplate("if.html");
    $page->assign( 'username',   'HonestQiao' );
    $page->assign( 'usergroup',  'ADMIN' );
    $page->assign( 'picture',    '' );
    $page->output();
?> 


if.php使用的模板文件如下: 
 if.html:   

<!-- IF username --> <H3> Welcome, {username} </H3> <!-- ENDIF -->
<!-- IF picture --> <img src="{picture}"> <!-- ENDIF picture -->
<!-- IF usergroup="ADMIN" -->
<a href="admin.php"> ADMIN Login </a><br>
<!-- ENDIF usergroup -->


if.php执行的效果如下: 
 输出: (  查看)  

<H3> Welcome, HonestQiao </H3> 
<a href="admin.php"> ADMIN Login </a><br>


SmartPHP 例子: else
else 控制作为 if 控制的扩展,当if 判断结果为 FALSE 来输出模板的一部分. 


 else.php:

<?php
    require_once "class.smarttemplate.php";
    $page = new SmartTemplate("else.html");

    $page->assign( 'username',   'John Doe' );
    $page->assign( 'usergroup',  'ADMIN' );
    $page->assign( 'picture',    '' );

    $page->output();
?> 


else.php使用的模板文件如下: 
 else.html:   

<!-- IF username -->
<H3> Welcome, {username} </H3>
<!-- ENDIF -->
<!-- IF picture -->
<img src="{picture}">
<!-- ELSE -->
Picture not available! <br>
<!-- ENDIF picture -->
<!-- IF usergroup="ADMIN" -->
<a href="admin.php"> ADMIN Login </a><br>
<!-- ELSE -->
You are in guest mode!
<!-- ENDIF usergroup -->


else.php执行的效果如下: 
 输出: (  查看)  

<H3> Welcome, John Doe </H3>
Picture not available! <br>
<a href="admin.php"> ADMIN Login </a><br>


SmartPHP 例子: elseif
elseif 控制是 else 与 if 的结合. 


 elseif.php: (  下载)  

<?php
    require_once "class.smarttemplate.php";
    $page = new SmartTemplate("elseif.html");
    $page->assign( 'usergroup',  'INTERNAL' );
    $page->output();
?> 


elseif.php使用的模板文件如下: 
 elseif.html:   

<!-- IF usergroup="ADMIN" -->
<a href="admin.php"> Admin Staff Login </a><br>
<!-- ELSEIF usergroup="SUPPORT" -->
<a href="support.php"> Support Staff Login </a><br>
<!-- ELSEIF usergroup -->
<a href="other.php"> Standard Login </a><br>
<!-- ELSE -->
You don't even have a usergroup!
<!-- ENDIF -->


elseif.php执行效果如下: 
 输出: 

<a href="other.php"> Standard Login </a><br>


SmartPHP 例子: begin end

begin ... end 结构提供了一种方法,使用数字索引数组来输出重复的相似的内容。数字索引数组的每一个元素,应该是一个散列数组,<!-- begin --> and <!-- end --> 标签类似一个小的模板,他分析内嵌的模板片断,并使用这个散列数组来生成内容。 

每个散列数组可以使用以下的两个扩展参数: 

ROWCNT :当前元素的在父数组之中的实际位置. (0,1,2,3,...n) 
ROWBIT : 表示ROWCNT的二进制字节的最后一位,也就是奇偶值. (0,1,0,1,0,1,...) 

begin ... end 块可以很容易的嵌套使用,他们会被自动的递归分析. 
 begin_end.php: 

<?php
    require_once "class.smarttemplate.php";
    $page = new SmartTemplate("begin_end.html");
    $users = array(
               array( 'NAME' => 'John Doe',   'GROUP' => 'ADMIN' ),
               array( 'NAME' => 'Jack Doe',   'GROUP' => 'SUPPORT' ),
               array( 'NAME' => 'James Doe',  'GROUP' => 'GUEST' ),
               array( 'NAME' => 'Jane Doe',   'GROUP' => 'GUEST' ),
             );
    $page->assign( 'users',  $users );
    $page->output();
?> 


begin_end.php使用的模板如下: 
 begin_end.html: 

<style type="text/css">
.col0 { background-color: #D0D0D0; }
.col1 { background-color: #F0F0F0; }
</style>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<th> No </th>
<th> Username </th>
<th> Usergroup </th>
</tr>
<!-- BEGIN users -->
<tr class="col{ROWBIT}">
<td> {ROWCNT} </td>
<td> {NAME} </td>
<td> {GROUP} </td>
</tr>
<!-- END users -->
</table>


begin_end.php的运行效果如下: 
 输出: 

<style type="text/css">
.col0 { background-color: #D0D0D0; }
.col1 { background-color: #F0F0F0; }
</style>

<table border="1" cellpadding="2" cellspacing="0">
<tr>
<th> No </th>
<th> Username </th>
<th> Usergroup </th>
</tr>

<tr class="col0">
<td> 0 </td>
<td> John Doe </td>
<td> ADMIN </td>
</tr>

<tr class="col1">
<td> 1 </td>
<td> Jack Doe </td>
<td> SUPPORT </td>
</tr>

<tr class="col0">
<td> 2 </td>
<td> James Doe </td>
<td> GUEST </td>
</tr>

<tr class="col1">
<td> 3 </td>
<td> Jane Doe </td>
<td> GUEST </td>
</tr>
</table>

你的名字会被记多久

该日志由 Kevin 发表于 2006, May 20, 10:38 AM

那个晚上的影片好像是南斯拉夫的《桥》。他正要走进电影院,一个青年拦住了他。那个青年看上去很焦急,说:“这位大哥,售票处已经买不到票了,您能把手中的票卖给我吗?”他一愣,有些为难。青年的脸色有些黯然,“我们从乡下来,我想领着母亲看一场电影。”就因为青年的孝心,那天他毅然把票给了青年,没要一分钱。青年除了千恩万谢,还郑重地要了他的名字。
  
这是纷繁的生活中极为普通的一个场景。十多年了,他几乎都把这件事忘记了。有一天,他走在街上,有一个人轻轻地喊他的名字。他一看,站在他面前的是一个笑容满面的中年人。
  
中年人说:“大哥,您还记得十几年前您给我的那张电影票吗?那一年,我从乡下来,给母亲看病。母亲病得很重,我怕母亲不能活着从手术台上下来,就想领着母亲看一场电影。那天,多少人都拒绝了我。只有您,慷慨地把票给了我。您知道吗,我母亲手术后又活了一年。那一年里,每当她幸福地说到‘我在城里看过一场电影’这句话的时候,我就在心里用感激一遍一遍地默念着您的名字。是的,大哥,这么多年了,我一直忘不了……”
  
这是朋友的父亲在一次吃饭时给我们讲的一个故事。那次,他颇有感慨地说:“我就做了那么一点事,却让一个素昧平生的人记住了我的名字,而且一记就是这么多年。说真的,他喊出我名字那一刻,我还是觉出了一种无法言说的幸福。我是说,你们以后的路还很长,你能把自己的名字留在别人的脑海里多长时间呢?”
  
一语惊心。是啊,这个世界上,有许多人的名字已经被时光的风吹得无影无踪了,而另一些名字,因为爱——爱的付出与施与,却在风中成了不倒的丰碑。

做WEB2.0网站可以参考的的十九条规则

该日志由 Kevin 发表于 2006, May 19, 11:59 AM

一、首先是原创,是内容的提供,让用户成为网站的主人而不是网站的客户;
(一)原创网站:不以复制和粘贴为网站内容的基本获取手段,只在前期和特定栏目及特定时间发布部分内容,但也需依照事前确定的网站规则进行。
(二)资源网站:我们不以服务或者具体产品为主要模式,而是以资源供应商和资源生产组织者(非集成)的身份开展合作、运营相关的推广和收益拓展等,其中内容是资源的一部分。
(三)用户网站:网站的宗旨是办用户自己的网站(非主页)而不是办自己的网站,尽管从法权角度属于开办人的财产,但是具体的应用、功能和服务上要淡化开办人的地位和影响,建立用户平等的网络环境(包括开办人也是用户,后台仅仅是技术控制)。

二、固定某一群体的原创,延伸出门户的概念,并代表着一种特定的视角和视野;
(一)群体:针对人群,根据其特点和需要,安排网站的结构、应用和功能,建立开放性平台以聚集具有这一群体的差异化和多元化特征的人群。
(二)门户:门户这里的意义是覆盖所有的相关人群,根据其不同的特点来定义和丰富门户下的频道、栏目、内容、应用和相关产品和服务的框架(非产品和服务本身)。
(三)媒体:媒体的核心在于视角与视野,打造媒体而不只是XX群的媒体,从媒体本身代表的是一种声音和语言来传播和影响群体参与者。

三、草根参与与具有地位或者社会标签性质的参与如何去进行区别;
(一)草根:草根与非草根的区别在于不同的社会标签产生的权利差别,即资源的分享和享受差异,真正的草根不是从其来源上来区分,而且应该淡化这一色彩,也不是具体某人的,而是草根环境和非标准化的人群。
(二)身份标签:与实名对应的网络标识,我们不是为完成实名任务而是形成实名机制,以此建立网络身份系统和标识,并将其作为独立系统来进行开发作为以后与其他平台互通的技术。

四、互动的实质是交流,而网络作为交流的促进手段还是其中的一项含义,怎么去界定和体现;
(一)互动平台:网络作为技术手段,其物理性质决定了它丰富、迅速和多样的特点,但多元化的网络应用使得网络互动可以作为互动的手段,有可以是其他交流或者行为的辅助。(定位)
(二)网络互动:网络交流是独立的交流方式,存在的价值有其他方式没有的或者根本不可能实现的,这是网站本身应该不断挖掘的地方。(拓展)
(三)交往接口:我们坚持交流是网络交友的前奏,最终也必然与交友联系起来,通过网站持续的交流形成彼此相对稳定的联系,进而促成交往和长久的关联,完善网络交流的机制。(应用)

五、人的社会性与个性之间的需求怎么通过合适的方式来融合而不是冲突或者是相互隔离,又或者是貌似神离;
(一)个性导入:从个人的标志、信息内容、获取和发布方式、以及交流的方式和特性在进行导入,突显个人的偏好和选择,但个性的定位应该是社会性的多样化选择而不是另行一套,平台的中立性质也为个性导入建立积极的环境。
(二)社会输出:以个人的圈子、讨论交流、参与退出等行为为起点,将个性的东西通过群体社会的角度来展示和体现,并将其延展,始终围绕社会的中心来做输出。

六、提供的平台或者技术,又或者是种应用,而这归根结底是满足用户怎样的需要,在之中有那些创新能够引发变革,而又能和具体的商业价值联系起来;
(一)随需应变:根据人群确定平台的定位,根据平台的定位来组织应用,根据人群的需要发展技术应用,根据应用的成熟度来升级平台。
(二)商业原则:做学生资源而不是学生市场,启动资源的是群体而不是开办人,开办人是通过平台建设来吸引资源再将资源包装以各种形式和类型推出去,而针对资源的开发是另一行为。

七、内容的多元化如何满足不同的需求层次,降低书写及查询成本,更好的提供服务;不同人群的需求到底这不同如何是划分去区别;
(一)内容多元:提倡学生在线生活的理念,从起学习、生活、消费、娱乐到就业、培训等全方位的内容信息和在线应用。
(二)全面满足:不同层次的人,不同背景的人我们都需要去满足,首页完成的是共性信息,而内页则是注重个性群体的信息提供。
(三)书写与查询成本:依靠组织而不是个人,依靠机构而不是个体,借鉴现有的资源信息而不是完全独立,增加收入来提高收益,随时随地的方便的接入与服务,个性化的安排与设定、追踪。

八、所谓网站的底层结构是怎么样实现革新的,技术模式与应用模式的价值是什么;
(一)应用说明:所有的都以应用服务为主导,通过能做什么,满足什么,怎么满足和怎么使用来完成网站功能的描述与拓展。
(二)效果追踪:技术在于构建底层,根据实际的应用需要来调整,而用户的需要则转化为具体的应用,实际效果则直接对应用户的需要。

九、“鼠标用户”与“键盘用户”的区别是什么,如何进行上下人群的分析,以此确定服务模式,网站本身到底扮演一个怎样的角色;
(一)参与贡献:贡献可以通过写文章、评论文章,上传资源等方式也可以是点击率、投票率、选择率、推荐率、引用率。
(二)服务模式:线下的载体,包括书面载体、活动载体、人员载体、组织载体、关系载体和实物载体等。
(三)中立价值:网站的中立包括不参与评判、建立规则,引导租组织进而引导和督促个人,彰显平台的价值。
(四)服务连接:根据上行服务人群组织资源的表现形式,根据下行的被服务人群选择具体的应用形式,并将两者有机的联系起来,并不断整合完善。

十、分类广告与C2C到底是应该怎么去理解去实际的操作与应用;
(一)分类广告:分类的价值在于栏目清晰、定义明确、细分得当,通过个人门户以及SNS系统可以将信息的及时性与真实性表述清晰,同时根据分类广告建立用户的激励机制,促进发展。
(二)C2C交易:限定交易买方,建立支付帐户,要求卖方按照交易规则进行,并且将本地化服务从中区分开来,实行另一种服务模式,并通过建立线下服务队伍来促进相关交易,其中分类信息与之有交叉也有不同。

十一、个人门户无论是入口还是接口其真正的意义是什么?点告模式的应用价值如何去看待;
(一)入口问题:定位在个人信息门户的意义在于发布与接受,这里我们定位的重点应该是接口定位而不是入口;
(二)点告模式:通过点击、回复、加入、做答、引用、推荐、收藏、沟通、购买、申购、等方式运作点告模式,并将其作为基础。

十二、如何去贯穿一种集体或者说团队的精神,让网络本身更具有积极意义;如何去引导是培育一种创造和创新的精神,并在一个群体的氛围下实践;将竞争的意识尤其是成就感的培育大于压力本身的实现;
(一)群组管理:个人的约束则通过建立制度,具体通过群组来实现完成,通过同类人群的彼此影响和互动交流来改变个人的行为环境,同时以群组的名义出现,加强其内部的管理,依靠团队的力量来承担任务和责任,培养团队意识。
(二)创新氛围:创新在于自由、自主、团队、感恩的精神,再辅助以外界的期待与支持,在适当的时候社会资源的匹配才能成就创新实践,通过这些要件打造这种氛围。
(三)平台延展:创新不仅仅依靠打造氛围、资源优选,还需要操作平台和凝聚的空间,以平和的心境,竞争的态势去促进发展,促成实践。

十三、将媒体的意义不再停留在主流与非主流的区分上而是不同视角的交流;
(一)媒体特点:媒体以其传播性质涉及到的相对应人群来产生其价值,至少包括三点:传播者、媒介、受众,我们媒体的特点在于传播者确定、媒介特殊、受众固定以及传播者与受众合一。
(二)媒体价值:群体的视角,多重的影响,媒介的多样化,以此形成的聚合力与深度影响力。

十四、一个社会需要制度,需要从底层去思考它的根基及其存续的基础,无论是制约还是激励都有;
(一)网络社会:网络社会是现实社会的多面体,是独立的一部门,也是原有部分的升华或者辅助,也可能是现实社会的翻版,正是这种多面体的特征使得其发展呈现出难以整齐化一的现象,需要区别对待。
(二)网络制度:作为基本的网络行规,结合网络社会的特点,来建立一套基本的规范约束网络社会的主体,从而在自由、分享和交流的主题下实现其应用,满足需要,但这套制度应该以现实社会的原则来进行。

十五、网络的眼球或者说兴奋点从短暂转为持久,从集中转为分散;分享作为交流的表现而更高层次是分享应该是种升华,知识的沉淀;
(一)分散眼球:要全面的满足各类人群的需要,唯一的办法就是分散,在以原创为主题的前提下,将个人人吸引在固定的信息分享或者共享组织里,在从眼球形成的角度寻求共性,做聚合效应。
(二)知识沉淀:键盘用户代表的是参与,而参与留下的是记录,其中可以形成的是知识,要将其个人的参与轨迹保留下来,并加以组织和传播,为其进行回顾,为其他开展分享,以碰撞火花。

十六、相信群众的力量、相信知识的来源、相信更适应的标准在于群众、相信群众的分辨与是非能力;
(一)组织约束:将个人的管理的权利下放给其所在的组织,所以让每个人都参与到各种组织里是前提,通过组织的管理来约束其具体的网络行为,而组织的管理可以是具体的制度也可以是舆论。
(二)评价体系:建立一个标准形成的评价体系,是非善恶美丑都有参与者来评定和认可,相信越多的参与,信息越充分,信息越充分就越准确。
(三)标准建立:建立一套可以执行的网络行走规范,明确各类主体的权利和义务,通过相应的激励机制来完成基本制度的运行,确定网络标准。

十七、低龄化的网民特点;解决信息分散性与爆炸性的途径;宽频与移动如何成为未来的趋势;
(一)低龄问题:低龄问题引发的是网络版本及适度应用的问题,第一强调应用和效果而不是技术;第二要解决好引导的问题;第三要充分挖掘资源,发现现有模式中未来的机会。
(二)信息有效性:有效信息越多越好,有效在于对用户有用,而且是对用户有价值的信息,坚持对用户有用的信息,越多越好,为独家越好,用户找起来越方便越好,读起来越简单越好,最好再有利用工具和办法。

十八、互联网的个人应用与企业应用的区别;如何与整个行业的应用趋势相融合而不是竞争或者冲突;
(一)应用组合:不严格的区分网站是企业应用还是个人应用,只需要一个了连接点,企业应用看的是消费资源,根据这点我们组织好资源,个人应用看重应用需求,我们组织好应用与功能。
(二)适应环境:可以涉猎广泛但不处处受敌,合作与独立虚实之间,平台战略就是不树立,但也面临本身做平台的对手,基本原则是在技术上适应他,在合作运动之间寻找机会,不做技术的前沿,只做应用的先锋。

十九、看到两年到三年的世界而不是五年后的世界;应用本身是独立还是融合,彼此应该有的界限是什么,融合的接线问题;
(一)防止泡末:看好用户当前的应用阶段,从最低级的应用服务开始去做,并且从地域的方式去拓展,再遵循群体特殊性,立足于渐进式的发展,以及规模型的应用,而不是基于未来的假设。
(二)融合底层:应用的独立是其创新的动力之一,融合可以创新但也必然导致限制,会引起连锁性的反映,因此融合底层是基本方向,具体来说,以用户为基础,以其基本的网络元素为根基,不断的应用延展。
如何是去形成一套比较体系的关于web2.0的概念体系;
(一)技术概念
(二)应用概念
(三)产品服务概念
(四)模式定位概念

昨晚做了一个很奇怪的梦!

该日志由 Kevin 发表于 2006, May 19, 11:51 AM

梦里我又回到了学生时期, 上体育课, 测100米短跑, 比较搞笑, 我跑的时候赛道不是有人挡就是有其它影响速度的问题出现, 老是跑得很差, 我不服气, 坚持再跑, 老师不耐烦, 说, 你就这样的成绩, 再跑也一样, 我说, 我校运会上跑得不好50米都6.5秒, 100是12.7,(汗, 梦里怎么还记得这么清楚?) 不可能差这么多的!

后来忘记怎样了, 反正很郁闷的感觉......唉,是不是因这最近太郁闷了?

增加一个分类为"域名主机评测"

该日志由 Kevin 发表于 2006, May 18, 3:22 AM

想抽空写一些心得之类的, 好歹从2002年成为商务中国的代理以来, 这方面的经验还是不少的, 写出来分享, 应该有些用吧!

原来我很久以来都是商务中国的"伙伴代理"!

该日志由 Kevin 发表于 2006, May 18, 3:19 AM

呵呵, 今天一早商务中国的MM打电话过来推销"中文.com"的域名, 价格还不错, 注册了当然闲置域名还不错, 最后问我在商务中国的代理级别, 刚睡醒, 而且最近都很少在商国中国拿产品, 所以被她一问倒是搞不清楚我是"牵手代理"还是最高的"伙伴代理"了, 不过听她说, 按照我在商务中国的消费额, 已经可以申请成为"伙伴代理"了, 名头倒是其次, 最主要是产品的代理价也会低一些的, 有这种好处, 当然不会放过了, 所以就拜托MM帮我申请了!

刚才才记起来上商务中国看看, 已经是"伙伴代理"了! 但是价格都没变, 汗, 看来很久以来就是所谓的最高级别"伙伴代理"了, 唉, 商务中国的服务很不错, 但是价格就是雷打不动啊!

Records:18712345678910»