<?php
    function request($url,&$result,$timeout=10) {
    $ctx = stream_context_create(array(
      'http' => array(
      'timeout' =>$timeout
      )
    ));
    $result = file_get_contents($url,false,$ctx);
    if ($result === false) {
      error_log("request $url   timeout",0);
      return 0;
    }
    return 1;
  }
define('BLOGBINDURL',"http://in-o.xianguo.com/sina/blogbind?");
//define('BLOGBINDURL',"http://localhost/get.php?");
  function bindblog($email,$uid,$blogurl,$action)
  {  
    $apikey = '4810512c96ee6'; //用于身份检验
    $time = time();
    $privete_key = "xianguosinapass";  
    $securitykey = md5($uid.$apikey.$time.$privete_key);//securitykey = md5(puid+apikey+time+privete_key)
    $encodeStr = "email=".urlencode($email)."&puid=".urlencode($uid)."&blogUrl=".urlencode($blogurl)."&action=".urlencode($action)."&apikey=".urlencode($apikey)."&time=".urlencode($time)."&securitykey=".urlencode($securitykey);
    $url = BLOGBINDURL.$encodeStr;  
    $flag = request($url,$result);
    
    if(1 == $flag)
    {      
      $resultReturn = json_decode($result);
      print_r($resultReturn);
      if(0 == $resultReturn['status'])
      return true;
      if(1 == $resultReturn['status'])
      return false;  
    }else
    {
      return false;  
    }
    
  }  
  
  $email = "xdy108@126.com";
  $uid = 1548940117;
  $blogurl = "http://blog.sina.com.cn/warsharp";
  $action = 0;  
  bindblog($email,$uid,$blogurl,$action);
  
?>
同时在smarty中增加了这个函数的调用。可以通过模板调用。
增加的方法名是:truncate_cn
实例:{$title| truncate_cn :80:’ 'utf-8’:’…’}
默认情况下,省略字符为… ,如果不需要省略字符,最后一下用’’。
我建议模板中可以使用这种方法,提出如果在模板中添加增加编译负担,但是
smarty模板编译一次,永久使用(只要模板没有修改)。所以编译也不会造成多少损耗。
函数的原型如下:
  /**
   * 中英文混杂字符串截取
   *
   * @param string $string
   * 原字符串
   * @param interger $length
   * 截取的字符数
   * @param string $etc
   * 省略字符
   * @param string $charset
   * 原字符串的编码
   *
   * @return string
   */
function substr_cn($string, $length = 80, $charset = 'UTF-8', $etc = '...') {
    if(mb_strwidth($string,'UTF-8')<$length) return $string;
    return mb_strimwidth($string,0,$length,'',$charset) . $etc;
  }



有一个哥们写了个函数:


function msubstr($str, $start, $len) {
     $tmpstr = "";
     $strlen = $start + $len;
     for($i = 0; $i < $strlen; $i++) {
         if(ord(substr($str, $i, 1)) > 0xa0) {
             $tmpstr .= substr($str, $i, 2);
             $i++;
         } else
             $tmpstr .= substr($str, $i, 1);
     }
     return $tmpstr;
  }
这是我作为一个初学者最简单的一个多进程程序。



#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int
main(int argc,char *argv[])
{
int i,fd;
char buf[1024];
pid_t pid;
for(i=1;i<argc;i++)
{
        if((pid = fork())<0)
                printf("fork error:no=%d\n",i);
        else if(pid == 0)
        {//子进程
                chdir("data");
                fd = open(argv[i],O_CREAT|O_TRUNC|O_WRONLY,S_IRWXU|S_IRWXG|S_IRWXO);
                sprintf(buf,"pid:%d\n",getpid());
                write(fd,buf,strlen(buf));
                break;
        }
}
printf("the number %d process overd\n",i);
waitpid(pid,NULL);
exit(0);
}




编译后使用:

# ./a.out 11 22
the number 1 process overd
the number 2 process overd
the number 3 process overd

就是按你的输入分别启动多个进程,在data目录下创建多个文件,每个文件的内容是创建他的进程的PID。

一、smarty truncate 截取
從字符串開始處截取某長度的字符.默認是80個。
你也可以指定第二個參數作為追加在截取字符串後面的文本字串.該追加字串被計算在截取長度中。
默認情況下,smarty會截取到一個詞的末尾。
如果你想要精確的截取多少個字符,把第三個參數改為"true" 。


例 截取:

index.php:

$smarty = new Smarty;
$smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');
$smarty->display('index.tpl');


index.tpl:

{$articleTitle}
{$articleTitle|truncate}
{$articleTitle|truncate:30}
{$articleTitle|truncate:30:""}
{$articleTitle|truncate:30:"---"}
{$articleTitle|truncate:30:"":true}
{$articleTitle|truncate:30:"...":true}


輸出結果:

Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after...
Two Sisters Reunite after
Two Sisters Reunite after---
Two Sisters Reunite after Eigh
Two Sisters Reunite after E...




在smarty模板中截取指定长度的字符串
在smarty模板中截取指定长度的字符串,可使用truncate这个插件.
用法:
{{$data.value&#124;truncate:28:'...'}}
28个字节14个字数输出,多余部分输出...,一个汉字算两个.
参考中文截取的乱码问题:http://hi.baidu.com/pphu/blog/item/845c3a461663850b6a63e573.html
Smarty中文截取插件:http://hcmjf.bokee.com/viewdiary.204332042.html


二、smarty里嵌入PHP的截取实例:

查看( 415 ) / 评论( 1 ) / 评分( 0 / 0 )
用iconv函数将gb2312转换为utf-8时,怎么有些汉字会出现问题,像"啰"字就会提示如下:
Notice: iconv() [function.iconv]: Detected an illegal character in input string
造成此错误的原因:
啰不是gb2312 字符集里的字,是gbk字符集里的字
iconv(gb2312,UTF-8//IGNORE,$要转的string);
这样就不会Notice: iconv() [function.iconv]:


iconv:
  die(json_encode(array('code'=>-1,'msg'=>iconv('gbk','utf-8','没有相关IP'))));
  die(json_encode(array('code'=>-1,'msg'=>iconv('gbk','utf8','没有相关IP'))));

必须要是:utf-8,得有中线,否则是会返回错误的,特别注意!
1.交换两个字符位置
xp
其实就是删除光标当前字符(x),然后再将缓存的字符贴出(p)

2.上下两行调换
ddp
实际就是(dd)删除当前行,(p)后即将缓存的行贴出

3.上下两行合并
J
实用性:高,shift+j

4.删除所有行
dG
错!(d)为删除,(shift+g)到文件尾,因此这命令效用为从光标处删除至文件尾

类似的还有:
dw -- 删到词尾
db -- 删到词头
daw -- 删除光标所在词(较有用)
d^删除至行头

5.从当前位置复制到行尾
y$

6.替换特定字符串
:%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串

7.移动:
h 或 向左方向键(←) → 光标向左移动一个字元
j 或 向下方向鍵(↓) → 光标向下移动一个字元
k 或 向上方向鍵(↑) → 光标向上移动一个字元
l 或 向右方向鍵(→) → 光标向右移动一个字元
0 → 数字『 0 』:移动到这一行的最前面字元处
$ → 移动到这一行的最后面字元处
nG → n 为数字。移动到这个文件的第 n 行
gg → 移动到这个文件的第一行,相当于 1G

8.删除:

dd → 刪除光标所在的那一整行
ndd → n 为数字。刪除光标所在的向下 n 列

yy → 复制光标所在的那一行
yw → 复制光标所在的一个单词

9.前进后退:
u → 还原前一个动作
o [Ctrl]+r → 重做上一个动作

10.显示行号:
set nu → 显示行号
set nonu → 取消显示行号
跳到第几行:
:21  到21行

11.删除所有的内容:
:g/^/d

Mark:
倒序文件行(即unix下的tac命令)
:g/^/m 0
global命令是Vim最强大的命令之一(个人认为是No.1),将其摸透用熟可以事半功倍:
删除偶数行
:g/^/+1 d
删除奇数行
:g/^/d|m.

:g/^/d

12.v键的用法,这个是vi加强才能用的
command模式下,按v键,再按j,k,l,等方向键,可以选取一部分内容。再按P,可以复制,或者:d,删除选中的内容。

13.更改:
更改
  「cw」:更改光标所在处的字到字尾处

  「c#w」:例如,「c3w」表示更改3个字
14.跳到指定行:
「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

15. 恢复文件
:recover
也可以在启动 vi 时利用 -r 选项。
MYSQL的引擎不是一般的多,这次说到的是MERGE,这个引擎有很多特殊的地方:

MERGE引擎类型允许你把许多结构相同的表合并为一个表。然后,你可以执行查询,从多个表返回的结果就像从一个表返回的结果一样。每一个合并的表必须有同样的表定义。

MERGE存储引擎在下面这种使用场合会最为有用,如果需要把日志纪录不停的录入MySQL数据库,并且每天、每周或者每个月都创建一个单一的表,而且要制作来自多个表的合计查询,MERGE表这时会非常有效。然而,这项功能有局限性。你只能合并MyISAM表而且必须严格遵守相同的表定义的限制。虽然这看起来好像是一个大问题,但是,如果你使用另外一种表类型(例如InnoDB),这种合并可能就不需要了。

其创建方法如下:

他将多个表在逻辑上当作一个表来查询。他建立后有两个文件,
.frm 表结构定义
.mrg union表的名字清单

两个基本表:

CREATE TABLE TEST_MERGE_1(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


CREATE TABLE TEST_MERGE_2(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


MERGE表的建立:

CREATE TABLE TEST_MERGE(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(TEST_MERGE_1,TEST_MERGE_2) ;



1. 此表类似于SQL中的union机制。
2. 此表结构必须与基本表完全一致,包括列名、顺序。UNION表必须同属一个DATABASE。
3. 基本表类型必须是MyISAM。
4. 可以通过修改.mrg文件来修改MERGE表,每个基本表的名字占一行。注意:修改后要通过FLUSH TABLES刷新表缓存。
5. 对基本表的更改可以直接反映在此表上。
6. INSERT_METHOD的取值可以是: 0 不允许插入 FIRST 插入到UNION中的第一个表 LAST 插入到UNION中的最后一个表。(4.0之后可用)
7. 定义在它上面的约束没有任何作用,约束是由基本表控制的,例如两个基本表中存在着同样的一个Key值,那么在MERGE表中会有两个一样的Key值。

http://wangyuanzju.blog.163.com/blog/static/130292007714102859807/#
# 命令模式

    * 移动光标
          o h 或 向左方向键(←) → 光标向左移动一个字元
          o j 或 向下方向鍵(↓) → 光标向下移动一个字元
          o k 或 向上方向鍵(↑) → 光标向上移动一个字元
          o l 或 向右方向鍵(→) → 光标向右移动一个字元
          o [Ctrl] + [f] → 屏幕『向下』移动一页,相当于 [Page Down]按键
          o [Ctrl] + [b] → 屏幕『向上』移动一页,相当于 [Page Up] 按键
          o n → n 表示『数字』。按下数字后再按空白鍵,光标会向右移动这一行的 n 个字元
          o 0 → 数字『 0 』:移动到这一行的最前面字元处
          o $ → 移动到这一行的最后面字元处
          o G → 移动到这个文件的最后一行
          o nG → n 为数字。移动到这个文件的第 n 行(可配合 :set nu)
          o gg → 移动到这个文件的第一行,相当于 1G
          o

            n → n 为数字。光标向下移动 n 行
    * 查找与替换
          o /word → 向光标之下查找一个名称为 word 的字符串。如想查找 eric4ever 字符串,输入 /eric4ever 即可
          o ?word → 向光标之上查找一个名称为 word 的字符串
          o n → 『重复前一个查找的动作』
          o N → 与 n 刚好相反,为『反向』进行前一个查找动作
          o :n1,n2s/word1/word2/g → n1 与 n2 均为数字。在第 n1 与 n2 行之间查找 word1 字符串,并将该字符串替换为 word2。如:在 1 到 9 行之间查找 eric4ever 并替换为 ERIC4EVER 则:『:1,9s/eric4ever/ERIC4EVER/g』
          o :1,$s/word1/word2/g → 从第一行到最后一行查找 word1 字符串,并将该字符串替换为 word2
          o :1,$s/word1/word2/gc → 从第一行到最后一行查找 word1 字符串,并将该字符窗替换为 word2,替换前显示提示对话框是否确认替换
    * 删除、复制与粘贴
          o x, X → 在一行字当中,x 为向后刪除一个字元 (相当于 [del] 按键), X 为向前刪除一个字元(相当于 [backspace] 按键)
          o dd → 刪除光标所在的那一整行
          o ndd → n 为数字。刪除光标所在的向下 n 列
          o yy → 复制光标所在的那一行
          o nyy → n 为数字。复制光标所在的向下 n 列
          o p, P → p 为将已复制的内容粘贴在光标下一行上,P 则为粘贴在光标的上一行
          o u → 还原前一个动作
          o [Ctrl]+r → 重做上一个动作
          o . → 小数点,意思是重复前一个动作

# ★编辑模式

    * i, I → 插入:在目前的光标所在处插入输入的文字,已存在的文字会向后退; 其中, i 为『从目前光标所在处插入』, I 为『在目前所在行的第一個非空白字元处开始插入』
    * a, A → a 为『从目前光标所在的下一个字元处开始插入』, A 为『从光标所在行的最后一个字元处开始插入』
    * o, O → o 为『在目前光标所在的下一行处插入新的一行』, O 为『在目前光标所在处的上一行插入新的一行』
    * r, R → r 为『取代光标所在的那一个字元』, R 为『一直取代光标所在的文字,直到按下 ESC 为止』
    * Esc → 退出编辑模式,回到一般模式中

# ★末行指令模式

    * :w → 将编辑的文件写入到硬盘上
    * :q → 退出 vi
    * :wq → 保存后退出,若为 :wq! 则为强制保存为退出
    * :set nu → 显示行号
    * :set nonu → 取消显示行号


<?php
class BolingGame
{
  public  function return_array()
  {  $return_array = array("a"=>"a","b"=>"b");
    return $return_array;
  }
  
  
}
?>


生成的Unit片断,修改为:

  public function testReturn_array()
  {
    // TODO Auto-generated BolingGameTest->testReturn_array()
    //$this->markTestIncomplete ( "return_array test not implemented" );
    
    $return_array = array("a"=>"a","b"=>"b");
    $this->assertEquals($return_array,$this->BolingGame->return_array());
    
    $return_array = array("a"=>"a","b"=>"c");
    $this->assertEquals($return_array,$this->BolingGame->return_array());
  
  }

将返回一个成功,一个失败。
需求:显示大家的记录只显示前200条,第一页20条,共十页

数据库表结构:
mysql> desc record_cache;
+----------+------------+------+-----+---------+----------------+
| Field    | Type       | Null | Key | Default | Extra          |
+----------+------------+------+-----+---------+----------------+
| id       | int(11)    | NO   | PRI | NULL    | auto_increment |
| mc_key   | varchar(2) | NO   | MUL |         |                |
| mc_value | mediumtext | NO   |     |         |                |
+----------+------------+------+-----+---------+----------------+


<?php

class VMc
{
  
  private $db;
  public function __construct()
  {
    $this->db = new MysqlPdo ( );
  
  }
  public function vMcSet($mcKey, $mcValue)
  {
    
    $mcValue ['ctime'] = time ();
    $data ['mc_value'] = serialize ( $mcValue );
    $data ['mc_key'] = $mcKey;
    
    if ($this->db->Insert ( 'record_cache', $data ))
    {
      return true;
    }
    else
    {
      return false;
    }
    
    return false;
  }
  
  public function vMcGet($mcKey)
  {
    
    $sql = "SELECT mc_value FROM record_cache WHERE mc_key = '$mcKey '";
    $bRet = $this->db->Select ( $sql );
    if ($bRet)
    {
      $res = $this->db->Fetch ();
      if ($res)
      {
        $res = unserialize ( $res ['mc_value'] );
      }
      return $res;
    }
    return false;
  
  }
  
  public function flushCache()
  {
    
    $db = $this->db->ConnectM ();
    $sql = 'TRUNCATE TABLE record_cache';
    if ($db->query ( $sql ))
    {
      return true;
    }
    else
    {
      return false;
    }
  }
}

?>




  public function GetRandomRecord(&$current, $page = 1, $offset = 20)
  {
    $total = 200;

    */
    //////////////////////临时缓存//////////////////////////////
    $vMc = new VMc ( );
    $mcValues = $vMc->vMcGet ( $page );
    if (! empty ( $mcValues ))
    {
      if (time () - $mcValues ['ctime'] <= 1800)
      {
        $current ['count'] = $mcValues ['count'];
        unset ( $mcValues ['count'], $mcValues ['ctime'] );
        foreach ( $mcValues as $k => $v )
        {
          if (! empty ( $v ))
          {
            $current ['record'] [$k] = $v;

          }
        }
        return true;
      }
    }
    /////////////////////////////////////////////////////////////
    $current ['count'] = $total;
    $start = $offset * ($page - 1);

    $sql = "select * from record  where status = 0 order by ctime desc limit " . $total;

    $bRet = $this->db->Select ( $sql );

    if ($bRet)
    {
      //fetch the result
      $res = $this->db->FetchAll ();

    }
    //if mc is open put them into memcache


    if (count ( $res ) < 200)
    {
      $current ['count'] = count ( $res );
    }
    $tp = ceil ( count ( $res ) / $offset );
    $tmp = 0;
    for($i = 0; $i < $tp; $i ++)
    {
      $cp = $i + 1;
      $kstart = $i * $offset;
      $pagerec = array_slice ( $res, $kstart, $offset );
      $pagerec ['count'] = $current ['count'];
      //////////////////////临时缓存//////////////////////////////
      if ($cp == 1)
      {
        if ($vMc->flushCache ())
        {
          $tmp = 1;
        }
      }
      if ($tmp == 1)
      {
        $vMc->vMcSet ( $cp, $pagerec );

      }
      //////////////////////////////////////////////////////////
      /*  if($this->mcobj){
      $this->mcobj->set('RANDOM_RECORD_' . $cp , $pagerec ,false ,60*30);
      }
      */
      //set the return data
      if ($cp == $page)
      {
        $current ['record'] = array_slice ( $res, $start, $offset );
      }
    }

    return true;
  }
用VB执行一个DOS命令不让他闪黑窗口,比如:
shell "net user 111 111 /add" 或shell "cmd /c c:\1.exe"不让闪黑窗口。
如何设置呀?

答案是:shell "net user 111 111 /add" ,vbhide

在命令后加个vbhide

Down

WEB2.0 jackxiang 2009-3-6 19:08
你现在的核心问题,是怎样迅速地找到你的消费者,最好能像滚雪球似的,成几何级数增长阅读全文
老是在输入括号给补全,我粘贴也补全,麻烦死了,卸载了:



1> rpm -qa|grep vim
vim-minimal-7.0.109-3.el5.3
vim-common-7.0.109-3.el5.3
vim-enhanced-7.0.109-3.el5.3

[root@localhost  <71.85>]: /home/xiangdong2
0> rpm -e vim-enhanced-7.0.109-3.el5.


vim-enhanced这个包里面是支持高亮显示的。但没有高亮显示了。。


# rpm -ql vim-enhanced-7.0.109-3.el5.3 然后查找相关文件的路径
/etc/profile.d/vim.sh  得到其中 vim.sh 所在位置
# vi /etc/profile.d/vim.sh  编辑!
if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
[ -x /usr/bin/id ] || return
[ `/usr/bin/id -u` -le 100 ] && return
# for bash and zsh, only if no alias is already set
alias vi >/dev/null 2>&1 || alias vi=vim
fi


老大感觉不爽,重新安装了:
yum -y install vim-enhanced


rpm -ql vim-enhanced-7.0.109-4.el5_2.4z
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
/usr/bin/ex
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor
/usr/share/man/man1/rvim.1.gz
/usr/share/man/man1/vimdiff.1.gz
/usr/share/man/man1/vimtutor.1.gz
脱了裤子放屁代码:

<?php
$time = $_SERVER['REQUEST_TIME'];
echo $time = date('Y-m-d H:i:s',$time);
?>


PHP中函数int time ( void )返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。自 PHP 5.1 起在 $_SERVER['REQUEST_TIME'] 中保存了发起该请求时刻的时间戳。 计算差之前,需要利用函数mktime把参数转化为整数,函数格式为:int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] ),功能是根据给出的参数返回 Unix 时间戳。时间戳是一个长整数,包含了从 Unix 纪元(January 1 1970 00:00:00 GMT)到给定时间的秒数。参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。

如果你的日期是来源于数据库的字段,那么查询语句里面可以直接查询数据库服务器的当前日期,甚至把时间差一起计算出来,PHP无须编写程序,直接象使用普通字段变量一样使用。

【转】提高PHP性能的12条忠告 :
http://mosee.blogbus.com/logs/23319825.html
用js判断客户端的时区,然后写入cookie,然后php里根据cookie的时区来输出对应时间
为什么用js?因为只有js才能获得客户端的时间,主要就是获取时间,然后进行时区判断
var d = new Date();
var tos = 0 - d.getTimezoneOffset() * 60;
和格林威治时间的秒差



可以用JS取得客户端时间.    将JS放在PHP程序里面就可以了. 如下:
<form>  
  <div   ID=serverTime> </div>  
  <div   ID=localTime> </div>  
  </form>  
  <script>  
  var   serverTime   =   '<?php   print   date("Y-m-d   G:i:s");?>';  
  var   d   =   new   Date();  
  var   localTime   =   d.getYear()   +   '-'   +   (d.getMonth()   +   1)   +   '-'   +   d.getDate()   +   '   '   +   d.getHours()   +   ':'   +   d.getMinutes()   +   ':'   +   d.getSeconds();  
  document.all['localTime'].innerText   =   'LOCALTIME:'   +   localTime;  
  document.all['serverTime'].innerText   =   'SERVERTIME:'   +   serverTime;  
  </script>

或者:

  <script>  
  var   now   =   new   Date();  
  alert(now.getYear()+"-"+(now.getMonth+1)+"-"+now.getDate()+"   "+now.getHours()+":"+now.getMinutes()+":"+now.getSeconds());  
  </script>
getenv()用来取得参数name环境变量的内容.参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针.环境变量的格式为name=value.

$_SERVER 是一个包含诸如头部(headers)、路径(paths)和脚本位置(script locations)的数组

若是IIS,则ISAPI不支持getenv 。getenv("REMOTE_ADDR")得不到用户的IP,返回的是空值
用$_SERVER["REMOTE_ADDR"]却能正常得到。
分页: 252/339 第一页 上页 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 下页 最后页 [ 显示模式: 摘要 | 列表 ]