好像很多编辑器里都有括号自动完成这样的功能,比如,输入左边括号"("后自动完成")",并把光标定位到两个括号中间,vim通过简单的键映射也可以做到.
以下是我在 O'Reilly Network 看到的一篇文章里学到的,把以下代码拷贝到.vimrc文件里


:inoremap ( ()i
:inoremap ) =ClosePair(')')
:inoremap { {}i
:inoremap } =ClosePair('}')
:inoremap [ []i
:inoremap ] =ClosePair(']')

function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\"
else
return a:char
endif
endf
    echo dirname(__FILE__);
    echo "<p>";
    echo dirname(dirname(__FILE__));

display:
E:\wwwroot\www\htdocs\5-5
E:\wwwroot\www\htdocs

使用范例:

本例返回字符串 $file 为 "/etc"。


<?
$path = "/etc/hostname";
$file = dirname($path);
?>




一、没有使用代理服务器的情况:

      REMOTE_ADDR = 您的 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

于是构造出如下PHP函数:
     function getIp(){

        if (getenv('HTTP_CLIENT_IP'))
        {  
            $ip = getenv('HTTP_CLIENT_IP');
        } elseif (getenv('HTTP_X_FORWARDED_FOR'))
        {  
            list($ip) = explode(',', getenv('HTTP_X_FORWARDED_FOR'));
        } elseif (getenv('REMOTE_ADDR'))
        {  
            $ip = getenv('REMOTE_ADDR');
        }  
        else
        {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        return $ip;
    }



这个更全space的:


  static  public function getIp() {
    // Gets the default ip sent by the user
    if (!empty($_SERVER['REMOTE_ADDR'])) {
      $direct_ip = $_SERVER['REMOTE_ADDR'];
    }
    // Gets the proxy ip sent by the user
    $proxy_ip     = '';
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
      $proxy_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else if (!empty($_SERVER['HTTP_X_FORWARDED'])) {
      $proxy_ip = $_SERVER['HTTP_X_FORWARDED'];
    } else if (!empty($_SERVER['HTTP_FORWARDED_FOR'])) {
      $proxy_ip = $_SERVER['HTTP_FORWARDED_FOR'];
    } else if (!empty($_SERVER['HTTP_FORWARDED'])) {
      $proxy_ip = $_SERVER['HTTP_FORWARDED'];
    } else if (!empty($_SERVER['HTTP_VIA'])) {
      $proxy_ip = $_SERVER['HTTP_VIA'];
    } else if (!empty($_SERVER['HTTP_X_COMING_FROM'])) {
      $proxy_ip = $_SERVER['HTTP_X_COMING_FROM'];
    } else if (!empty($_SERVER['HTTP_COMING_FROM'])) {
      $proxy_ip = $_SERVER['HTTP_COMING_FROM'];
    }
    // Returns the true IP if it has been found, else FALSE
    if (empty($proxy_ip)) {
      // True IP without proxy
      return $direct_ip;
    } else {
      $is_ip = preg_match('|^([0-9]{1,3}\.){3,3}[0-9]{1,3}|', $proxy_ip, $regs);
      if ($is_ip && (count($regs) > 0)) {
        // True IP behind a proxy
        return $regs[0];
      } else {
        // Can't define IP: there is a proxy but we don't have
        // information about the true IP
        return $direct_ip;
      }
    }
  }



有时候做监控或者别的什么的需要发带附件的邮件,mail 命令不能直接这么做,好在多数系统都自带了 mutt ,这个工具可以做到。

echo "mail content" | mutt -s "subject" -a "/path/to/attachment" to@domain.com

今天用到了,搜了好一会才发现这个办法。这里笔记一下。

mutt 是一个很强大的字符界面的邮件终端,貌似好多牛人都用这个来收发邮件。


<?php
$str="hallo world"; //比如这个是元算结果
$code= "print('\n$str\n');";//这个是保存在数据库内的php代码
echo "***";
echo($code);//打印组合后的命令,str字符串被替代了,形成一个完整的php命令,但并是不会执行
echo "###";
eval($code);//执行了这条命令
?>;


eval这个函数很可能有漏洞,因为可以执行很多命令:如:net user  等,会导致注入漏洞等,黑客很有可能拿到服务器的密码,然后反解密,很是危险性,必须防范,在我们的开发中如发feed等可以通过先拼接好字符串,然后构造函数发送feed!
有个插件名字叫 Limit Posts Automatically,可以统一截断首页的文章输出。
最终被我找到的函数是 mb_strimwidth()。它能满足的需求有:正确截断,无乱码,每条截取内容的长度基本相等。
乱码问题解释和解决:
先简单介绍一下。mb_strimwidth() 会根据”宽度”来截取文字,全角字符宽度为2,半角字符为 1,只要我们将截断的宽度设置为偶数,那最后截断输出的内容一定不会有乱码。


在截断输出首页文章内容的问题上,我们还应该搭配 strip_tags() 来共同实现。strip_tags() 的作用是清除字符串内的 html 标签,放在这里就是清除输出的内容格式(包括清除图片)。既然目的是截取小段文字,自然也不需讲求格式。

废话打住,说”正题”:

请找到模板内 index.php 中的



将其替换为

post_content)), 0, 120,”……”); ?>

之后首页文章内容截断输出就实现了。更改截取字数请调整例子中的 “120″ 为你想要的数值,它后面的 “……” 是输出末尾的替换内容,款式参考我的首页。这六个点也算在 120 之内,占 6 个半角宽度。

如果有看我前面对 mb_strimwidth 的介绍,聪明人该知道怎么将他们用在 Wordpress 模板侧边栏,毕竟在 css3 普及之前,用 PHP 的截断方式肯定是最佳的侧边栏截断选择。

老大在邮件做如下汇总:

echo mb_strimwidth("一二三四五六七八九十一二", 0, 23, '...','utf-8');



会输出如下内容:一二三四五六七八九十...这是因为mb这个函数算长度,如果总字符串小于指定的长度,那就不用截取啦!我在你原
来的字符串上加了个”二”,就会截出你要的结果了!看来是我们对这个函数了解不够
啊!
    开发代码结束或者基本结束后,往往由于前面时间紧张写的代码可能不符合公司的规范,所以需要对代码加以格式化,也方便阅读等等:
打开zend for eclipse6.1,当然是D版,然后选择以前开发的代码工程,然后,preferences-『窗口』-〉 『首选项』如图:



1.选择php的格式模板,如何缩进等,花括号如何摆放etc。。。



在工程上选择需要格式的几个php目录(同时选择php文件可能出不了source的菜单),用菜单source里面的format,即可格式化目录里面的php文件!



ctrl+shift+f对代码进行格式化阅读全文
发现我的MYSQL无法建立innodb表了,显象是在Create Table 语句中指定了ENGINE=INNODB 但是表建完后发现有一个warning信息,使用show warnings \G查看发现,Mysql提示使用Myisam建立表。然后使用 Show Variables like '%innodb%' 查看发现have_innodb 的值为Disable这表明不能建立innodb表。

Step 1. Stop MySQL service
Step 2:打开my.ini 找到 skip-innodb 并在其前加'#'号
Step 3: Restart MySQL service
问题解决。

做记录的时候要修改为innodb来存储:
ALTER TABLE `ac_follow` ENGINE = INNODB
但是没有修改成功:
对比了一下:show variables;或者:Show Variables like '%innodb%'
发现:have_innodb                     | DISABLED  
修改:have_innodb                     | YES  
把table_type的默认值MYISAM改为INNODB:

  [mysqld]  
  basedir=  
  datadir=  
  default-table-type=innodb  
  
  
  
  default-table-type=innodb   就是你所要加的..

即可!
啰嗦几句,如果你是默认在linux安装的包装的mysql或者apache,my.ini 和php.ini它的目录为:
默认:

httpd.conf 在/etc/httpd/conf

my.cnf 在/etc

php.ini 在/usr/local/lib

在Unix上,php.ini文件缺省放在/usr/local/lib上面,因为缺省的存放路径是 /lib,但是可以在编译的时候使用--with-config-file-path参数来修改php.ini的存放位置,例如你可以使用--with- config-file-path=/etc把它存放到/etc下面,然后可以从源码包中拷贝php.ini-dist到/etc/php.ini并修改使之满足需要。

Windows上面php.ini的缺省位置是windows系统目录,如果使用了Apache的话,那么将首先从 Apache的安装目录中查找 php.ini,例如:c:program filesapache groupapache,这样你可以在同一台机器上面为不同的Apache版本设置不同的php.ini文件。
一行解决写入日志:


一行完成Curl的POST输出:


临时调试:


路径变量:





在调试上传文件时,如苹果Android等(这一行来自PHP高级编程:岁月如哥【俗称:膘哥】(191295**)它提供的。2013-04-11 09:58 AM ):

后记:
岁月如哥(191295**)  15:20:48
你要看一下ios下。如果图片过大。或者。。。有些异常情况发生的时候。
$_FILES都为空的。
这些我们都遇到过
收到的内容全部为空。而且会导致其他所有的变量都为空
回忆未来-向东-Jàck(3726476**)  15:23:51
那有可能是这个问题,我用上面这个直接打Post有值,呵呵。
膘哥说得对,是可能图片太大了。

调试:

就能看到调试信息。
看了一下phpcms的源码:


  
function cache_write($file, $string, $type = 'array')  
{  
     if(is_array($string))  
     {  
         $type = strtolower($type);  
         if($type == 'array')  
         {  
             $string = "<?php\n return ".var_export($string,TRUE).";\n?>";  
         }  
         elseif($type == 'constant')  
         {  
             $data='';  
             foreach($string as $key => $value) $data .= "define('".strtoupper($key)."','".  
addslashes($value)."');\n";  
             $string = "<?php\n".$data."\n?>";  
         }  
     }  
     $strlen = file_put_contents(PHPCMS_CACHEDIR.$file, $string,FILE_APPEND);  //最好加上FILE_APPEND,否则tail -f出现
tail: /tmp/friendviews.txt: file truncated   参看:http://www.xiangdong.org/blog/post/1614/
       chmod(PHPCMS_CACHEDIR.$file, 0777);  
       return $strlen;  
}


可以看到
var_export
解释下
var_export
(PHP 4 >= 4.2.0, PHP 5)
var_export -- 输出或返回一个变量的字符串表示
描述
mixed var_export ( mixed expression [, bool return])

此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。

您可以通过将函数的第二个参数设置为 TRUE ,从而返回变量的表示。
应用场景:
假如我们看到一个数组是多维的,其实通过serialize之后写入文件 读出来之后unserialize也可以,但我们只是想看看数组里面是什么,但又不想打印到页面上。
实例:


<?php
        $a = array ( 1 , 2 , array ( "a" , "b" , "c" ));
        $file_string = var_export ( $a,True);
        var_dump($file_string);
        file_put_contents("/tmp/friendviews.txt",$file_string,FILE_APPEND);
        exit;

?>


tail -f /tmp/friendviews.txt

结果:
array (
  0 => 1,
  1 => 2,
  2 =>
  array (
    0 => 'a',
    1 => 'b',
    2 => 'c',
  ),
)







http_build_query 把数组整成一个get串:
http://v.blog.sohu.com/u/vw/269657
以下是转自一位老师的博客。------------------

昨晚看了央视《我们》栏目,新东方教育集团俞敏洪老师谈大学生就业话题。一直很喜欢俞敏洪老师的演讲,昨晚再听俞老师那睿智敏捷轻松的娓娓叙述,心里又有一番激荡,人生需要经常听这些智者的观点,因为他们充满了激情,他们生活事业中的激情和感悟体现在他们的演讲中,听这样的演讲让人智慧让人充满激情!感想很多,不知道怎么整理,也许俞老师的原话就是最好的注解,故记录一些原话以示励己:阅读全文
file_get_contents.php: Post数据
<?php
function Post($url, $post = null)
{
    $context = array();

    if (is_array($post))
    {
        ksort($post);

        $context['http'] = array
        (
            'method' => 'POST',
            'content' => http_build_query($post, '', '&'),
        );
    }

    return file_get_contents($url, false, stream_context_create($context));
}

$data = array
(
    'name' => 'test',
    'email' => 'test@gmail.com',
    'submit' => 'submit',
);

echo Post('http://localhost/5-5/request_post_result.php', $data);
?>

接收数据:


request_post_result.php  接收经过Post的数据:
<?php
echo $_POST['name'];
echo $_POST['email'];
echo $_POST['submit'];
echo "fdfd";
?>


更加简洁:
参看:http://www.phpe.net/articles/83.shtml
<?PHP
/*
CREATE TABLE `category` (
`categoryID` int(10) unsigned NOT NULL auto_increment,
`categoryParentID` int(10) unsigned NOT NULL default '0',
`categoryName` varchar(50) NOT NULL default '',
KEY `cate_id` (`categoryID`)
) TYPE=MyISAM AUTO_INCREMENT=11 ;

#
# 导出表中的数据 `category`
#

INSERT INTO `category` VALUES (1, 0, '一级类别1');
INSERT INTO `category` VALUES (2, 1, '二级类别1');
INSERT INTO `category` VALUES (3, 1, '二级类别2');
INSERT INTO `category` VALUES (4, 1, '二级类别3');
INSERT INTO `category` VALUES (5, 2, '三级类别21');
INSERT INTO `category` VALUES (6, 2, '三级类别22');
INSERT INTO `category` VALUES (7, 2, '三级类别23');
INSERT INTO `category` VALUES (8, 3, 'rfwesdfsd');
INSERT INTO `category` VALUES (9, 4, '54534w43');
INSERT INTO `category` VALUES (10, 5, '66666');
有问题请不要问我就行了。其他OK。欢迎修改使用。这是简单的。

*/
mysql_connect( "localhost", 'root', '' );
mysql_select_db( "test3" );
$cate_table = "category";

function _GetCategory( $category_id = 0, $depth = 1 )
{
global $cate_table;

$sql = "SELECT * FROM $cate_table ORDER BY categoryID DESC";
$result = mysql_query( $sql );

while ( $row = mysql_fetch_array( $result ) )
{
$array[$row[categoryParentID]][$row[categoryID]]
= array(
'id' => $row[categoryID],
'parent' => $row[categoryParentID],
'name' => $row[categoryName]
);
}

if ( !isset( $array[$category_id] ) )
{
return "";
}

foreach( $array[$category_id] AS $key => $category )
{
echo " <OPTION VALUE=".$category['id']." ";
if ( $category['parent'] == 0 )
{
echo " class='main' ";
}
if ( $depth > 1 )
{
echo ">" . str_repeat( "--", $depth - 1 ) . " " . $category['name'] . "</option>n";
}
else
{
echo ">" . $category['name'] . "</option>\n";
}

_GetCategory( $key, $depth + 1 );
}
unset( $array[$category_id] );
}

?>
<select name="categoryID">
<option selected value="">-------------</option>
<?=_GetCategory();?>
</select>
计算机的串口不能用,怎么与目标板的串口连接呢?

    windows下可以用USB转串口线实现,在google上搜索了一下,linux下更简单,连驱动都免装!

    测试环境:redhat linux fedora core 4

    总结如下:

    1. 检查是否存在设备/dev/ttyUSB0,如果没有就建立一个:

    mknod /dev/ttyUSB0 c 188 0

    以下推理未测试:

    如果有多个USB口,可以类推,建立/dev/ttyUSB[1-n],注意从设备号要累加,如:mknod /dev/ttyUSB[1-n] c 188 [1-n]

    2. 启动minicom, 设置串口设备为 /dev/ttyUSB0, 再设置波特率/数据位/停止位,保存为缺省配置df1

    3. 重启minicom, 复位目标板,看是否有打印信息?

    如果没有请确认:a)USB/串口线没问题,b)确认你使用的USB口是第一个(一个个的试吧,一般电脑不会标示出来)
先看这篇文章:
http://www.chinaunix.net/jh/27/771726.html


引用:
接上篇:
[硬件 通讯]PHP在RS232串口通讯协议的应用演示[测试环境PHP5.1.4]
http://bbs.chinaunix.net/viewthread.php?tid=771726


<?php
// --------------------------------------------------------------------------
// File name   : RS232_Server.php
// Description : RS232演示上位机程序
// Requirement : PHP 5.1.4 (cli) (http://www.php.net)
//
// Copyright(C), HonestQiao, 2006, All Rights Reserved.
//
// Author: HonestQiao (honestqiao@hotmail.com/QQ:5601680)
//
// 程序简介:
// 本程序与RS232_Client构成一个完整的演示系统,展示了PHP在RS232串口通讯上的应用。
// 程序之中实现了一个基础但是完整的RS232通讯协议(HQB232),通讯协议格式如下:
// 协议内容:
//             C->S 01 //请求通讯
//             S->C 02 //响应通讯
//             C->S LEN DATA //LEN表示数据(DATA)长度 DATA表示实际数据
//             C->S 03 //结束通讯
// 说明:S表示上位机 C表示下位机
//       HQB232表示HonestQiao演示的基础(Base)RS232通讯协议,包含了协议的
//   请求和响应,数据帧的结构。
//       演示过程为通讯的请求和响应,文件的发送(数据帧), 通讯的结束
//       数据帧的结构为当前的当前数据的长度,数据的HEX字符串(两位补足)
//        
//       欢迎探讨PHP在RS232串口通讯上的应用。
// --------------------------------------------------------------------------
set_time_limit(0);
exec('mode COM1: baud=9600 data=8 stop=1 parity=n xon=on');

$fd = dio_open('COM1:', O_RDWR);
if(!$fd)
{
    die("Error when open COM1");
}

$ff = dio_stat($fd);print_r($ff);
echo "HQB232 SERVER is listenning on COM1\n";
/// read
$len = 2;
$t=0;while (($t++)<1000)
{
    $data = dio_read($fd, $len);
    if ($data) {
        if($data==chr(0).chr(1)){
            echo "S_RECV:01\n";
            echo "S_SEND:02\n";
            dio_write($fd,chr(0).chr(2));
            break;
        }
    }
}

$handle = fopen("E:\\RS232\\TEST\\S_WAPMMonitor.exe", 'w');
/// read
$len = 2;
$t=0;while ($handle && ($t++)<1000)
{
    $len = 2;
    $data = dio_read($fd, $len);
    if($data==chr(0).chr(3)){
        echo "S_RECV:03\n";
        break;
    }
    elseif ($data) {
        $len = hexdec($data);
        if($len>0)
        {
        $data = dio_read($fd, $len);
        if($data){
            fwrite($handle, str2hex($data));
            echo "S_RECV:($len) ".microtime()."\n";
        }
        }
    }
}
fclose($handle);
dio_close($fd);

function str2hex($string)
{
    $str = '';
    for($i=0; $i<strlen($string); $i+=2){
        $str .= chr(hexdec(substr($string,$i,2)));
    }
    return $str;
}
?>





<?php
// --------------------------------------------------------------------------
// File name   : RS232_Client.php
// Description : RS232演示下位机程序
// Requirement : PHP 5.1.4 (cli) (http://www.php.net)
//
// Copyright(C), HonestQiao, 2006, All Rights Reserved.
//
// Author: HonestQiao (honestqiao@hotmail.com/QQ:5601680)
//
// 程序简介:
// 本程序与RS232_Server构成一个完整的演示系统,展示了PHP在RS232串口通讯上的应用。
// 程序之中实现了一个基础但是完整的RS232通讯协议(HQB232),通讯协议格式如下:
// 协议内容:
//             C->S 01 //请求通讯
//             S->C 02 //响应通讯
//             C->S LEN DATA //LEN表示数据(DATA)长度 DATA表示实际数据
//             C->S 03 //结束通讯
// 说明:S表示上位机 C表示下位机
//       HQB232表示HonestQiao演示的基础(Base)RS232通讯协议,包含了协议的
//   请求和响应,数据帧的结构。
//       演示过程为通讯的请求和响应,文件的发送(数据帧), 通讯的结束
//       数据帧的结构为当前的当前数据的长度,数据的HEX字符串(两位补足)
//        
//       欢迎探讨PHP在RS232串口通讯上的应用。
// --------------------------------------------------------------------------
set_time_limit(0);
exec('mode COM2: baud=9600 data=8 stop=1 parity=n xon=on');

$fd = dio_open('COM2:', O_RDWR);
if(!$fd)
{
    die("Error when open COM2");
}

$ff = dio_stat($fd);print_r($ff);
echo "HQB232 CLIENT is start on COM2\n";
dio_write($fd,chr(0).chr(1));echo "C_SEND:01\n";
$len = 2;
$t=0;while(($t++)<1000)
{
    $data = dio_read($fd, $len);
    if($data==chr(0).chr(2)){
        echo "C_RECV:02\n";    
        break;
    }
}
/*
$len = 2;
$t=0;while(($t++)<10)
{
    $sdata = sprintf("%03d",$t) . "=" . microtime() . " (" . randomkeys(rand(0,35)) . ")";
    $slen = strlen($sdata);
    $stxlen = sprintf("%02d",$slen);
    dio_write($fd,"$stxlen");
    dio_write($fd,"$sdata");echo "C_SEND:($stxlen)$sdata\n";
    //sleep(1);
}
*/

$handle = fopen ("E:\\RS232\\TEST\\WAPMMonitor.exe", "rb");
$data = "";
while ($handle && !feof($handle)) {
  $sdata = fread($handle, 127);
  $sdata = hex2str($sdata);
  $slen = strlen($sdata);
  $stxlen = sprintf("%02X",$slen);
  dio_write($fd,"$stxlen");
  dio_write($fd,"$sdata");echo "C_SEND:($slen) ".microtime()."\n";
  usleep(300);
}
fclose($handle);


dio_write($fd,chr(0).chr(3));echo "C_SEND:03\n";
dio_close($fd);

function randomkeys($length)
  {
   $pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
   for($i=0;$i<$length;$i++)
   {
     $key .= $pattern{rand(0,35)};
   }
   return $key;
}

function hex2str($hexstring)
{
    $str = '';
    for($i=0; $i<strlen($hexstring); $i++){
        $str .= sprintf("%02X",ord(substr($hexstring,$i,1)));
    }
    return $str;
}
?>



引用:
1. 代码之中的:    请修改为你自己的实际测试文件

$handle = fopen ("E:\\RS232\\TEST\\WAPMMonitor.exe", "rb");


$handle = fopen("E:\\RS232\\TEST\\S_WAPMMonitor.exe", 'w');


2. 进过测试,可以传送文本文件、二进制文件。

3. HQB232协议修改,原01、02、03指令,修改为chr(0).chr(1)、chr(0).chr(2)、chr(0).chr(3)来构成


http://blog.sina.com.cn/s/blog_44c07fb301000449.html
早上在一个网站上看到了一个很有趣的应用,Boosty’s ASCII Artist,把图片转化为HTML字符输出,下载了它的源代码看了一下,用的是PHP的image系列函数实现,最核心的地方应该是在循环过程及imagecolorsforindex、imagecolorat这两个函数,后者是用来获取图像某个位置的颜色索引值,而前者是根据某个索引值获取到颜色值,返回的是一个数组,格式如下:Array
(
[red] => 226
[green] => 222
[blue] => 252
[alpha] => 0
)
真佩服老外的创意。
网站地址:http://www.sebastian-r.de/asciiart/index.html

vi 注释多行

WEB2.0 jackxiang 2009-2-11 11:06
.,+4 s/^/#/g
注释1-4行!其实就是替换。。。
分页: 254/339 第一页 上页 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 下页 最后页 [ 显示模式: 摘要 | 列表 ]