向东 CHINAREN 说:
说实话,我很佩服你,真的,你教会我很多,感激!
加密助手 说:
--- 系统提示: 以下会话未被加密 ---
Wang.Z.B 说:

Wang.Z.B 说:
怎么跟他妈的告别似的
向东 CHINAREN 说:
你丫不是快要走了嘛,一年也快到了吧。。
Wang.Z.B 说:
哈哈
Wang.Z.B 说:
还早呢
Wang.Z.B 说:
我12月才来的
向东 CHINAREN 说:
那提前走啊。。
向东 CHINAREN 说:
我看你学的strus也差不多了吧,干那个去?还是回原来公司?
向东 CHINAREN 说:
有空聊聊,你知道那个播客哥们张宴去哪儿了吗?呵呵
加密助手 说:
--- 系统提示: 以下会话未被加密 ---
Wang.Z.B 说:
不知道啊
向东 CHINAREN 说:
豆瓣
Wang.Z.B 说:
视频啊
向东 CHINAREN 说:
好想去豆瓣了。。。
向东 CHINAREN 说:
豆瓣是搞视频的啊?
Wang.Z.B 说:
好想吃豆瓣了
Wang.Z.B 说:
不是吗
Wang.Z.B 说:
我以为是土豆呢
  
您发送了一个闪屏振动。
  
向东 CHINAREN 说:
http://www.douban.com/

向东 CHINAREN 说:
估计应该是这个吧。。
Wang.Z.B 说:

向东 CHINAREN 说:
这网站好像不乍的嘛。。。做什么的啊。。?
加密助手 说:
--- 系统提示: 以下会话未被加密 ---
Wang.Z.B 说:
这叫什么商务模式啊
向东 CHINAREN 说:
我也不懂咯。。。呵呵
Wang.Z.B 说:
感觉跟口碑网相似
加密助手 说:
--- 系统提示: 以下会话未被加密 ---
Wang.Z.B 说:
你怎么知道他去了豆瓣
向东 CHINAREN 说:
听播客一个哥们说的。
Wang.Z.B 说:
这样啊
Wang.Z.B 说:
这孙子好像也不上msn
向东 CHINAREN 说:
呵呵,是啊,应该没有用那个号码了。。
Wang.Z.B 说:
就是
Wang.Z.B 说:
把你给抛弃了
向东 CHINAREN 说:
呵呵,我晕,我又不是母的。。。(*^__^*) 嘻嘻……
Wang.Z.B 说:
你好好研究研究播客,到时候给我讲讲,我挺感兴趣的,觉得有前途
Wang.Z.B 说:
以后肯定是视频与语音的天下,mail必死
向东 CHINAREN 说:
呵呵,那你要搞视频和语言,得学习flash server,已经做出来了,可以跨平台的。。
向东 CHINAREN 说:
人无横财不富,搞IT得有风投得有前沿。。。我觉得
加密助手 说:
--- 系统提示: 以下会话未被加密 ---
Wang.Z.B 说:
不光fms,包括架构了,包括如何缓存,如何均衡,以及内容的制作过程,得学点这个
Wang.Z.B 说:
你现在别想一下子吃个胖子,风投哪那么容易拿啊
<html>
<script language="javascript">
function updatedoc()
{

       document.writeln("abc<br>");

       document.writeln("def<br>");

       document.writeln('<script language="javascript">');

       document.writeln('function updatedoc()');

       document.writeln('{');

       document.writeln(' document.writeln("first<br>");');

       document.writeln(' document.writeln("second<br>");');

       document.writeln('}');

       document.writeln('</scr'+'ipt>');  
       document.writeln('<input type=button name="update" value="更新" onclick="updatedoc()">');

}

</script>

<input type=button name="update" value="更新" onclick="updatedoc()">

</html>

/*这里不能写作</script>,否则系统会报错,其默认与上面的<script language="javascript"> 匹配。所以应当注意^_^*/
URL:http://www.cnblogs.com/happiness/archive/2006/04/18/377880.html
http://www.picavr.com/news/2008-02/4172.htm
用USB接口的数据采集系统,使用简单方便,无需外接电源,还可以利用PC机强大的运算能力处理数据。这类系统一般都要用单片机做接口控制,对于不会使用单片机的人是个难题。这里介绍一个不用单片机的USB数据采集系统,只要会用VB编程就可以实现。
参考链接:http://www.picavr.com/news/2008-02/4172.htm
点击在新窗口中浏览此图片
一、系统的硬件构成

本系统的电原理如上图,CH371是USB接口芯片,MAX197多路AD转换器做数据采集,电脑对采集的数据进行处理。

CH371是南京沁恒电子出品的一种简单易用的USB接口芯片,它包括芯片本身和计算机端的通用驱动程序。CH371以硬件逻辑实现了USB通信协议传输控制的整个过程,通用驱动程序通过软件向计算机应用层提供设备级接口,因此用户不必考虑USB通信协议、固件程序、驱动程序、底层数据传输过程等,就可以设计出各种USB接口设备。

CH371有多种工作方式,除了数据传输方式外,它还可以工作在一种主控方式,即使没有连结单片机、DSP等控制器,也可以输出控制信号和输入数据。CH371的D7~D0、A3~A0都是双向引脚,它们可以被分为两组,分别设置用于输入或输出。把CH371的A3~A0与MAX197的CS、WR、RD、HBEN四根输入控制线相连,把D7~D0和MAX197的并行数据端口相连,就可以通过软件直接控制MAX197的工作。

MAX197是MAXIM推出的12位AD转换器,单5伏供电,内置4.096伏电压基准,外围电路很简单,仅需外接几只电容就可以工作。MAX197有内外两种时钟和采样模式,模拟输入量程和极性可选,有0~5伏、0~10伏、±5伏、±10伏四种。有8个模拟输入通道。所有这些都可以通过软件来选择,即向MAX197写入一个字节的控制字来实现,控制字的各位功能见下表:



PD1

PD0

ACQMOD

RNG

BIP

A2

A1

A0

功能

内外时钟和电源管理模式

内外控制采样模式

模拟信号量程

模拟信号极性

模拟输入通道选择

二、系统的软件设计

1.       CH371计算机端的软件接口

CH371在计算机端提供了三个层次的软件接口,最高层是应用层接口。应用层接口是由CH371动态链接库DLL提供的面向功能应用的API函数。每个函数实现一个具体的功能,并用简便易用的API参数代替设备级接口中所要求的数据格式,所有API在调用后都有操作状态返回,用户只要选择特定的API函数就可以实现所需的功能。

CH371动态链接库DLL提供的的API函数包括设备管理、数据传输、中断查询、I2C操作和直接控制等几类,我们这里要用的是两个直接控制函数。

CH371GetStatus(ByVal iIndex As Long, ByVal iStatus As Long,ByRef iDataReg As Long)As Boolean

它的功能是通过CH371直接输入数据和状态,其中iIndex指定CH37设备序号,iStatus指向一个双字单元,用于保存状态数据。Bit7~Bit0对应CH371的D7~D0引脚。IDataReg指向一个双字单元,用于保存数据寄存器的数据。

CH371SetControl(ByVal iIndex As Long, ByVal iCtrData As Byte, ByVal iCtrlAddr As Byte,ByVal iData0e As Boolean, ByVal iAddr0e As Boolean)As Boolean

它的功能是通过CH371直接输出控制信号。ICtrData是准备写入D7~D0数据寄存器的数据, iCtrlAddr是准备写入A3~A0数据寄存器的数据, 它们都必须在输出使能时才可以输出数据。iData0e控制D7~D0输出使能,1输出、0输入。iAddr0e控制A3~A0输出使能,1输出、0输入。

2.       VB应用程序

应用程序是用VB编写的,它的核心就是调用上述两个API函数,通过CH371的D7~D0和A3~A0向MAX197写入控制字,启动模数转换,最后读出转换结果。VB要使用CH371动态链接库中的API函数,首先要用Declare语句在全局模块的代码段声明这些函数,CH371芯片厂商在其提供的VB DEMO中,有两个MODULE已经包含了CH371所有的API函数,用户只需要在自己的工程项目中将其加入即可。通过这两个函数调用,向MAX197写入控制字,设定模数转换器的工作方式、选择输入通道、启动模数转换,最后读入转换结果,存入电脑,再做进一步处理

参考链接:http://www.picavr.com/news/2008-02/4172.htm

由于CH371芯片的功能有限,对于新客户建议用下列芯片代替CH371,
新的芯片比CH371功能更多,更易使用,数据传输速度更快,成本更低

1、如果应用电路中有单片机或者DSP等,打算通过USB与计算机通讯,
那么建议用CH372或者CH375或者CH374代替CH371,
因为CH372/CH375/CH374的缓冲区是CH371的8倍,所以传输速度更快,
可达每秒300K甚至800K字节以上,即使是MCS51单片机也能够达到300KB

2、如果应用电路中没有单片机和DSP,只是打算通过CH371直接控制
外部逻辑电路,那么建议用CH341代替CH371,
因为CH341可以提供异步串口、并口以及类似I2C的两线串行接口,
CH341的串口波特率支持从50bps到2000000bps,支持速率控制,
CH341的并口有两种时序,分别是8位仿EPP并口和8位仿MEM并口,
并口的速度可达每秒300K字节,不但速度快而且容易I/O扩展,
CH341的仿I2C接口的时钟约为200KHz,传输速度约为每秒7KB

3、CH372或CH375或CH374必须在单片机或DSP的控制下才能与计算机通讯,
CH375和CH374还能与USB设备(如U盘、USB打印机、USB摄像头)通讯,
CH341可以直接与计算机通讯,不需要单片机或者DSP,可以用于
I/O扩展,I/O控制,简单的AD或者DA,USB转串口、USB转并口等。

4、网站上有用CH375或者CH374或者CH372升级CH371的详细说明,
注意,CH372/CH375/CH374和CH341与CH371的部分引脚不同

5、如果有其它技术问题,请联系技术支持EMAIL:
tech@winchiphead.com

用PHP的ob_start();控制您的浏览器cache!

Output Control 函数可以让你自由控制脚本中数据的输出。它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况。输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用。

我们先举一个简单的例子,让大家对Output Control有一个大致的印象:
Example 1.


所有对header()函数有了解的人都知道,这个函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错。如果我们去掉第一行的ob_start(),再执行此程序,我们会发现得到了一条错误提示:"Header had all ready send by"!但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用 flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!


一、 相关函数简介:
1、Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。
2、ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
3 、ob_get_contents :返回内部缓冲区的内容。
使用方法:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。
4、ob_get_length:返回内部缓冲区的长度。
使用方法:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。
5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。
使用方法:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)。
6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!
7、ob_implicit_flush:打开或关闭绝对刷新
使用方法:void ob_implicit_flush ([int flag])
说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()


二、深入了解:

1. 关于Flush函数:
这个函数在PHP3中就出现了,是一个效率很高的函数,他有一个非常有用的功能就是刷新browser的cache.我们举一个运行效果非常明显的例子来说明flush.
Example 2.

CODE<?php
for($i = 1; $i <= 300; $i++ ) print(" ");
// 这一句话非常关键,cache的结构使得它的内容只有达到一定的大小才能从浏览器里输出
// 换言之,如果cache的内容不达到一定的大小,它是不会在程序执行完毕前输出的。经
// 过测试,我发现这个大小的底限是256个字符长。这意味着cache以后接收的内容都会
// 源源不断的被发送出去。
For($j = 1; $j <= 20; $j++) {
echo $j."
";
flush(); //这一部会使cache新增的内容被挤出去,显示到浏览器上
sleep(1); //让程序"睡"一秒钟,会让你把效果看得更清楚
}
?>


具体效果你可以到这里看看http://www.php2000.com/~uchinaboy/out.php
PHP2000的最新的PHP聊天室就是用的这个技术,可惜的是源代码未公开 L
注:如果在程序的首部加入ob_implicit_flush()打开绝对刷新,就可以在程序中不再使用flush(),这样做的好处是:提高效率!

2. 关于ob系列函数:
我想先引用我的好朋友y10k的一个例子:
Example 3.

比如你用得到服务器和客户端的设置信息,但是这个信息会因为客户端的不同而不同,如果想要保存phpinfo()函数的输出怎么办呢?在没有缓冲区控制之前,可以说一点办法也没有,但是有了缓冲区的控制,我们可以轻松的解决:
CODE<?php
ob_start(); //打开缓冲区
phpinfo(); //使用phpinfo函数
$info=ob_get_contents(); //得到缓冲区的内容并且赋值给$info
$file=fopen(\'info.txt\',\'w\'); //打开文件info.txt
fwrite($file,$info); //写入信息到info.txt
fclose($file); //关闭文件info.txt
?>


用以上的方法,就可以把不同用户的phpinfo信息保存下来,这在以前恐怕没有办法办到!其实上面就是将一些"过程"转化为"函数"的方法!
或许有人会问:"难道就这个样子吗?还有没有其他用途?"当然有了,比如笔者论坛的PHP 语法加亮显示就和这个有关(PHP默认的语法加亮显示函数会直接输出,不能保存结果,如果在每次调用都显示恐怕会很浪费CPU,笔者的论坛就把语法加亮函数显示的结果用控制缓冲区的方法保留了),大家如果感兴趣的话可以来看看http://www.zphp.com/bbs/

可能现在大家对ob_start()的功能有了一定的了解,上面的一个例子看似简单,但实际上已经掌握了使用ob_start()的要点。
<1>.使用ob_start打开browser的cache,这样可以保证cache的内容在你调用flush(),ob_end_flush()(或程序执行完毕)之前不会被输出。
< 2>.现在的你应该知道你所拥有的优势:可以在任何输出内容后面使用header,setcookie以及session,这是ob_start一个很大的特点;也可以使用ob_start的参数,在cache被写入后,然后自动运行命令,比如ob_start(\"ob_gzhandler\ ");而我们最常用的做法是用ob_get_contents()得到cache中的内容,然后再进行处理……
<3>.当处理完毕后,我们可以使用各种方法输出,flush(),ob_end_flush(),以及等到程序执行完毕后的自动输出。当然,如果你用的是ob_get_contents(),那么就要你自己控制输出方式了。

来,让我们看看能用ob系列函数做些什么……

一、 静态模版技术

简介:所谓静态模版技术就是通过某种方式,使得用户在client端得到的是由PHP产生的html页面。如果这个html页面不会再被更新,那么当另外的用户再次浏览此页面时,程序将不会再调用PHP以及相关的数据库,对于某些信息量比较大的网站,例如sina,163,sohu。类似这种的技术带来的好处是非常巨大的。

我所知道的实现静态输出的有两种办法:
<1>.通过y10k修改的phplib的一个叫template.inc.php类实现。
<2>.使用ob系列函数实现。
对于第一种方法,因为不是这篇文章所要研究的问题,所以不再赘述。
我们现在来看一看第二种方法的具体实现:
Example 4.


CODE<?php
ob_start();//打开缓冲区
?>
php页面的全部输出
<?
$content = ob_get_contents();//取得php页面输出的全部内容
$fp = fopen("output00001.html", "w"); //创建一个文件,并打开,准备写入
fwrite($fp, $content); //把php页面的内容全部写入output00001.html,然后……
fclose($fp);
?>

这样,所谓的静态模版就很容易的被实现了……

二、 捕捉输出

以上的Example 4.是一种最简单的情况,你还可以在写入前对$content进行操作……
你可以设法捕捉一些关键字,然后去对它进行再处理,比如Example 3.所述的PHP语法高亮显示。个人认为,这个功能是此函数最大的精华所在,它可以解决各种各样的问题,但需要你有足够的想象力……
Example 5.

CODE<?
Function run_code($code) {
If($code) {
ob_start();
eval($code);
$contents = ob_get_contents();
ob_end_clean();
}else {
echo "错误!没有输出";
exit();
}
return $contents;
}


以上这个例子的用途不是很大,不过很典型$code的本身就是一个含有变量的输出页面,而这个例子用eval把$code中的变量替换,然后对输出结果再进行输出捕捉,再一次的进行处理……

Example 6. 加快传输


CODE<?
/*
** Title.........: PHP4 HTTP Compression Speeds up the Web
** Version.......: 1.20
** Author........: catoc <catoc@163.net>
** Filename......: gzdoc.php
** Last changed..: 18/10/2000
** Requirments...: PHP4 >= 4.0.1
** PHP was configured with --with-zlib[=DIR]
** Notes.........: Dynamic Content Acceleration compresses
** the data transmission data on the fly
** code by sun jin hu (catoc) <catoc@163.net>
** Most newer browsers since 1998/1999 have
** been equipped to support the HTTP 1.1
** standard known as \"content-encoding.\"
** Essentially the browser indicates to the
** server that it can accept \"content encoding\"
** and if the server is capable it will then
** compress the data and transmit it. The
** browser decompresses it and then renders
** the page.
**
** Modified by John Lim (jlim@natsoft.com.my)
** based on ideas by Sandy McArthur, Jr
** Usage........:
** No space before the beginning of the first \'<?\' tag.
** ------------Start of file----------
** |<?
** | include(\'gzdoc.php\');
** |? >
** |<HTML>
** |... the page ...
** |</HTML>
** |<?
** | gzdocout();
** |? >
** -------------End of file-----------
*/
ob_start();
ob_implicit_flush(0);
function CheckCanGzip(){
global $HTTP_ACCEPT_ENCODING;
if (headers_sent() || connection_timeout() || connection_aborted()){
return 0;
}
if (strpos($HTTP_ACCEPT_ENCODING, \'x-gzip\') !== false) return \"x-gzip\";
if (strpos($HTTP_ACCEPT_ENCODING,\'gzip\') !== false) return \"gzip\";
return 0;
}
/* $level = compression level 0-9, 0=none, 9=max */
function GzDocOut($level=1,$debug=0){
$ENCODING = CheckCanGzip();
if ($ENCODING){
print \"n<!-- Use compress $ENCODING -->n\";
$Contents = ob_get_contents();
ob_end_clean();
if ($debug){
$s = \"<p>Not compress length: \".strlen($Contents);
$s .= \"
Compressed length: \".strlen(gzcompress($Contents,$level));
$Contents .= $s;
}
header(\"Content-Encoding: $ENCODING\");
print \"x1fx8bx08x00x00x00x00x00\";
$Size = strlen($Contents);
$Crc = crc32($Contents);
$Contents = gzcompress($Contents,$level);
$Contents = substr($Contents, 0, strlen($Contents) - 4);
print $Contents;
print pack(\'V\',$Crc);
print pack(\'V\',$Size);
exit;
}else{
ob_end_flush();
exit;
}
}
?>

这是catoc的一段很早以前的代码,是在weblogs.com看到的,他利用了zlib的函数,对传输的内容进行了压缩,测试表明,对于10k以上的页面,会产生效果,而且页面越大,效果越明显…
在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。
SELECT * FROM table  LIMIT [offset,] rows | rows OFFSET offset


LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
mysql> SELECT * FROM table LIMIT 5,10;  // 检索记录行 6-15

//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行

//换句话说,LIMIT n 等价于 LIMIT 0,n。

mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.



                       $start = $offset * ($page-1);
                        $limit = $start.','.$offset;
                        $sql   = 'SELECT * FROM record '.$where.' ORDER BY ctime DESC LIMIT '.$limit;

大 多数人都知道爱迪生有句名言:天才是99%的汗水加上1%的灵感。今天在网上看到一篇文章,有人在文章的回复部分提到,爱迪生这句名言本身不是这样,是教 科书断章取义,爱迪生的原话因该是:天才是1%的灵感加上99%的汗水,但1%的灵感最重要,甚至比99%的汗水都重要。

很显然,如果加上后面的话,两种名言的版本表达的是完全不同的立场,但到底是不是这样呢?

随即到Google中查了一下,这篇文章:《中国教材:为什么要篡改爱迪生和爱因斯坦的名言?》可能是后一种名言版本的导火索,论证很充分,似乎是真的?但在这篇文章的评论处,有人以事实推翻了论证:

链接2: http://www.ortolon.com/articles_sterling_inspiration.htm
一开头便是这么写的:
“Inspiration and Perspiration
By Cindi Myers
Thomas Edison said, “Genius is one percent inspiration and ninety-nine percent perspiration.”
Without the one percent of inspiration, all the perspiration in the world is only a bucket of sweat….”

这后一段话翻译过来,跟原文所讲的那段加长版的名言非常贴切,想必应是原文理论之根据了。然而谁都不可能忽略的是:“没有1%的灵感,所有的汗水……”这句话并不在爱迪生名言的引号之内!

注意上面的标题
Inspiration and Perspiration
By Cindi Myers
已明确指出此文是Cindi Myers所写的一篇议论文。所以引号外的话不过是Cindi Myers的一句评价罢了。可惜口牙。

我想至此,考究结束,出处应该就是这里了。原文作者一开始便站在了错误的论据上。

不过,在我看来,论点却是好的……


该评论的作者摆出了事实,英文原句是否如他所说呢?随即到Google中搜索:Genius is one percent inspiration and ninety-nine percent perspiration,在出现的英文搜索结果中,几乎就是这句原话,没有所谓的“但1%的灵感最重要,甚至比99%的汗水都重要”的意思, 呵呵~~,在此可以确信,持第二种名言版本观点的人原来也有点断章取义了,教科书并没有更改爱迪生的名言。

说实话,当我看到第二种版本的时候,我有点信了,如果没有后面的确认,我可能还会给别人讲之前的爱迪生名言是错的,应该是什么什么等等。所以, 网上的信息应该有选择性地来吸收,不能见风是风,见雨是雨,即使是非常有“正义感”、感觉非常“权威”的那种,否则的话,只能是以讹传讹!

这个版本改进了不少地方,例如对ZF的良好支持。官方目前只提供法语、德语、意大利语三个语言包的下载,中文的还没有看到,再期待一下吧!

下载地址如下:

http://downloads.zend.com/studio-eclipse/6.0.1/ZendStudioForEclipse-6_0_1.exe (for windows)

http://downloads.zend.com/studio-eclipse/6.0.1/ZendStudioForEclipse-6_0_1.tar.gz (for linux)

http://downloads.zend.com/studio-eclipse/6.0.1/ZendStudioForEclipse-6.0.1.dmg (for mac,不好意思,一直不知道这个是MAC下的安装程序)

之前的注册机还可以继续使用,本人已测,呵呵~

KeyGen:http://www.niuc.net/attachment.php?fid=203


用户名:Faceker.com
注册码:02251FE3126660400000

用户名:PHPER
注册码:4784D9D0086669570000

可以到 Zend 官方网站下载 Zend Studio For Eclipse:[url=http://downloads.zend.com/studio-eclipse/6.0.0/ZendStudioForEclipse-6_0_0.zip]直接下载地址[/url]

我一直在寻找一个理想的 PHP 开发环境。之前一直用 Dreamweaver,但他只是一个完美的代码和 HTML 编辑器,在 PHP 开发方面,他连基本的自定义函数的参数都无法提示;有人推荐 EditPlus,不过他也只是个编辑器,离“开发环境”还差得远;再者就是 Zend Studio,他是公认的很好很强大的 PHP 开发环境,不过看到他那丑陋的界面,我就知道那不是我想要的。

后来知道了有个 PDT,基于 Eclipse 的 PHP 开发环境,用了一下,着实不错,界面也很美观,基本的 PHP 开发功能也够用,下定决心,从此就用他来搞 PHP 了。

过年期间,看到一条新闻,新版的 Zend Studio 发布了,该版本是基于 Eclipse 的开发环境,是在 PDT 的基础之上开发的,迫不及待地下载安装试用,WOW,一切都是那么的完美,毫无疑问,Zend Studio For Eclipse 将是以后 PHP 开发的不二选择了!


server.php:(UTF8编码)
<?php
// server
// 设置错误处理
error_reporting (e_all);
// 设置运行时间
set_time_limit (0);
// 起用缓冲
ob_implicit_flush ();
$ip = "127.0.0.1"; // ip地址
$port = 8848;  // 端口号
$socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);  // 创建一个socket
if ($socket)
echo "socket_create() successed!\n";
else {
echo "socket_create() failed:".socket_strerror ($socket)."\n";
exit(0);
}

$bind = socket_bind ($socket, $ip, $port); // 绑定一个socket
if ($bind) {
  echo "socket_bind() successed!\n";
      }else{
        echo "socket_bind() failed:".socket_strerror ($bind)."\n";
        return 0;
       }

$listen = socket_listen ($socket);  // 间听socket
if ($listen)
echo "socket_listen() successed!\n";
else
echo "socket_listen() failed:".socket_strerror ($listen)."\n";

while (true)
{
$msg = socket_accept ($socket);  // 接受一个socket
if (!$msg)
{
echo "socket_accept() failed:".socket_strerror ($msg)."\n";
break;
}
$welcome0 = "welcome to php server!向东\n";
$welcome = iconv("utf-8","gbk",$welcome0);//显示gb的中文,否则在windows cmd 终端显示乱码
socket_write ($msg, $welcome, strlen ($welcome));
while (true)
{
$command = strtoupper (trim (socket_read ($msg, 1024)));
if (!$command)
break;
echo $command."\n";
switch ($command)
{
case "HELLO":
$writer = "hello everybody!";
break;
case "BYE":
$writer = "bye-bye";
break;
case "HELP":
$writer = "hello\tquit\thelp";
break;
default:
$writer = "error command!\n";
}
socket_write ($msg, $writer, strlen ($writer));
if ($command == "QUIT")
break;
}
socket_close ($msg);
}
socket_close ($socket);  // 关闭socket
?>
client.php(UTF8编码)
<?php
// Client
// 设置错误处理
error_reporting (E_ALL);
// 设置处理时间
set_time_limit (0);

$ip = "127.0.0.1";       // IP 地址
$port = 8848;            // 端口号

$socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);   // 创建一个SOCKET
if ($socket)
    echo "socket_create() successed!/n";
else
    echo "socket_create() failed:".socket_strerror ($socket)."/n";

$conn = socket_connect ($socket, $ip, $port);       // 建立SOCKET的连接
if ($conn)
    echo "Success to connection![".$ip.":".$port."]/n";
else
    echo "socket_connect() failed:".socket_strerror ($conn)."/n";

echo socket_read ($socket, 1024);  

$stdin = fopen ('php://stdin', 'r');
while (true)
{
    $command = trim (fgets ($stdin, 1024));
    socket_write ($socket, $command, strlen ($command));
    $msg = trim (socket_read ($socket, 1024));
    echo $msg."\n";
    if ($msg == "Bye-Bye")
        break;
}
fclose ($stdin);
socket_close ($socket);
?>

1、 没有钱,没有权,再不对你好点,你能跟我?  

2、 买了电脑不上宽带,就好比酒肉都准备好了却在吃饭前当了和尚。  

3、天上掉钞票我不会弯腰,因为天上连馅饼都不会掉,更别说掉钞票了。  

4、 你给我买10条烟总比我去一次夜总会划算吧。  

5、要我扫地就绝对不刷碗,要我刷碗就绝对不扫地,两样一起做?你当我是外星人啊!  

6、 躺在床上看电视不如在看电视时上床睡觉。  

7、给我一个支点,我把邻居那小子的汽车翘到沟里去,省得他见我就按喇叭。  

8、参加选美的那些女人,都找不到好男人,因为好男人都结婚了,比如我。  

9、如果领导下个月再不给我加薪,我就辞职,辞职前再给他送两条中华,抽死他。  

10、 如果猪都会飞了,谁还买飞机?骑着猪上天不就行了。  

11、 我的领带又找不到了,是不是你昨天又没有找到抹布?  

12、 在埃及,一个男人可以娶四个老婆,那得多累啊,还是中国好。  

13、 你还是让我跪搓板吧,跪电暖气实在受不了啊!  

14、 我就算是一只癞蛤蟆,我也决不娶母癞蛤蟆。  

15、 喝白酒一斤,我绝对没感觉,因为喝半斤就已经喝死了。  

16、上厕所看报纸等同于大便完了擦屁股,是一个流程,否则不叫完工。  

17、儿子不听话可以适当的打打,要不就显不出老子的威严,台-湾问题就是如此。  

18、我妈过生日,送脑白金还不如送两块大梁骨煮煮吃,至少还能当下酒菜。  

19、 我才不去见网友,除非国家修改一夫一妻制。  

20、 下辈子我还找你,因为除了我,你是最傻的
1.由于50上的qmail不需要验证就可以发信,有了验证反而出现错误,最后在133那台机器就可以了,auth login afeng133@afeng133.sina.net 123qwe(Base64),然后给126(xxx108@126.com)发了信可以收到,不错不错,以下文件存为utf8 格式:

如果有获取whoami之类的,修改配置文件 php.ini 把exec的执行权限放开!

smtp.class.php:

<?php
set_time_limit(120);
class smtp_mail
{
    var $host="";          //主机
    var $port="25";          //端口 一般为25
    var $user="";          //SMTP认证的帐号
    var $pass="";          //认证密码
    var $debug = false;   //是否显示和服务器会话信息?
    var $conn;
    var $socket="";
    var $result_str;      //结果
    var $in;          //客户机发送的命令
    var $from_r;          //真实的源信箱,一般与smtp服务器的用户名一样,否则可能由于smtp服务器的设置而发送不成功
    var $mailformat=0; //邮件格式 0=普通文本 1=html邮件

    function smtp_mail($host,$port,$user,$pass,$debug=false)
    {
        $this->host  = $host;
        $this->port   = $port;
        $this->user   = base64_encode($user);
        $this->pass   = base64_encode($pass);
        $this->debug  = $debug;
        $this->socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);  //具体用法请参考手册
        if($this->socket)
        {
              //$this->result_str  =  "创建SOCKET:".socket_strerror(socket_last_error());
              $this->result_str  =  "创建SOCKET:".iconv("GBK","UTF-8//TRANSLIT//IGNORE", socket_strerror(socket_last_error()));
              $this->debug_show($this->result_str);
        }
        else
        {
            exit("初始化失败,请检查您的网络连接和参数");
        }
        $this->conn = socket_connect($this->socket,$this->host,$this->port);
        if($this->conn)
        {
            $this->result_str  =  "创建SOCKET连接:".iconv("GBK","UTF-8//TRANSLIT//IGNORE",socket_strerror(socket_last_error()));
            $this->debug_show($this->result_str);
        }
        else
        {
            exit("初始化失败,请检查您的网络连接和参数");
        }
        $this->result_str = "服务器应答:<font color=#cc0000>".socket_read ($this->socket, 1024)."</font>";
        $this->debug_show($this->result_str);
    }

    function debug_show($str)
    {
        if($this->debug)
        {
            echo $str."<p>\r\n";
        }
    }

    function send($from,$to,$subject,$body)
    {
        if($from == "" || $to == "")
        {
            exit("请输入信箱地址");
        }
        if($subject == "") $sebject = "无标题";
        if($body    == "") $body    = "无内容";

        $All          = "From:".$from."\r\n";
        $All          .= "To:".$to."\r\n";
        $All          .= "Subject:".$subject."\r\n";
        if($this->mailformat==1) $All.= "Content-Type: text/html;\r\n";
        else $All .= "Content-Type: text/plain;\r\n";
        $All          .= "charset=gb2312\r\n\r\n";
        $All          .= $body;
        /*
          如果把$All的内容再加处理,就可以实现发送MIME邮件了
          不过还需要加很多程序
        */

        //以下是和服务器会话
        $this->in       =  "EHLO HELO\r\n";
        $this->docommand();

        $this->in       =  "AUTH LOGIN\r\n";
        $this->docommand();
        $this->in       =  $this->user."\r\n";

        $this->docommand();

        $this->in       =  $this->pass."\r\n";
        $this->docommand();

        if(!eregi("235",$this->result_str)){
           $this->result_str = "smtp 认证失败";
           $this->debug_show($this->result_str);
           return 0;
        }

        $this->in       =  "MAIL FROM:<".$from.">\r\n";
        $this->docommand();

        $this->in       =  "RCPT TO:<".$to.">\r\n";
        $this->docommand();

        $this->in       =  "DATA\r\n";
        $this->docommand();

        $this->in       =  $All."\r\n.\r\n";
        $this->docommand();

        if(!eregi("250",$this->result_str)){
           $this->result_str = "邮件发送失败";
           $this->debug_show($this->result_str);
           return 0;
        }

        $this->in       =  "QUIT\r\n";
        $this->docommand();

        //结束,关闭连接
        return 1;
    }

    function docommand()
    {
        socket_write ($this->socket, $this->in, strlen ($this->in));
        //$this->debug_show("客户机命令:".iconv("GBK","UTF-8", $this->in));
        $this->debug_show("客户机命令:".iconv("GBK","utf-8//TRANSLIT//IGNORE", $this->in)); //防止报错:Notice: iconv(): Unknown error (84)
        $this->result_str = "服务器应答:<font color=#cc0000>".iconv("GBK","UTF-8//TRANSLIT//IGNORE", socket_read ($this->socket, 1024))."</font>";
        $this->debug_show($this->result_str);
    }

} //end class
?>

sendmail.php:

<?php
  header("Content-type: text/html; charset=utf-8");
?>
<?php
  include("smtp.class.php");
  //$mails=new smtp_mail("220.181.15.111","25","xxx108@126.com","********");
  $mails=new smtp_mail("220.181.15.111","25","xxx108@126.com","********",true);
  $date = date("Y-m-d H:i:s");
  if($mails->send("xxx108@126.com","xxx108@126.com","有人于".$date."登录服务器","请注意是否自己在该时间登录。","登录时间。"))
  {
    echo "发送成功!";
  }else{
      echo "邮件服务器忙,请稍候再试试";
  }
?>


如果有获取谁的exec函数加上(修改配置文件 php.ini 把exec的执行权限放开!):

这个程序的实质是模仿如下终端操作:

telnet smtp.sina.net 25
Trying 202.108.37.33...
Connected to smtp.sina.net.
Escape character is '^]'.
220 sina3-197.sina.net ESMTP - qmail-1.04
helo sina.net
250 sina3-197.sina.net
AUTH LOGIN
334 VXNlcm5hbWU6
ZWFzdHN1bkBlYXN0c3VuLnNpbmEubmV0
334 UGFzc3dvcmQ6
MTIzcXdl
235 验证通过- authentication successfully
data
503 请先用 RCPT - RCPT first (#5.5.1)
mail from:<xxx108@126.com>
250 Mail OK
rcpt to:<xxx108@126.com>  
rcpt to:<372647693@qq.com>      //第二个抄送人
250 Mail OK
data
354 End data with <CR><LF>.<CR><LF>
From: Mail test <372647693@qq.com>
Sender: jackxiang <xxx108@126.com>
To: xxx108@126.com
Cc: 372647693@qq.com
Subject: mail testing mail title

This is mail content...

.
250 Mail OK queued as smtp1,C8mowEDpO0uNr0dUwfhiAA--.1433S3 1413984769

(最后这个小数点一定要加上)

此时,372647693@qq.com也会收到,这个cc:就是抄送人,在邮件标题里体现,真正发还是在rcpt to:<372647693@qq.com>      //第二个抄送人。

邮件标题:
mail testing mail title
发件人:Mail test<372647693@qq.com> (由 xxx108@126.com 代发)
收件人:我<xxx108@126.com>
抄送人:372647693<372647693@qq.com>
This is mail content...

QQ邮箱:
发件人:我自己的邮箱 <372647693@qq.com>(由 xxx108@126.com 代发)
时   间:2014年10月22日(星期三) 晚上9:46  
收件人:xdy108 <xxx108@126.com>
抄   送:回忆未来-向东-Jàck <372647693@qq.com>
This is mail content...

————————————————————————————————————————————————————————
以下如果打开$mails=new smtp_mail("smtp.sina.net","25","eastsun@eastsun.sina.net","123qwe","false");  //false
可以看见其到底是如何进行会话的,如下:
创建SOCKET:您的主机中的软件放弃了一个已建立的连接。
创建SOCKET连接:您的主机中的软件放弃了一个已建立的连接。

服务器应答:220 smtp-5-32.sina.net ESMTP - qmail-1.04

客户机命令:EHLO HELO

服务器应答:250-smtp-5-32.sina.net 250-AUTH=LOGIN 250-AUTH LOGIN 250-PIPELININGJH 250 8BITMIME

客户机命令:AUTH LOGIN

服务器应答:334 VXNlcm5hbWU6

客户机命令:ZWFzdHN1bkBlYXN0c3VuLnNpbmEubmV0

服务器应答:334 UGFzc3dvcmQ6

客户机命令:MTIzcXdl

服务器应答:235 验证通过 - authentication successfully

客户机命令:MAIL FROM:xiaoqian@staff.sina.com.cn

服务器应答:250 eastsun@eastsun.sina.netok

客户机命令:RCPT TO:xiangdong2@staff.sina.com.cn

服务器应答:250 ok

客户机命令:DATA

服务器应答:354 请继续 - go ahead

客户机命令:From:xiaoqian@staff.sina.com.cn To:xiangdong2@staff.sina.com.cn Subject:我来个中文测试一下,怎么就不正常了呢,哈哈。。向东 Content-Type: text/plain; charset=gb2312 我来个中文测试一下,这里是信的内容!!! .

服务器应答:250 ok 1212053255 qp 74366

客户机命令:QUIT

服务器应答:221 smtp-5-32.sina.net

发送成功!


对用户名和密码的Base64编码方法:

<?php
$user="xiangdong2@staff.sina.com.cn";          
$pass="xiangdong";
$user   = base64_encode($user);
$pass   = base64_encode($pass);
echo $user."\n";
echo $pass."\n";
?>




[root@vm0000055 ~]# telnet staff.sina.com.cn 110
Trying 10.210.98.10...
Connected to staff.sina.com.cn (10.210.98.10).
Escape character is '^]'.
+OK staff-jes1.sina.com.cn POP3 service (Sun Java(tm) System Messaging Server 6.2-3.04 (built Jul 15 2005))
xiangdong2
-ERR Unrecognized command
xiangdong2@staff.sina.com.cn
-ERR Unrecognized command
USER xiangdong2
+OK Name is a valid mailbox
pass xiangdong  
+OK Maildrop ready
AUTH
-ERR Unrecognized command
LIST
+OK scan listing follows
1 1675
2 8490
3 3004
4 625
5 650
6 1877
7 1928
8 1939
9 2131
.
RETR 1
+OK 1675 octets
Return-path: <jinsong@staff.sina.com.cn>
Received: from sina123123123 ([10.218.26.58]) by staff-jes1.sina.com.cn
(Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
id <0KLS00I01MFE7V00@staff-jes1.sina.com.cn>
(original mail from jinsong@staff.sina.com.cn); Thu,
25 Jun 2009 20:01:15 +0800 (CST)
Received: from sina123123123 ([10.218.26.58]) by staff-jes1.sina.com.cn
(Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
with ESMTPA id <0KLS00OCGMQ2Q1B0@staff-jes1.sina.com.cn>; Thu,
25 Jun 2009 20:01:14 +0800 (CST)
Date: Thu, 25 Jun 2009 20:01:34 +0800
From: =?GB2312?B?wbq+osvJ?= <jinsong@staff.sina.com.cn>
Subject:
=?gb2312?B?vfHM7M/Czuc2o7owMLnHuMnN+LnK1c+jrNbQtefQxbPGueO2q7P2yqHCt9PJxvez9rnK1c8g1OyzybulwarN+NO1yPs=?=
To: cpyw <cpyw@staff.sina.com.cn>, sinamail <sinamail@staff.sina.com.cn>,
platform <platform@staff.sina.com.cn>
Message-id: <200906252001339840407@staff.sina.com.cn>
MIME-version: 1.0
X-Mailer: Foxmail 6, 9, 201, 16 [cn]
Content-type: text/plain; charset=gb2312
Content-transfer-encoding: base64

vfHM7M/Czuc2o7owMLnHuMnN+LnK1c+jrNbQtefQxbPGueO2q7P2yqHCt9PJxvez9rnK1c8g1Oyz
ybulwarN+NO1yPsNCmh0dHA6Ly90ZWNoLnNpbmEuY29tLmNuL3QvMjAwOS0wNi0yNS8xOTMyMzIx
MjIyNS5zaHRtbA0KaHR0cDovL3RlY2guc2luYS5jb20uY24vdC8yMDA5LTA2LTI1LzE5MTYzMjEy
MjEzLnNodG1sDQpodHRwOi8vdGVjaC5zaW5hLmNvbS5jbi9pLzIwMDktMDYtMjUvMTkyNTMyMTIy
MTguc2h0bWwNCiAJCQkJDQotLS0tLS0tLS0tLS0tLQ0Kwbq+osvJDQoNCnNpbmG7pbavyefH+NTL
06rWp7PW1+kNCg0Ktee7sKO6MDEwo602MjY3NjgxMQ0KDQrK1rv6o7oxMzcxNzkwMzMxOQ0KDQrT
ys/ko7pqaW5zb25nQHN0YWZmLnNpbmEuY29tLmNuIA0KDQpNU046cm9zZWxpYW5nanNAaG90bWFp
bC5jb20NCg0KUVE6NjQyNzkyMjI0DQoyMDA5LTA2LTI1DQo=








PHP通过Socket来发送网页Post请求和Get请求Ok代码:

如果没有Host在里面[fwrite($sock, "Host: upload.com\r\n");],则会出现:
51 [Mon Jun 20 18:12:19 2011] [error] [client 172.25.38.70] client sent HTTP/1.1 request without hostname (see RFC2616
        section 14.23): /upload/upload.cgi


判断refer啥的,这块涉及到php的curl传refer,请参考:
伪造refer:  https://jackxiang.com/post/4022/
伪造Host绑定来源:https://jackxiang.com/post/4423/
明天结婚。是阿里巴巴集团同事的集体婚礼。

和老婆风风雨雨一路走来。大学最后一年相识,毕业后,她在青岛,我在北京。她抛弃很好的工作背景,杀到北京,在北京生活三年,又和我一起来到杭州发展。感激老婆,每次虽然面对的不是什么大决择,也需要很大的勇气,想起来多不容易。这期间尤其令我感到内疚的是在北京期间老婆压力过大导致生病,深深自责。

不管怎么样,祝福我们吧! 我先祝福一下 :)

冯大辉(David Feng)

大学的专业是生物技术,毕业后从事计算机行业。

在 IT 行业的这几年基本上是做 Oracle 数据库相关的技术工作,对 Oracle 数据库的管理与性能优化有一点研究,有点实践经验,乐于分享技术经验,是一名 Oracle ACE (bio,中文介绍)。我的技术背景包括:



Oracle RDBMS
Unix / Linux
Web / Security


曾经参与编辑两本 Oracle 的技术图书:



《Oracle数据库性能优化》
《Oracle数据库DBA专题技术精粹》


此外曾参与翻译过三本计算机图书。

现就职于阿里巴巴集团旗下支付宝(中国)网络技术有限公司。任职数据库架构师 。

这个站点是我实验 Web 技术与知识积累的场所,秉承"最简约的技术取得最大的收益"的理念,希望也能对其他人有点用。如您所知,本人发布的文章与评论内容仅代表本人观点。一般在网上我用 "Fenng" 这个ID 进行技术交流。

我是东北人,现在生活在杭州。养了两只猫. 喜欢 The Cure 的音乐.

可以通过网络电话或者电子邮件和我联系: dbanotes@gmail.com

  function set_upload_data($arr_upload)
  {
    $this->attachment=$arr_upload[files];
    $this->upload_dir=$arr_upload["upload_dir"];
    
  }
  function uploadfile()
  {  
    $fileName = mb_convert_encoding($this->attachment['name'],'GBK','UTF-8');//这一行开始转码,否则出现乱码
   //$fileName = iconv("UTF-8","GBK", $this->attachment['name']);  //这样也行,由UTF-8转到GBK,和上面的函数有区别
    if(move_uploaded_file($this->attachment['tmp_name'],$this->upload_dir.$fileName))
    {  
      return 1;//上传成功
  
    }else{  
        return 0;//上传失败
        }
  }

参考如下文章:
mb_convert_encoding这个函数是用来转换编码的。原来一直对程序编码这一概念不理解,不过现在好像有点开窍了。
不过英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。

mb_convert_encoding的用法见官方:
http://cn.php.net/manual/zh/function.mb-convert-encoding.php

做一个GBK To UTF-8
< ?php
header("content-Type: text/html; charset=Utf-8");
echo mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK");
?>

再来个GB2312 To Big5
< ?php
header("content-Type: text/html; charset=big5");
echo mb_convert_encoding("你是我的朋友", "big5", "GB2312");
?>
不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库。

PHP中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似。

下面还有一些详细的例子:
iconv — Convert string to requested character encoding
(PHP 4 >= 4.0.5, PHP 5)
mb_convert_encoding — Convert character encoding
(PHP 4 >= 4.0.6, PHP 5)

用法:
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉
mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;


string iconv ( string in_charset, string out_charset, string str )
注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
Returns the converted string or FALSE on failure.


使用:

发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.

一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.

from_encoding is specified by character code name before conversion. it can be array or string - comma separated enumerated list. If it is not specified, the internal encoding will be used.
/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */
$str = mb_convert_encoding($str, “UCS-2LE”, “JIS, eucjp-win, sjis-win”);
/* “auto” is expanded to “ASCII,JIS,UTF-8,EUC-JP,SJIS” */
$str = mb_convert_encoding($str, “EUC-JP”, “auto”);

例子:
$content = iconv(”GBK”, “UTF-8″, $content);
$content = mb_convert_encoding($content, “UTF-8″, “GBK”);

如果前端是GBK,而在生成Json时需要做转换才能中文正常显示,如下(把GBK转为Utf8):

最后:Ajax走的都是Utf8,所以得从GBK转为Utf8.
PHP的主要语言开发者之一、Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言。他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java已经输掉了Web开发语言的战争,PHP是事实上的标准和胜利者。

Gutmans的这篇文章在技术界引发了强烈争议,很对人对此有不同的意见,我在这里就阐述一下我对PHP和Java两种语言的看法。

我早先曾经在《Perl、PHP、ASP、JSP技术比较》一文中对比过PHP和Java的异同,简而言之,PHP是一种解释执行的脚本语言,语法和C语言类似,易学易用,不懂电脑的非专业人员稍经学习也能使用PHP.而Java要先编译成Class文件,然后在Java虚拟机上执行,Java开发需要熟悉Java语法以及一些核心的架构,从而实现一种可复用的、跨平台的软件,Java比PHP要难学的多。

实际上,从技术架构来说,Java语言相比PHP有明显的优势,Java使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。PHP只能实现简单的分布式两层或三层的架构,而JAVA可以实现多层架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用Java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。从数学运算和数据库访问速度来讲,Java的性能也优于PHP.实际上,对于跨平台的大型的企业应用系统来讲,Java几乎已经成为唯一的选择(微软.NET不支持跨平台),但是在于Web网站应用开发来讲,Java却面临着被PHP边缘化的危险,几乎所有的虚拟主机都支持PHP+MySQL,而支持Java的却少之又少,在资源上,网上有不计其数的PHP资源,很多著名的大型网站(例如Facebook、Mediawiki等)都是基于PHP的,而成功的Java网站却寥寥无几,这又是什么原因呢?

Java的理念是“一次编写,到处运行”,Java在应用框架底下的架构是无与伦比的,远胜过其他任何语言,Java的框架利于大型的协同编程开发,系统易维护、可复用性较好。而PHP很容易自学,让热备能快速简洁地编写代码,适合于快速开发,中小型应用系统,开发成本低。在调试、发布上,PHP也较Java简单。

理念上的不同导致了Java和PHP在Web应用开发上显示了不同的结果,尽管Java的数学计算和数据库访问都有优势,架构也相当完美,但是PHP却可以简单轻松地支持高强度Web访问,能够快速开发应用,支持PHP的虚拟主机多如牛毛,使得用PHP开发一个网站比用Java开发一个网站要快得多,容易的多。Java所拥有的优点只适合传统的以软件项目为核心的开发模式,而PHP更适合于以客户为核心的SaaS的开发模式,因此,PHP目前在Web网站开发的优势完全是因为Web网站开发的特殊性而导致的,并非编程语言特性所决定。

因此,PHP在Web网站开发语言的战争中已经慢慢将Java抛在了后面,Java要想在Web网站开发上奋起直追,的确应该多听听Andi Gutmans的意见,彻底改变一下思路才行,否则两者的差距只能是越来越远。

另外,虽然在国际上LAMP(Linux+Apache+Mysql+Php)架构已经占领了统治地位,但是在中国国内还有一个怪胎,就是基于微软的Windows Server+IIS+SqlServer+ASP/ASP.NET的架构,从理论上说,微软的这一套架构也能实现不错的性能,只可惜Windows和SqlServer价格不菲,整个架构在性能上比起LAMP不仅没有什么优势,反而还有不少劣势,因此微软的这一套家伙在国际市场上吃不开。而国内使用微软盗版则可以忽略成本,而ASP的易学易用性不逊于PHP,甚至连IT外行都能够使用,因此在国内也有不小的市场。但是随着中国在保护知识产权方面的日趋完善,免费的LAMP依旧是未来的趋势。
人的一生,分为童年,少年,青年,中年,老年五个阶段。
   童年是个迷,混沌初开,诸事未晓,一切惟凭本能,感性用事,他对世界,外人对于他,均不甚了了,是个“迷”。少年是一幅画,初具理性,乍识人生,但童心未泯,天真浪漫,恰如多姿多彩“一幅画”。青年是一首诗,情窦初开,英姿勃发,潇洒浪漫。对爱情,事业,前程充满憧憬,是为“一首诗”。中年是一篇散文,人到中年,曾经沧海难为水,除却巫山不是云,这时,对人生,社会,现实已有相当的阅历,回首往事,展望未来,谁无万千感慨?这时涉世更深,对人生的理解又上一层楼,多了几分飘逸,此时宛如“一篇散文”。老年是一套哲学,老之已至,两鬓飞霜,悟透人生,深知天命。无为者,因悲黄泉路近,老气横秋,哀叹“转眼八旬已到,回头万事皆空”。有为者,自觉来日无多,老当益壮,高歌“满目清山夕阳照”,到达这种境界,无论是前者还是后者,都是“一套哲学”。
    这就是人生的五个阶段,在这五个阶段里,男人和女人又有所不同。有说女人是水,男人是泥,女人是船,男人是舵,船没有舵手不行,女人没男人不成事。不然,女人细腻,男人粗犷,所以,女人在选择男人靠知觉,男人选择女人凭感觉。男人爱用眼睛看女人,最容易受美丽的诱惑,女人爱用心去想男人,最容易受心的折磨,在聪明和美貌之间,男人则往往看重美貌,男人爱看女人眼前怎样,女人爱看男人今后如何。
    孩童时,男孩看女孩是雾里看花,不明所以,只会眼晴发亮,女孩看男孩是水中观月,只凭自己的喜恶
    青少年时,男人说世上值得爱的女人不止一个,女人却说世上值得爱的只有一个,男人找女人时很少精心思索,女人找男人时苦心琢磨,对女人来说,一辈了听不烦的话是-我爱你;对男人来说-辈子想不完的是-我爱谁。
    中年时,男人的美,美在深度和真诚,女人的美,美在风度和表情,男人说,世间的美,是因为有男人对女人的爱,女人说,女人给世界的爱才产生一切的美。女人是二十而美,三十而强,四十而贤,五十而润,六十而精。男人对女人应是二十而慕,三十而助,四十而敬,五十而赏,六十而伴。
    到了老年,男人说做男人难,要生命不息,奋斗不止,像拉满的弓和不能回头的箭;女人说做女人难,做女强人要受责难,退而守家,保家,又是目光短浅。
    于是,男人和女人时常想换位置,但是,如果换了位置又如何呢?还不如选择少年夫妻老来伴,执子之手,与子偕老的平淡生活。共同走好人生的五个阶段。
Windows Media Player文件

Let's dance in style,
Let's dance for a while
Heaven can wait,
We're only watching the skies
Hoping for the best
But expecting the worst
Are you going to drop the bomb or not????
Let us die young or let us live forever
We don't have the power
But we never say never
Sitting in a sandpit,
Life is a short trip
The music's for the sad men
Can you imagine when this race is won??
Turn our golden faces into the sun
Praising our leaders,
We're getting in tune
The music's played by the madmen

Forever young, I want to be forever young
Do you really want to live forever
Forever -- and ever

Some are like water
Some are like the heat
Some are a melody and some are the beat
Sooner or later, they all will be gone
Why don't they stay young?
It's so hard to get old without a cause
I don't want to perish like a fading horse
Youth's like diamonds in the sun
And diamonds are forever
So many adventures couldn't happen today
So many songs we forgot to play
So many dreams swinging out of the blue
We'll let them come true
Windows Media Player文件


whole life the wonder such you bring the beauty
i can see but i keep deep inside on it
oh life i feel that i can bring it again
in the world where love will still remain

choose your words make them whys
many things have produced(?) where we are
i am here
here with you
close your eyes let love heal the sorrow
once again i feel in life
i'm sure of this insight
and i need you more than ever
life's told me so much more
feel stronger than before of this feeling stay here forever
long ago i was blind
i thought the love was so waste here to stay
but we walked all the way
and we said good bye
even though i knew i loved you still
suddenly you were gone and she was in your rounds
its picture i remember
i was lost could not be saved my life just ran away
i only wish that we could start over
but true love will find its way
now i love it seemed to stay
i lost it once and now i found the way to live again

oh life i wonder such you bring the beauty
i can see but i keep deep inside on it
oh life i feel that i can bring it again
in the world where love will still remain

but true love will find its way
now i love it seemed to stay
i lost it once now i found the way to live again

oh life the wonder such you bring the beauty
i can see but i keep deep inside on it
oh life i feel that i can bring it again
in the world where love will still remain
mmm....
in the world where love will still remain

汗!

生活笔记 jackxiang 2008-5-27 17:58
 一只小鸟正在飞往南方过冬的途中。天气太冷了,小鸟冻僵了,从天上掉下来,跌在一大片农田里。它躺在田里的时候,一只母牛走了过来,而且拉了一泡屎在它身上。冻僵的小鸟躺在牛屎堆里,发掘牛粪真是太温暖了。牛粪让它慢慢缓过劲儿来了!它躺在那儿,又暖和又开心,不久就开始高兴地唱起歌来了。一只路过的猫听到了小鸟的歌声,走过来查个究竟。顺着声音,猫发现了躲在牛粪中的小鸟,非常敏捷地将它刨了出来,并将它给吃了!

  这个故事的寓意是……

  1) 不是每个在你身上拉屎的都是你的敌人。

  2) 不是每个把你从屎堆中拉出来的都是你的朋友。

  3) 而且,当你陷入深深的屎堆当中(身陷困境)的时候,闭上你的鸟嘴!
分页: 283/339 第一页 上页 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 下页 最后页 [ 显示模式: 摘要 | 列表 ]