拷贝如下代码,保存为clean.bat,(后缀为bat),双击即可开始清理:
@echo off
echo 正在清除系统垃圾文件,请稍等......
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp & md %windir%\temp
del /f /q %userprofile%\cookies\*.*
del /f /q %userprofile%\recent\*.*
del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q "%userprofile%\recent\*.*"
echo 清除系统LJ完成!
echo. & pause
echo 正在清除系统垃圾文件,请稍等......
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp & md %windir%\temp
del /f /q %userprofile%\cookies\*.*
del /f /q %userprofile%\recent\*.*
del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q "%userprofile%\recent\*.*"
echo 清除系统LJ完成!
echo. & pause
尽职尽责升级版本:躬身主动、一专多能、不等不靠、互相补台。
我们后方配备的先进设备、优质资源,应该在前线一发现目标和机会时就能及时发挥作用,提供有效的支持,而不是拥有资源的人来指挥战争、拥兵自重。谁来呼唤炮火,应该让听得见炮声的人来决策。 阅读全文
我们后方配备的先进设备、优质资源,应该在前线一发现目标和机会时就能及时发挥作用,提供有效的支持,而不是拥有资源的人来指挥战争、拥兵自重。谁来呼唤炮火,应该让听得见炮声的人来决策。 阅读全文
http://blog.chinaunix.net/u/29134/showart_1316574.html
1、慎重选择表名。
有两种选择:
按照多数开发语言的命名规则。比如(myCustomer)。
按照多数开源思想命名规则。比如(my_customer)。
按照咱们中国人的思想。比如(我的客户)。
第一种有个缺点,很容易忘掉大写的字母。
第二种则比较好,每个WORD间用下划线连接,避免遗忘。
第三种建议不要用,虽然很好记。不觉得解析这个表的时候还需要编码转化吗?我个人理解,大家可以补充。
2. 关于编码的设定。
A. GBK/GB2312.(适用于纯中文存储)。
B. UTF8.(适用于中英文混合存储)。
C. LATIN1。(适用于纯英文存储)。
D. 其他的。
3. 关于表引擎的选择。
A. MYISAM.(很多人说她的表级锁定会带来好多问题,其实只要设计好对应的表以及写好对应的SQL查询就没有那么大的问题。)
B. INNODB. (如果要用到事务,选择她不会错。至于多数人讲的MASTER/SLAVE结构上用INNODB在MASTER的选择是否正确,就要看你怎么用了。不能一味的疯狂使用INNODB。除非你想要确保非常高可用性,
)
C. CSV. (以前我写过文章,关于这个引擎。个人觉得最主要的是来存储少量数据以及从EXCEL到MYSQL的转换方面会很有用。当然只要涉及到规则数据的导入,她就可以办到。)
D. BLACKHOLE. (觉得最完美的用处在于MASETR/SLAVE上面,并且MASTER是一个临时的专门负责写的机器。不过缺点也很多,会与MYISAM或者INNODB或者其他的引擎有所冲突,这点自己要做个权衡)。
E. MEMORY. (应该说是MYISAM的兄弟了。不过在读内存总比读磁盘的速度要快。不过要注意,它不支持动态数据类型)。
F. FEDERATED. (典型的分布式引擎。我以前文章中有介绍。)
G. NDB。(网络版存储引擎。因为Replication 总是有延迟,所以如果系统容不得任何延迟,就用这个吧。)
H. FOLCON。(6.0后用来代替INNODB的引擎。)
I. 其他旧的以及新开发的引擎具体介绍:http://dev.mysql.com/doc/refman/6.0/en/storage-engines.html)。
4. 关于属性数据类型的选择。
A. INT(一个字节的TINYINT,两个字节的SMALLINT,三个字节的MEDIUMINT,四个字节的INT,8个字节的BIGINT。记住:UNSIGNED不管你定义或者不定义,都不影响内部的存储字节大小)
B. 少于10个字符用CHAR是在合适不过了。(不过要记住在MEMORY引擎里面会自动把VARCHAR转化为CHAR)
C. 我一般用DECIMAL或者NUMERIC来代替FLOAT 或者DOUBLE。因为老板要求精确的数字。如果不要求精确的,那就用FLOAT吧。速度快,占空间小。(DECIMA、FLOAT(P)是动态存储。比如:DECIMAL(10,2)占用5个字节。FLOAT占4个字节,)
D. BLOB,TEXT,VARCHAR(一般存放文章内容,特别是新闻网站。需要的字节数是所存储的字符长度+1。记住BLOB和VARCHAR是TEXT和CHAR的BINARY类型)
E. ENUM(在一定范围内绝佳的代替VARCHAR和CHAR的工具,因为她只占一到两个字节。)
F. 时间和日期类型(占3个字节的DATE,8个字节的DATETIME,4个字节的TIMESTAMP,3个字节的TIME,1个字节的YEAR。)。如果要存储比如‘1983’这样的年份,用YEAR明显比VARCHAR或者CHAR要节省空间。因为后者要占5个字节。
G. BOOLEAN(用来存储YES或者NO之类的值,占用一个字节。)
H. 关于自增字段。目前我们的项目中涉及到好多ORDER BY RAND()操作。此类语句在数据库并发大的时候会造成CPU严重阻塞,持续产生数据库死锁!解决此类问题最好的办法就是利用自增字段,用程序随即生成数字序列,或者在数据库端随即生成数字序列。
I. 关于ZEROFILL。非常好用的前置填补0的存储,而不是用用对应个数的空串来代替。在需要前置补零的操作中INT ZEROFILL可以用来代替CHAR或者VARCHR。
5. 关于默认值。
A. 在5.0之后,只要设定字段为NOT NULL,系统自动给出默认值。对应CHAR->’’,INT->0,BOOLEAN->0等等。
B. 在5.0之前的版本,需要手动指定默认值,否则会出现一定的异常。到时候查都不好查了。
6. 关于多数据库建立。
A. 应该把对应的业务放在各自不同的数据库里,而不是所有业务放到一个库里面。
B. 数据库的命名和表命名一样。
7. 关于索引。
A. 设计表初期尽量考虑到应该建立的索引。所有建立的索引一定要测试一下,看是否有必要,否则会翻倍的减少写数据的性能。
B. 对于只有存储0或者1的列,尽量干掉索引,单独分出两个表。一个代替0,另外一个代替1。或者在一个字段里面用EMUM或者CHAR(0)或者CHAR(1)来代替。
PS: 最后一个要值得注意的,就是尽量所有的字段用NOT NULL。虽然MYSQL可以对NULL列进行索引,不过我不建议。
1、慎重选择表名。
有两种选择:
按照多数开发语言的命名规则。比如(myCustomer)。
按照多数开源思想命名规则。比如(my_customer)。
按照咱们中国人的思想。比如(我的客户)。
第一种有个缺点,很容易忘掉大写的字母。
第二种则比较好,每个WORD间用下划线连接,避免遗忘。
第三种建议不要用,虽然很好记。不觉得解析这个表的时候还需要编码转化吗?我个人理解,大家可以补充。
2. 关于编码的设定。
A. GBK/GB2312.(适用于纯中文存储)。
B. UTF8.(适用于中英文混合存储)。
C. LATIN1。(适用于纯英文存储)。
D. 其他的。
3. 关于表引擎的选择。
A. MYISAM.(很多人说她的表级锁定会带来好多问题,其实只要设计好对应的表以及写好对应的SQL查询就没有那么大的问题。)
B. INNODB. (如果要用到事务,选择她不会错。至于多数人讲的MASTER/SLAVE结构上用INNODB在MASTER的选择是否正确,就要看你怎么用了。不能一味的疯狂使用INNODB。除非你想要确保非常高可用性,
)
C. CSV. (以前我写过文章,关于这个引擎。个人觉得最主要的是来存储少量数据以及从EXCEL到MYSQL的转换方面会很有用。当然只要涉及到规则数据的导入,她就可以办到。)
D. BLACKHOLE. (觉得最完美的用处在于MASETR/SLAVE上面,并且MASTER是一个临时的专门负责写的机器。不过缺点也很多,会与MYISAM或者INNODB或者其他的引擎有所冲突,这点自己要做个权衡)。
E. MEMORY. (应该说是MYISAM的兄弟了。不过在读内存总比读磁盘的速度要快。不过要注意,它不支持动态数据类型)。
F. FEDERATED. (典型的分布式引擎。我以前文章中有介绍。)
G. NDB。(网络版存储引擎。因为Replication 总是有延迟,所以如果系统容不得任何延迟,就用这个吧。)
H. FOLCON。(6.0后用来代替INNODB的引擎。)
I. 其他旧的以及新开发的引擎具体介绍:http://dev.mysql.com/doc/refman/6.0/en/storage-engines.html)。
4. 关于属性数据类型的选择。
A. INT(一个字节的TINYINT,两个字节的SMALLINT,三个字节的MEDIUMINT,四个字节的INT,8个字节的BIGINT。记住:UNSIGNED不管你定义或者不定义,都不影响内部的存储字节大小)
B. 少于10个字符用CHAR是在合适不过了。(不过要记住在MEMORY引擎里面会自动把VARCHAR转化为CHAR)
C. 我一般用DECIMAL或者NUMERIC来代替FLOAT 或者DOUBLE。因为老板要求精确的数字。如果不要求精确的,那就用FLOAT吧。速度快,占空间小。(DECIMA、FLOAT(P)是动态存储。比如:DECIMAL(10,2)占用5个字节。FLOAT占4个字节,)
D. BLOB,TEXT,VARCHAR(一般存放文章内容,特别是新闻网站。需要的字节数是所存储的字符长度+1。记住BLOB和VARCHAR是TEXT和CHAR的BINARY类型)
E. ENUM(在一定范围内绝佳的代替VARCHAR和CHAR的工具,因为她只占一到两个字节。)
F. 时间和日期类型(占3个字节的DATE,8个字节的DATETIME,4个字节的TIMESTAMP,3个字节的TIME,1个字节的YEAR。)。如果要存储比如‘1983’这样的年份,用YEAR明显比VARCHAR或者CHAR要节省空间。因为后者要占5个字节。
G. BOOLEAN(用来存储YES或者NO之类的值,占用一个字节。)
H. 关于自增字段。目前我们的项目中涉及到好多ORDER BY RAND()操作。此类语句在数据库并发大的时候会造成CPU严重阻塞,持续产生数据库死锁!解决此类问题最好的办法就是利用自增字段,用程序随即生成数字序列,或者在数据库端随即生成数字序列。
I. 关于ZEROFILL。非常好用的前置填补0的存储,而不是用用对应个数的空串来代替。在需要前置补零的操作中INT ZEROFILL可以用来代替CHAR或者VARCHR。
5. 关于默认值。
A. 在5.0之后,只要设定字段为NOT NULL,系统自动给出默认值。对应CHAR->’’,INT->0,BOOLEAN->0等等。
B. 在5.0之前的版本,需要手动指定默认值,否则会出现一定的异常。到时候查都不好查了。
6. 关于多数据库建立。
A. 应该把对应的业务放在各自不同的数据库里,而不是所有业务放到一个库里面。
B. 数据库的命名和表命名一样。
7. 关于索引。
A. 设计表初期尽量考虑到应该建立的索引。所有建立的索引一定要测试一下,看是否有必要,否则会翻倍的减少写数据的性能。
B. 对于只有存储0或者1的列,尽量干掉索引,单独分出两个表。一个代替0,另外一个代替1。或者在一个字段里面用EMUM或者CHAR(0)或者CHAR(1)来代替。
PS: 最后一个要值得注意的,就是尽量所有的字段用NOT NULL。虽然MYSQL可以对NULL列进行索引,不过我不建议。
SVN版本信息的删除:find . -type d -name “.svn”|xargs rm -rf或者find . -type d -iname “.svn” -exec rm -rf {} \;
<?php
$array_test = array("status"=>0,"desc"=>iconv("gbk","utf-8","成功"),"title"=>iconv("gbk","utf-8","我的博客"),"blogId"=>"100");//将中文的gbk转为utf-8,便于json_encode编码,否则中文为空:gbk的PHP文件必须转为utf-8的编码。
$result = json_encode($array_test);
print_r($result);
$json2array = json_decode($result,True);//True让它转为数组,这里特别注意!
$json2array['desc'] = iconv("utf-8","gbk",$json2array['desc']);//将utf-8---->gbk2312 浏览器用Charset:GBK2312显示才能正常
$json2array['title'] = iconv("utf-8","gbk",$json2array['title']);//同上
//去掉上面两行,浏览器在Utf-8下面显示中文正常,Charset:GBK2312下不正常,乱码!
print_r($json2array);
?>
$array_test = array("status"=>0,"desc"=>iconv("gbk","utf-8","成功"),"title"=>iconv("gbk","utf-8","我的博客"),"blogId"=>"100");//将中文的gbk转为utf-8,便于json_encode编码,否则中文为空:gbk的PHP文件必须转为utf-8的编码。
$result = json_encode($array_test);
print_r($result);
$json2array = json_decode($result,True);//True让它转为数组,这里特别注意!
$json2array['desc'] = iconv("utf-8","gbk",$json2array['desc']);//将utf-8---->gbk2312 浏览器用Charset:GBK2312显示才能正常
$json2array['title'] = iconv("utf-8","gbk",$json2array['title']);//同上
//去掉上面两行,浏览器在Utf-8下面显示中文正常,Charset:GBK2312下不正常,乱码!
print_r($json2array);
?>
字符转化的函数:
来自PHP高级编程QQ群:我姓--]苏
function zhjson($v){
if(is_array($v)){
foreach($v as $key =>$value){
$v[$key]=zhjson($value);
}
return $v;
}else{
return iconv("gb2312","utf-8",$v);
}
}
if(is_array($v)){
foreach($v as $key =>$value){
$v[$key]=zhjson($value);
}
return $v;
}else{
return iconv("gb2312","utf-8",$v);
}
}
让我想起我们自己的一个函数:(一样一样的)
function addslashes_array(&$ar)
{
if (is_array ( $ar ))
{
foreach ( $ar as $key => $ar_sub )
{
$this->addslashes_array ( $ar [$key] );
}
}
else if (is_string ( $ar ))
{
$ar = addslashes ( $ar );
}
}
{
if (is_array ( $ar ))
{
foreach ( $ar as $key => $ar_sub )
{
$this->addslashes_array ( $ar [$key] );
}
}
else if (is_string ( $ar ))
{
$ar = addslashes ( $ar );
}
}
这个方法也还不错:
膘叔(19129540) 15:27:14
来自PHP高级编程QQ群
乱码我更不搞了,我会直接在smarty模版里调用mb_string
<?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);
?>
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模板编译一次,永久使用(只要模板没有修改)。所以编译也不会造成多少损耗。
函数的原型如下:
有一个哥们写了个函数:
增加的方法名是: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;
}
* 中英文混杂字符串截取
*
* @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;
}
$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;
}
这是我作为一个初学者最简单的一个多进程程序。
编译后使用:
# ./a.out 11 22
the number 1 process overd
the number 2 process overd
the number 3 process overd
就是按你的输入分别启动多个进程,在data目录下创建多个文件,每个文件的内容是创建他的进程的PID。
#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);
}
#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:
index.tpl:
輸出結果:
在smarty模板中截取指定长度的字符串
在smarty模板中截取指定长度的字符串,可使用truncate这个插件.
用法:
{{$data.value|truncate:28:'...'}}
28个字节14个字数输出,多余部分输出...,一个汉字算两个.
参考中文截取的乱码问题:http://hi.baidu.com/pphu/blog/item/845c3a461663850b6a63e573.html
Smarty中文截取插件:http://hcmjf.bokee.com/viewdiary.204332042.html
二、smarty里嵌入PHP的截取实例:
從字符串開始處截取某長度的字符.默認是80個。
你也可以指定第二個參數作為追加在截取字符串後面的文本字串.該追加字串被計算在截取長度中。
默認情況下,smarty會截取到一個詞的末尾。
如果你想要精確的截取多少個字符,把第三個參數改為"true" 。
例 截取:
index.php:
$smarty = new Smarty;
$smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');
$smarty->display('index.tpl');
$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}
{$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...
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|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,得有中线,否则是会返回错误的,特别注意!
用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 选项。
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表的名字清单
两个基本表:
MERGE表的建立:
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/#
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
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
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) ;
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 → 取消显示行号
* 移动光标
o h 或 向左方向键(←) → 光标向左移动一个字元
o j 或 向下方向鍵(↓) → 光标向下移动一个字元
o k 或 向上方向鍵(↑) → 光标向上移动一个字元
o l 或 向右方向鍵(→) → 光标向右移动一个字元
o [Ctrl] + [f] → 屏幕『向下』移动一页,相当于 [Page Down]按键
o [Ctrl] + [b] → 屏幕『向上』移动一页,相当于 [Page Up] 按键
o n
o 0 → 数字『 0 』:移动到这一行的最前面字元处
o $ → 移动到这一行的最后面字元处
o G → 移动到这个文件的最后一行
o nG → n 为数字。移动到这个文件的第 n 行(可配合 :set nu)
o gg → 移动到这个文件的第一行,相当于 1G
o
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 | | | |
+----------+------------+------+-----+---------+----------------+
+----------+------------+------+-----+---------+----------------+
| 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;
}
}
}
?>
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;
}
{
$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
shell "net user 111 111 /add" 或shell "cmd /c c:\1.exe"不让闪黑窗口。
如何设置呀?
答案是:shell "net user 111 111 /add" ,vbhide
在命令后加个vbhide