金银财宝价最高, 光阴似箭斩人的刀。 日月穿梭催人老 太阳佛三道金光把人熬。
意思说,就算有千军万马金银无数,最终也敌不过时间的刻画!最终的结果还是灰飞烟灭!
所以做人要看淡泊些才好
分析:金银财宝的价值是高的,但光阴像箭那样快能使人衰老就像用刀在杀人,日月如穿梭把人催老,太阳这个神佛的三道金光能把人熬老。
三道金光分别是蒿殷仙帝、弘虚仙帝、斐狄仙帝!三大宗主!
意思说,就算有千军万马金银无数,最终也敌不过时间的刻画!最终的结果还是灰飞烟灭!
所以做人要看淡泊些才好
分析:金银财宝的价值是高的,但光阴像箭那样快能使人衰老就像用刀在杀人,日月如穿梭把人催老,太阳这个神佛的三道金光能把人熬老。
三道金光分别是蒿殷仙帝、弘虚仙帝、斐狄仙帝!三大宗主!
#!perl
use strict;
use Cache::Memcached::Fast;
sub getConfig{
return ["xx.xx.xx.201:11211","xx.xx.xx.203:11211","xx.xx.xx.204:11211","xx.xx.xx.205:11211","xx.xx.xx.206:11211","xx.xx.xx.207:11211","xx.xx.xx.208:11211","xx.xx.xx.218:11211","xx.xx.xx.235:11211","xx.xx.xx.236:11211","xx.xx.xx.237:11211","xx.xx.xx.238:11211","xx.xx.xx.239:11211","xx.xx.xx.240:11211"];
}
my $memcached ;
my $expires = 1800;
my $memcached =Cache::Memcached::Fast->new({ servers =>getConfig(), ketama_points => 151});
my @addMutiKeys=();
my @addMutiExipres=();
my @addMutiValues=();
my $addMultiStr="";
my $split="";
for ( my $i = 0 ; $i < 10000 ; $i++ ) {
my $index=$i;
push(@addMutiKeys,"myn_key_".$index);
push(@addMutiValues,"myn_value_".$index);
push(@addMutiExipres,3600);
$addMultiStr=$addMultiStr.$split."[\""."myn_key_".$index."\",\"1\",3600]";
$split=",";
}
#my $hashKeys=$memcached->add_multi(["aaa","111",3600],["bbb","222",3600]);
#my $hashKeys=$memcached->add_multi(map { [$addMutiKeys[$_], "aa"] } @addMutiValues);
#$hashKeys=$memcached->get_multi(@addMutiKeys);
my $hashKeys;
my $evalStr="return \$memcached->add_multi($addMultiStr);";
$hashKeys=eval($evalStr);
my $i=0;
for($i=0;$i<@addMutiKeys;$i++)
{
#print $addMutiKeys[$i]."\n";
}
my $ekey;
foreach $ekey (keys(%$hashKeys))
{
print "key=".$ekey."[".$$hashKeys{$ekey}."]\n";
}
$memcached->disconnect_all();
use strict;
use Cache::Memcached::Fast;
sub getConfig{
return ["xx.xx.xx.201:11211","xx.xx.xx.203:11211","xx.xx.xx.204:11211","xx.xx.xx.205:11211","xx.xx.xx.206:11211","xx.xx.xx.207:11211","xx.xx.xx.208:11211","xx.xx.xx.218:11211","xx.xx.xx.235:11211","xx.xx.xx.236:11211","xx.xx.xx.237:11211","xx.xx.xx.238:11211","xx.xx.xx.239:11211","xx.xx.xx.240:11211"];
}
my $memcached ;
my $expires = 1800;
my $memcached =Cache::Memcached::Fast->new({ servers =>getConfig(), ketama_points => 151});
my @addMutiKeys=();
my @addMutiExipres=();
my @addMutiValues=();
my $addMultiStr="";
my $split="";
for ( my $i = 0 ; $i < 10000 ; $i++ ) {
my $index=$i;
push(@addMutiKeys,"myn_key_".$index);
push(@addMutiValues,"myn_value_".$index);
push(@addMutiExipres,3600);
$addMultiStr=$addMultiStr.$split."[\""."myn_key_".$index."\",\"1\",3600]";
$split=",";
}
#my $hashKeys=$memcached->add_multi(["aaa","111",3600],["bbb","222",3600]);
#my $hashKeys=$memcached->add_multi(map { [$addMutiKeys[$_], "aa"] } @addMutiValues);
#$hashKeys=$memcached->get_multi(@addMutiKeys);
my $hashKeys;
my $evalStr="return \$memcached->add_multi($addMultiStr);";
$hashKeys=eval($evalStr);
my $i=0;
for($i=0;$i<@addMutiKeys;$i++)
{
#print $addMutiKeys[$i]."\n";
}
my $ekey;
foreach $ekey (keys(%$hashKeys))
{
print "key=".$ekey."[".$$hashKeys{$ekey}."]\n";
}
$memcached->disconnect_all();
表结构如下:
mysql> select * from test;
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
| 4 | test4 |
| 5 | test5 |
+----+-------+
执行以下SQL:
mysql> select * from test where id in(3,1,5);
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 3 | test3 |
| 5 | test5 |
+----+-------+
3 rows in set (0.00 sec)
这个select在mysql中得结果会自动按照id升序排列,
但是我想执行"select * from test where id in(3,1,5);"的结果按照in中得条件排序,即:3,1,5,想得到的结果如下:
id name
3 test3
1 test1
5 test5
select id, name from table where 'daodao' IN (list);
IN (list); 如果list是常量,则可以直接用IN,大家怎么看?
mysql> select * from test;
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
| 4 | test4 |
| 5 | test5 |
+----+-------+
执行以下SQL:
mysql> select * from test where id in(3,1,5);
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 3 | test3 |
| 5 | test5 |
+----+-------+
3 rows in set (0.00 sec)
这个select在mysql中得结果会自动按照id升序排列,
但是我想执行"select * from test where id in(3,1,5);"的结果按照in中得条件排序,即:3,1,5,想得到的结果如下:
id name
3 test3
1 test1
5 test5
mysql> select * from Tbl_FQQ_FScoreCount where id in(3,1,5) order by find_in_set(id,'3,1,5');
+----+-----------+-------------+
| ID | FQQ | FScoreCount |
+----+-----------+-------------+
| 3 | 715113297 | 40 |
| 1 | 78540474 | 37 |
| 5 | 1735548 | 0 |
+----+-----------+-------------+
+----+-----------+-------------+
| ID | FQQ | FScoreCount |
+----+-----------+-------------+
| 3 | 715113297 | 40 |
| 1 | 78540474 | 37 |
| 5 | 1735548 | 0 |
+----+-----------+-------------+
select id, name from table where 'daodao' IN (list);
IN (list); 如果list是常量,则可以直接用IN,大家怎么看?
WD(西部数据)64M 绿盘补丁
WD6400AARS
WD10EARS
WD15EARS
WD20EARS
以上型号的WD硬盘都需要打补丁 或者加跳线帽
这里是补丁下载地址
WD6400AARS
WD10EARS
WD15EARS
WD20EARS
以上型号的WD硬盘都需要打补丁 或者加跳线帽
这里是补丁下载地址
http://support.wdc.com/product/downloadsw.asp?sid=123&lang=cn
Linux中select函数学习及实例笔记
http://blog.chinaunix.net/u3/104447/showart_2150356.html
http://hi.baidu.com/wind_stay/blog/item/3f803a35849cd4bdd0a2d38b.html阅读全文
http://blog.chinaunix.net/u3/104447/showart_2150356.html
http://hi.baidu.com/wind_stay/blog/item/3f803a35849cd4bdd0a2d38b.html阅读全文
电视上经常说VCR,.但偶不知道全称是什么,有知道的告诉一声1
VCR是Video Cassette Recorder的缩写 盒式磁带录像机
但是在电视上的总以节目里面 例如某主持人说:让我们先看一段VCR
这里的VCR的意思是指一个视频片断
VCR是Video Cassette Recorder的缩写 盒式磁带录像机
但是在电视上的总以节目里面 例如某主持人说:让我们先看一段VCR
这里的VCR的意思是指一个视频片断
有三个办法,1.mysqlimport 2.load data 3才是source ,最好先去掉所有的索引,待数据完成导入后再一个个添加回
LOAD DATA INFILE句法
基本语法:
load data [low_priority] [local] infile 'file_name txt' [replace | ignore]
into table tbl_name
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'\' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name, )]
load data infile语句从一个文本文件中以很高的速度读入一个表中。使用这个命令之前,mysqld进程(服务)必须已经在运行。为了安全原因,当读取位于服务器上的文本文件时,文件必须处于数据库目录或可被所有人读取。另外,为了对服务器上文件使用load data infile,在服务器主机上你必须有file的权限。
1 如果你指定关键词low_priority,那么MySQL将会等到没有其他人读这个表的时候,才把插入数据。可以使用如下的命令:
load data low_priority infile "/home/mark/data sql" into table Orders;
2 如果指定local关键词,则表明从客户主机读文件。如果local没指定,文件必须位于服务器上。
3 replace和ignore关键词控制对现有的唯一键记录的重复的处理。如果你指定replace,新行将代替有相同的唯一键值的现有行。如果你指定ignore,跳过有唯一键的现有行的重复行的输入。如果你不指定任何一个选项,当找到重复键时,出现一个错误,并且文本文件的余下部分被忽略。例如:
load data low_priority infile "/home/mark/data sql" replace into table Orders;
4 分隔符
(1) fields关键字指定了文件记段的分割格式,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:
terminated by分隔符:意思是以什么字符作为分隔符
enclosed by字段括起字符
escaped by转义字符
terminated by描述字段的分隔符,默认情况下是tab字符(\t)
enclosed by描述的是字段的括起字符。
escaped by描述的转义字符。默认的是反斜杠(backslash:\ )
例如:load data infile "/home/mark/Orders txt" replace into table Orders fields terminated by',' enclosed by '"';
(2)lines 关键字指定了每条记录的分隔符默认为'\n'即为换行符
如果两个字段都指定了那fields必须在lines之前。 如果不指定fields关键字缺省值与如果你这样写的相同: fields terminated by'\t' enclosed by ’ '' ‘ escaped by'\\'
如果你不指定一个lines子句,缺省值与如果你这样写的相同: lines terminated by'\n'
例如:load data infile "/jiaoben/load.txt" replace into table test fields terminated by ',' lines terminated by '/n';
5 load data infile 可以按指定的列把文件导入到数据库中。 当我们要把数据的一部分内容导入的时候,,需要加入一些栏目(列/字段/field)到MySQL数据库中,以适应一些额外的需要。比方说,我们要从Access数据库升级到MySQL数据库的时候
下面的例子显示了如何向指定的栏目(field)中导入数据:
load data infile "/home/Order txt" into table Orders(Order_Number, Order_Date, Customer_ID);
6 当在服务器主机上寻找文件时,服务器使用下列规则:
(1)如果给出一个绝对路径名,服务器使用该路径名。
(2)如果给出一个有一个或多个前置部件的相对路径名,服务器相对服务器的数据目录搜索文件。
(3)如果给出一个没有前置部件的一个文件名,服务器在当前数据库的数据库目录寻找文件。
例如: /myfile txt”给出的文件是从服务器的数据目录读取,而作为“myfile txt”给出的一个文件是从当前数据库的数据库目录下读取。
注意:字段中的空值用\N表示
来源:http://blog.chinaunix.net/u3/100752/showart_1993119.html
补充:
创建一个表
Use Test;
Create Table TableTest(
`ID` mediumint(8) default '0',
`Name` varchar(100) default ''
) TYPE=MyISAM;
向数据表导入数据
Load Data InFile 'C:/Data.txt' Into Table `TableTest`
常用如下:
Load Data InFile 'C:/Data.txt' Into Table `TableTest` Lines Terminated By 'rn';
这个语句,字段默认用制表符隔开,每条记录用换行符隔开,在Windows下换行符为“rn”
C:/Data.txt 文件内容如下面两行:
1 A
2 B
“1”和“A”之间有一个制表符
这样就导进两条记录了。
自定义语法
Load Data InFile 'C:/Data.txt' Into Table `TableTest` Fields Terminated By ',' Enclosed By '"' Escaped By '"' Lines Terminated By 'rn';
Fields Terminated By ',' Enclosed By '"' Escaped By '"'
表示每个字段用逗号分开,内容包含在双引号内
Lines Terminated By 'rn';
表示每条数据用换行符分开
和 Load Data InFile 相反的是把表的数据导出语句
Select * From `TableTest` Into OutFile 'C:/Data_OutFile.txt';
LOAD DATA INFILE句法
基本语法:
load data [low_priority] [local] infile 'file_name txt' [replace | ignore]
into table tbl_name
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'\' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name, )]
load data infile语句从一个文本文件中以很高的速度读入一个表中。使用这个命令之前,mysqld进程(服务)必须已经在运行。为了安全原因,当读取位于服务器上的文本文件时,文件必须处于数据库目录或可被所有人读取。另外,为了对服务器上文件使用load data infile,在服务器主机上你必须有file的权限。
1 如果你指定关键词low_priority,那么MySQL将会等到没有其他人读这个表的时候,才把插入数据。可以使用如下的命令:
load data low_priority infile "/home/mark/data sql" into table Orders;
2 如果指定local关键词,则表明从客户主机读文件。如果local没指定,文件必须位于服务器上。
3 replace和ignore关键词控制对现有的唯一键记录的重复的处理。如果你指定replace,新行将代替有相同的唯一键值的现有行。如果你指定ignore,跳过有唯一键的现有行的重复行的输入。如果你不指定任何一个选项,当找到重复键时,出现一个错误,并且文本文件的余下部分被忽略。例如:
load data low_priority infile "/home/mark/data sql" replace into table Orders;
4 分隔符
(1) fields关键字指定了文件记段的分割格式,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:
terminated by分隔符:意思是以什么字符作为分隔符
enclosed by字段括起字符
escaped by转义字符
terminated by描述字段的分隔符,默认情况下是tab字符(\t)
enclosed by描述的是字段的括起字符。
escaped by描述的转义字符。默认的是反斜杠(backslash:\ )
例如:load data infile "/home/mark/Orders txt" replace into table Orders fields terminated by',' enclosed by '"';
(2)lines 关键字指定了每条记录的分隔符默认为'\n'即为换行符
如果两个字段都指定了那fields必须在lines之前。 如果不指定fields关键字缺省值与如果你这样写的相同: fields terminated by'\t' enclosed by ’ '' ‘ escaped by'\\'
如果你不指定一个lines子句,缺省值与如果你这样写的相同: lines terminated by'\n'
例如:load data infile "/jiaoben/load.txt" replace into table test fields terminated by ',' lines terminated by '/n';
5 load data infile 可以按指定的列把文件导入到数据库中。 当我们要把数据的一部分内容导入的时候,,需要加入一些栏目(列/字段/field)到MySQL数据库中,以适应一些额外的需要。比方说,我们要从Access数据库升级到MySQL数据库的时候
下面的例子显示了如何向指定的栏目(field)中导入数据:
load data infile "/home/Order txt" into table Orders(Order_Number, Order_Date, Customer_ID);
6 当在服务器主机上寻找文件时,服务器使用下列规则:
(1)如果给出一个绝对路径名,服务器使用该路径名。
(2)如果给出一个有一个或多个前置部件的相对路径名,服务器相对服务器的数据目录搜索文件。
(3)如果给出一个没有前置部件的一个文件名,服务器在当前数据库的数据库目录寻找文件。
例如: /myfile txt”给出的文件是从服务器的数据目录读取,而作为“myfile txt”给出的一个文件是从当前数据库的数据库目录下读取。
注意:字段中的空值用\N表示
来源:http://blog.chinaunix.net/u3/100752/showart_1993119.html
补充:
创建一个表
Use Test;
Create Table TableTest(
`ID` mediumint(8) default '0',
`Name` varchar(100) default ''
) TYPE=MyISAM;
向数据表导入数据
Load Data InFile 'C:/Data.txt' Into Table `TableTest`
常用如下:
Load Data InFile 'C:/Data.txt' Into Table `TableTest` Lines Terminated By 'rn';
这个语句,字段默认用制表符隔开,每条记录用换行符隔开,在Windows下换行符为“rn”
C:/Data.txt 文件内容如下面两行:
1 A
2 B
“1”和“A”之间有一个制表符
这样就导进两条记录了。
自定义语法
Load Data InFile 'C:/Data.txt' Into Table `TableTest` Fields Terminated By ',' Enclosed By '"' Escaped By '"' Lines Terminated By 'rn';
Fields Terminated By ',' Enclosed By '"' Escaped By '"'
表示每个字段用逗号分开,内容包含在双引号内
Lines Terminated By 'rn';
表示每条数据用换行符分开
和 Load Data InFile 相反的是把表的数据导出语句
Select * From `TableTest` Into OutFile 'C:/Data_OutFile.txt';
8位为一个字节,共计:64位,共计:8个字节。
int QQ,int Score
4+4个字节*100万= 8000000字节
1024字节=1KB
去掉3个0,8000k,约等于:8M,不大也,呵呵
int QQ,int Score
4+4个字节*100万= 8000000字节
1024字节=1KB
去掉3个0,8000k,约等于:8M,不大也,呵呵
摘自CU论坛里面的一个问题:
[root@mail mysql]# /usr/local/mysql/bin/mysql -uroot -p123 -e "show table status from stat" | awk 'NR>=2{index_size =$9;data_size =$7}END{print "index_size\t"(index_size/1024/1024)"M";print "data_size\t"(data_size/1024/1024)"M"}'
index_size 2717.81M
data_size 3858.27M
mysql -uroot -e "show table status from stat" | awk 'NR>=2{index_size =$9;data_size =$7}END{print "index_size\t"(index_size/1024/1024)"M";print "data_size\t"(data_size/1024/1024)"M"}'
MERGE引擎类型可以把许多结构相同的表合并为一个表。通过对merge表的简单查询,可以轻松实现对多个子表进行查询的目的。
我们的日志系统按照月为单位进行分表,由merge联合所有月份子表,实现跨月(跨表)的日志查询。这样的做法是程序端的逻辑比较简单,无需关注多表的数据整合和处理。
随着子表越来越多、数据越来越大,查询的速度越来越慢。子表的数据量增长并非数量级的,那么从理论上讲通过merge进行查询,速度受到影响的浮动应该是很小的,但现实却非如此。
刚开始并不知道原因,通过profiling检查详细的耗时情况,发现Sending data占用了99%的时间,从官方解释来看,Sending data貌似是发送数据到client端的耗时,检查了一下,仅仅只有几K的数据发送,明显不是此原因。SQL挺简单的,基本的优化也都做了,那么是什么原因?
之后调试代码时无意中针对一个子表进行了一次查询,发现速度几十倍的提高,之前对merge的查询需要20多秒,现在仅仅不到1秒就执行完了,这个感觉是很明显的,于是进一步进行了测试,发现问题的确如此。
所以,建议还是在代码逻辑中对多表数据进行处理,避免使用Merge引擎。
有时间看一下源码中Sending data是如何计算的以及Merge是如何进行多表数据集合的。 希望Mysql能把Merge引擎做的更加稳定、高效,真正发挥Merge引擎的优势。
来源:http://hi.baidu.com/chancey/blog/item/775d8682db4387a90df4d20e.html
我们的日志系统按照月为单位进行分表,由merge联合所有月份子表,实现跨月(跨表)的日志查询。这样的做法是程序端的逻辑比较简单,无需关注多表的数据整合和处理。
随着子表越来越多、数据越来越大,查询的速度越来越慢。子表的数据量增长并非数量级的,那么从理论上讲通过merge进行查询,速度受到影响的浮动应该是很小的,但现实却非如此。
刚开始并不知道原因,通过profiling检查详细的耗时情况,发现Sending data占用了99%的时间,从官方解释来看,Sending data貌似是发送数据到client端的耗时,检查了一下,仅仅只有几K的数据发送,明显不是此原因。SQL挺简单的,基本的优化也都做了,那么是什么原因?
之后调试代码时无意中针对一个子表进行了一次查询,发现速度几十倍的提高,之前对merge的查询需要20多秒,现在仅仅不到1秒就执行完了,这个感觉是很明显的,于是进一步进行了测试,发现问题的确如此。
所以,建议还是在代码逻辑中对多表数据进行处理,避免使用Merge引擎。
有时间看一下源码中Sending data是如何计算的以及Merge是如何进行多表数据集合的。 希望Mysql能把Merge引擎做的更加稳定、高效,真正发挥Merge引擎的优势。
来源:http://hi.baidu.com/chancey/blog/item/775d8682db4387a90df4d20e.html
比序列化反序列化快的var_export 存入DB后反回位数组的方法
Php/Js/Shell/Go jackxiang 2010-8-11 10:52
版权归膘哥,来源:
膘叔(19129540) 10:45:16
var_export后是存成字符串了。
接合swoole实践:
输出:
curl http://127.0.0.1:9501/abc
Swoole\Http\Request::__set_state(array(
'fd' => 1,
'header' =>
array (
'user-agent' => 'curl/7.29.0',
'host' => '127.0.0.1:9501',
'accept' => '*/*',
),
'server' =>
array (
'request_method' => 'GET',
'request_uri' => '/abc',
'path_info' => '/abc',
'request_time' => 1649747144,
'request_time_float' => 1649747144.16464,
'server_protocol' => 'HTTP/1.1',
'server_port' => 9501,
'remote_port' => 62006,
'remote_addr' => '127.0.0.1',
'master_time' => 1649747143,
),
'cookie' => NULL,
'get' => NULL,
'files' => NULL,
'post' => NULL,
'tmpfiles' => NULL,
))
Hello, world!
回忆未来(372647693) 10:58:07
最后,═ 云下遮雨 11:28:47 给出了个解决方案:
eval( '$c='.$b.';');
eval( "\$c={$b};" );
eval( "\$c=".$b.";" );
我尝试了一下,确实还回位原来的数组了,代码如下:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
指出了膘哥的一个小错误:
═ 云下遮雨 11:38:46
eval( "\$c=\$b" ); 这样就是错的,相当于 $c=$b
膘叔(19129540) 10:45:16
$a = array (1, 2, array ("a", "b", "c"));
$b = var_export ($a,TRUE);
eval( "\$c=\$b;" );
echo '<pre>';
print_r( $c );
echo '</pre>';
膘叔(19129540) 10:45:35$b = var_export ($a,TRUE);
eval( "\$c=\$b;" );
echo '<pre>';
print_r( $c );
echo '</pre>';
var_export后是存成字符串了。
接合swoole实践:
输出:
curl http://127.0.0.1:9501/abc
Swoole\Http\Request::__set_state(array(
'fd' => 1,
'header' =>
array (
'user-agent' => 'curl/7.29.0',
'host' => '127.0.0.1:9501',
'accept' => '*/*',
),
'server' =>
array (
'request_method' => 'GET',
'request_uri' => '/abc',
'path_info' => '/abc',
'request_time' => 1649747144,
'request_time_float' => 1649747144.16464,
'server_protocol' => 'HTTP/1.1',
'server_port' => 9501,
'remote_port' => 62006,
'remote_addr' => '127.0.0.1',
'master_time' => 1649747143,
),
'cookie' => NULL,
'get' => NULL,
'files' => NULL,
'post' => NULL,
'tmpfiles' => NULL,
))
Hello, world!
回忆未来(372647693) 10:58:07
<?php
$a = array (1, 2, array ("a", "b", "c"));
$b = var_export ($a,TRUE);
eval( "\$c=\$b;" );
var_dump($c);
$a = array (1, 2, array ("a", "b", "c"));
$b = var_export ($a,TRUE);
eval( "\$c=\$b;" );
var_dump($c);
string(94) "array (
0 => 1,
1 => 2,
2 =>
array (
0 => 'a',
1 => 'b',
2 => 'c',
),
)"
是个string啊。。。0 => 1,
1 => 2,
2 =>
array (
0 => 'a',
1 => 'b',
2 => 'c',
),
)"
最后,═ 云下遮雨 11:28:47 给出了个解决方案:
eval( '$c='.$b.';');
eval( "\$c={$b};" );
eval( "\$c=".$b.";" );
我尝试了一下,确实还回位原来的数组了,代码如下:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<?php
$a = array (1, 2, array ("a", "b", "c"));
$b = var_export ($a,TRUE);
//eval( "\$c=".$b.";" );
eval( "\$c={$b};" );
print_r($c);
//print_r( $c );
?>
$a = array (1, 2, array ("a", "b", "c"));
$b = var_export ($a,TRUE);
//eval( "\$c=".$b.";" );
eval( "\$c={$b};" );
print_r($c);
//print_r( $c );
?>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[~]# php var_export.php
Array
(
[0] => 1
[1] => 2
[2] => Array
(
[0] => a
[1] => b
[2] => c
)
)
Array
(
[0] => 1
[1] => 2
[2] => Array
(
[0] => a
[1] => b
[2] => c
)
)
指出了膘哥的一个小错误:
═ 云下遮雨 11:38:46
eval( "\$c=\$b" ); 这样就是错的,相当于 $c=$b
将数组型数据格式化存储常用serialize(),var_export(),json_encode()这三种
至于这三种的效率,
参考了http://www.phpdevblog.net/2009/11/serialize-vs-var-export-vs-json-encode.html
他的测试分了不同数据量,但是整体看来json_encode>var_export>serialize
先记下,回头自己测试验证一下!
最近看到igbinary库(http://opensource.dynamoid.com/)效率比PHP原生的强
支持两个函数igbinary_serialize andigbinary_unserialize
在php.ini中配置:
# Load igbinary extension
extension=igbinary.so
# Use igbinary as session serializer
session.serialize_handler=igbinary
来源:http://hi.baidu.com/lnnujxxy/blog/item/e5025fde4b4a6b52ccbf1abb.html
至于这三种的效率,
参考了http://www.phpdevblog.net/2009/11/serialize-vs-var-export-vs-json-encode.html
他的测试分了不同数据量,但是整体看来json_encode>var_export>serialize
先记下,回头自己测试验证一下!
最近看到igbinary库(http://opensource.dynamoid.com/)效率比PHP原生的强
支持两个函数igbinary_serialize andigbinary_unserialize
在php.ini中配置:
# Load igbinary extension
extension=igbinary.so
# Use igbinary as session serializer
session.serialize_handler=igbinary
来源:http://hi.baidu.com/lnnujxxy/blog/item/e5025fde4b4a6b52ccbf1abb.html
一般我们把数组缓存到文件中的话,都是先要转成字符串的形式,然后再存入文本文件中,一般有两种机制把数组转成字符串,
第一种是
$str = var_export($arr, true);
第二种是
$str = serialize($arr);
这两种机制转换之后的字符串是不一样的,第一种是数组的原型模式,第二种是序列化后的形式。第一种存入文件中的只要加上<?php ?>标签,就形式了一个可用的数组原型,对调用来说,不用转换,直接返回这个数组就可以,但第二种,则需要再用一次unserialize函数反序列化一下。对于第种一说,就多了一步操作。下来我们用数据说话吧:
<?
set_time_limit(50);
$a = array(1,2,3);
$b = array('a'=>1, 'b'=>2, 'c'=>3);
$c = array('a'=>array(1,2,3), 'b'=>array(4,5,6));
$time1 = microtime(true);
$times = 1000000; #10w
for($i=1; $i<=$times; $i++){
$A = var_export($a, true);
}
$time2 = microtime(true);
for($i=1; $i<=$times; $i++){
$B = var_export($b, true);
}
$time3 = microtime(true);
for($i=1; $i<=$times; $i++){
$C = var_export($c, true);
}
$time4 = microtime(true);
for($i=1; $i<=$times; $i++){
$X = serialize($a);
}
$time5 = microtime(true);
for($i=1; $i<=$times; $i++){
$Y = serialize($b);
}
$time6 = microtime(true);
for($i=1; $i<=$times; $i++){
$Z = serialize($c);
}
$time7 = microtime(true);
for($i=1; $i<=$times; $i++){
$O = unserialize($X);
}
$time8 = microtime(true);
for($i=1; $i<=$times; $i++){
$P = unserialize($Y);
}
$time9 = microtime(true);
for($i=1; $i<=$times; $i++){
$Q = unserialize($Z);
}
$time10 = microtime(true);
$var_export_time['a'] = $time2 - $time1;
$var_export_time['b'] = $time3 - $time2;
$var_export_time['c'] = $time4 - $time3;
$serialize_time['a'] = $time5 - $time4;
$serialize_time['b'] = $time6 - $time5;
$serialize_time['c'] = $time7 - $time6;
$unserialize_time['a'] = $time8 - $time7;
$unserialize_time['b'] = $time9 - $time8;
$unserialize_time['c'] = $time10 - $time9;
print_r($var_export_time);
print_r($serialize_time);
print_r($unserialize_time);
?>
output:
Array
(
[a] => 3.3401498794556
[b] => 5.1394801139832
[c] => 8.8483898639679
)
Array
(
[a] => 1.6063709259033
[b] => 1.7033960819244
[c] => 3.4534389972687
)
Array
(
[a] => 1.6037359237671
[b] => 1.817803144455
[c] => 3.7992968559265
)
由上面数据说明:
var_export函数性能比serialize函数性能差一倍,而unserialize时间也需要和serialize差不多的时间,serialize加上unserialize时间,和用var_export时间差不多。
所以在应用的时候,如果只用于读取数据的时候,最好存成数组原型,如果只考虑写入缓存,用serialize是不错的选择,还有就是serialize还可以处理Object类型。所以应用上能广泛一些。
但如果论生成后的缓存文件大小,那还是用var_export去除数组中的换行和空白,比用serialize要小大概10%左右,这个测试我就不放上来了,有兴趣的自己可以尝试一下。原因是因为serialize函数中加入了一些冗余字符串。
来源:http://blog.zol.com.cn/1207/article_1206962.html
第一种是
$str = var_export($arr, true);
第二种是
$str = serialize($arr);
这两种机制转换之后的字符串是不一样的,第一种是数组的原型模式,第二种是序列化后的形式。第一种存入文件中的只要加上<?php ?>标签,就形式了一个可用的数组原型,对调用来说,不用转换,直接返回这个数组就可以,但第二种,则需要再用一次unserialize函数反序列化一下。对于第种一说,就多了一步操作。下来我们用数据说话吧:
<?
set_time_limit(50);
$a = array(1,2,3);
$b = array('a'=>1, 'b'=>2, 'c'=>3);
$c = array('a'=>array(1,2,3), 'b'=>array(4,5,6));
$time1 = microtime(true);
$times = 1000000; #10w
for($i=1; $i<=$times; $i++){
$A = var_export($a, true);
}
$time2 = microtime(true);
for($i=1; $i<=$times; $i++){
$B = var_export($b, true);
}
$time3 = microtime(true);
for($i=1; $i<=$times; $i++){
$C = var_export($c, true);
}
$time4 = microtime(true);
for($i=1; $i<=$times; $i++){
$X = serialize($a);
}
$time5 = microtime(true);
for($i=1; $i<=$times; $i++){
$Y = serialize($b);
}
$time6 = microtime(true);
for($i=1; $i<=$times; $i++){
$Z = serialize($c);
}
$time7 = microtime(true);
for($i=1; $i<=$times; $i++){
$O = unserialize($X);
}
$time8 = microtime(true);
for($i=1; $i<=$times; $i++){
$P = unserialize($Y);
}
$time9 = microtime(true);
for($i=1; $i<=$times; $i++){
$Q = unserialize($Z);
}
$time10 = microtime(true);
$var_export_time['a'] = $time2 - $time1;
$var_export_time['b'] = $time3 - $time2;
$var_export_time['c'] = $time4 - $time3;
$serialize_time['a'] = $time5 - $time4;
$serialize_time['b'] = $time6 - $time5;
$serialize_time['c'] = $time7 - $time6;
$unserialize_time['a'] = $time8 - $time7;
$unserialize_time['b'] = $time9 - $time8;
$unserialize_time['c'] = $time10 - $time9;
print_r($var_export_time);
print_r($serialize_time);
print_r($unserialize_time);
?>
output:
Array
(
[a] => 3.3401498794556
[b] => 5.1394801139832
[c] => 8.8483898639679
)
Array
(
[a] => 1.6063709259033
[b] => 1.7033960819244
[c] => 3.4534389972687
)
Array
(
[a] => 1.6037359237671
[b] => 1.817803144455
[c] => 3.7992968559265
)
由上面数据说明:
var_export函数性能比serialize函数性能差一倍,而unserialize时间也需要和serialize差不多的时间,serialize加上unserialize时间,和用var_export时间差不多。
所以在应用的时候,如果只用于读取数据的时候,最好存成数组原型,如果只考虑写入缓存,用serialize是不错的选择,还有就是serialize还可以处理Object类型。所以应用上能广泛一些。
但如果论生成后的缓存文件大小,那还是用var_export去除数组中的换行和空白,比用serialize要小大概10%左右,这个测试我就不放上来了,有兴趣的自己可以尝试一下。原因是因为serialize函数中加入了一些冗余字符串。
来源:http://blog.zol.com.cn/1207/article_1206962.html
在PHP中,很多时候我们需要对字符串进行截取,使其长度符合要求,但一般的截取算法只解决字符个数的截取,使得截取后的中文长于英文,影响美观。本文修改Smarty的truncate方法,使其完美截
网上有很多资料,但只能解决中文乱码,或字符编码的问题,这个是切底解决长度的问题。解决办法是修改smarty库目录下的plugins/modifier.truncate.php文件,把代码替换成以下的代码,即可为你解决中文、英文、中英混合字符长度截取的问题阅读全文
网上有很多资料,但只能解决中文乱码,或字符编码的问题,这个是切底解决长度的问题。解决办法是修改smarty库目录下的plugins/modifier.truncate.php文件,把代码替换成以下的代码,即可为你解决中文、英文、中英混合字符长度截取的问题阅读全文
用Adobe Dreamweaver CS3 打开文件 inc/mod_basic.php
$blogitem['copyright']=array('type'=>'html', 'code'=>"Powered by <a href=\"http://www.bo-blog.com\" target=\"_blank\">Bo-Blog {$blogversion}</a>");
修改为以下
$blogitem['copyright']=array('type'=>'html', 'code'=>"");
即可去掉底部版权了
用windows自带的记事本修改出了问题别怪我
$blogitem['copyright']=array('type'=>'html', 'code'=>"Powered by <a href=\"http://www.bo-blog.com\" target=\"_blank\">Bo-Blog {$blogversion}</a>");
修改为以下
$blogitem['copyright']=array('type'=>'html', 'code'=>"");
即可去掉底部版权了
用windows自带的记事本修改出了问题别怪我
对于生成图文报表。
1、以PHP加GD来实现,很方便,服务器运算会有所负担;
2、以flash来实现,客户端只需要读取数据即可在客户端实现图表显示运算。比如GOOGLE分析;
3、以JavaScript等客户端脚本来也可以实现。
因为谷歌分析不可能提取论坛的内部数据,所有有些东西不能用那些漂亮的FLASH做出来。限于技术水平,用PHP制作可以说是比较方便的。
至于负担问题,我采用将生成的图片存在某目录下,调用的时候仅仅调用生成的图片,然后利用计划任务来定期执行该图片生成的程序,以达到更新的目的
也就是用cache技术。当图片不存在或数据有变动时生成图片,当没有变动时调用已生成的图片。
其实flash并不需要自己去制作,有很多现成的flash控件。
比如amcharts free (http://www.amcharts.com/),PHP/SWF Charts (http://www.maani.us/charts) 等。
好像是XML->FLASH,那么只需要简单的按XML格式输出数据就成了,也很方便
1、以PHP加GD来实现,很方便,服务器运算会有所负担;
2、以flash来实现,客户端只需要读取数据即可在客户端实现图表显示运算。比如GOOGLE分析;
3、以JavaScript等客户端脚本来也可以实现。
因为谷歌分析不可能提取论坛的内部数据,所有有些东西不能用那些漂亮的FLASH做出来。限于技术水平,用PHP制作可以说是比较方便的。
至于负担问题,我采用将生成的图片存在某目录下,调用的时候仅仅调用生成的图片,然后利用计划任务来定期执行该图片生成的程序,以达到更新的目的
也就是用cache技术。当图片不存在或数据有变动时生成图片,当没有变动时调用已生成的图片。
其实flash并不需要自己去制作,有很多现成的flash控件。
比如amcharts free (http://www.amcharts.com/),PHP/SWF Charts (http://www.maani.us/charts) 等。
好像是XML->FLASH,那么只需要简单的按XML格式输出数据就成了,也很方便