14-6-2

7

、序列化

你有没有遇到过需要在数据库或文本文件存储一个复杂变量的情况?你可能没

能想出一个格式化字符串并转换成数组或对象的好方法,

PHP

已经为你准备好此

功能。有两种序列化变量的流行方法。下面是一个例子,使用

serialize()

unserialize()

函数:

// a complex array

$myvar = array(

‘hello‘,

42,

array(1,‘two‘),

‘apple‘

);

// convert to a string

$string = serialize($myvar);

echo $string;

/* prints

a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5

:"apple";}

*/

// you can reproduce the original variable

$newvar = unserialize($string);

print_r($newvar);

/* prints

Array

(

[0] => hello

[1] => 42

[2] => Array

(

[0] => 1

[1] => two

)

[3] => apple

)

*/

这是原生的

PHP

序列化方法。

然而,

由于

JSON

近年来大受欢迎,

PHP5.2

中已

经加入了对

JSON

格式的支持。现在你可以使用

json_encode()

json_decode()

函数:

// a complex array

$myvar = array(

‘hello‘,

42,

array(1,‘two‘),

‘apple‘

);

// convert to a string

$string = json_encode($myvar);

echo $string;

/* prints

["hello",42,[1,"two"],"apple"]

*/

// you can reproduce the original variable

$newvar = json_decode($string);

print_r($newvar);

/* prints

Array

(

[0] => hello

[1] => 42

[2] => Array

(

[0] => 1

[1] => two

)

[3] => apple

)

*/

这将更为行之有效,

尤其与

JavaScript

等许多其他语言兼容。

然而对于复杂的

对象,某些信息可能会丢失。

8

、压缩字符串

在谈到压缩时,

我们通常想到文件压缩,

ZIP

压缩等。

PHP

中字符串压缩

也是可能的,

但不涉及任何压缩文件。

在下面的例子中,

我们要利用

gzcompress()

gzuncompress()

函数:

$string =

"Lorem ipsum dolor sit amet, consectetur

adipiscing elit. Nunc ut elit id mi ultricies

adipiscing. Nulla facilisi. Praesent pulvinar,

sapien vel feugiat vestibulum, nulla dui pretium orci,

non ultricies elit lacus quis ante. Lorem ipsum dolor

sit amet, consectetur adipiscing elit. Aliquam

pretium ullamcorper urna quis iaculis. Etiam ac massa

sed turpis tempor luctus. Curabitur sed nibh eu elit

mollis congue. Praesent ipsum diam, consectetur vitae

ornare a, aliquam a nunc. In id magna pellentesque

tellus posuere adipiscing. Sed non mi metus, at lacinia

augue. Sed magna nisi, ornare in mollis in, mollis

sed nunc. Etiam at justo in leo congue mollis.

Nullam in neque eget metus hendrerit scelerisque

eu non enim. Ut malesuada lacus eu nulla bibendum

id euismod urna sodales. ";

$compressed = gzcompress($string);

echo "Original size: ". strlen($string)."\n";

/* prints

Original size: 800

*/

echo "Compressed size: ". strlen($compressed)."\n";

/* prints

Compressed size: 418

*/

// getting it back

$original = gzuncompress($compressed);

这种操作的压缩率能达到

50%

左右。另外的函数

gzencode()

gzdecode()

能达到类似结果,通过使用不同的压缩算法。

9

、注册停止功能

有一个函数叫做

register_shutdown_function()

,可以让你在某段脚本完成运

行之前,

执行一些指定代码。

假设你需要在脚本执行结束前捕获一些基准统计信

息,例如运行的时间长度:

// capture the start time

$start_time = microtime(true);

// do some stuff

// ...

// display how long the script took

echo "execution took: ".

(microtime(true) - $start_time).

" seconds.";

这似乎微不足道,

你只需要在脚本运行的最后添加相关代码。

但是如果你调用过

exit()

函数,该代码将无法运行。此外,如果有一个致命的错误,或者脚本被

用户意外终止,

它可能无法再次运行。

当你使用

register_shutdown_function()

函数,代码将继续执行,不论脚本是否停止运行:

$start_time = microtime(true);

register_shutdown_function(‘my_shutdown‘);

// do some stuff

// ...

function my_shutdown() {

global $start_time;

echo "execution took: ".

(microtime(true) - $start_time).

" seconds.";

}

14-6-2,布布扣,bubuko.com

时间: 2024-08-06 14:58:37

14-6-2的相关文章

CentOS安装glibc-2.14

到http://ftp.gnu.org/gnu/glibc/下载glibc-2.14.tar.xz tar glibc-2.14.tar.gz cd glibc-2.14 mkdir build cd build ../configure --prefix=/usr/local/glibc-2.14 make -j4 su xxxx make install 看看现在libc.so.6在哪个位置,然后修改软链接 ln -s /usr/local/glibc-2.14/lib/libc-2.14.

14:Challenge 7(map大法好)

总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求数列中某个值出现了多少次 输入 第一行两个正整数N和M.第二行N的整数表示这个数列.接下来M行,每行开头是一个字符,若该字符为'M',则表示一个修改操作,接下来两个整数x和y,表示把x位置的值修改为y:若该字符为'Q',则表示一个询问操作,接下来一次整数x,表示求x这个值出现了多少次. 输出 对每一

14. 流、文件和IO

前言 InputStream/OutStream流用来处理设备之间的数据传输 Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. 流按操作数据分为两种:字节流与字符流 按流向分为:输入流(InputStream)和输出流(OutputStream) Java 为 I/O 提供了强大的而

【Spark深入学习 -14】Spark应用经验与程序调优

----本节内容------- 1.遗留问题解答 2.Spark调优初体验 2.1 利用WebUI分析程序瓶颈 2.2 设置合适的资源 2.3 调整任务的并发度 2.4 修改存储格式 3.Spark调优经验 3.1 Spark原理及调优工具 3.2 运行环境优化 3.2.1 防止不必要的分发 3.2.2 提高数据本地性 3.2.3 存储格式选择 3.2.4 选择高配机器 3.3 优化操作符 3.3.1 过滤操作导致多小任务 3.3.2 降低单条记录开销 3.3.3 处理数据倾斜或者任务倾斜 3.

fail2ban-0.8.14 shell自动部署脚本

#!/bin/bash #fail2ban-0.8.14.tar.gz #python > 2.4V #user:root tar  -zxf fail2ban-0.8.14.tar.gz cd /root/fail2ban-0.8.14/ python setup.py install  cp /root/fail2ban-0.8.14/files/redhat-initd /etc/init.d/fail2ban chkconfig --add fail2ban sleep 1 rm -rf

Linux内核编译 Ubuntu 14.04.3 server 升级至3.19.8

读书笔记:<Linux内核设计与实现>,原书第3版,陈莉君 康华 译 第2章:从内核出发     2.3节:编译内核 实验: ============================================================ 系统环境:VM虚拟机 Ubuntu 14.04.3 LTS server版 任务:编译安装新的内核 注意:不要跨大版本,我在3.19版本内 耗时:2小时 所有版本的内核: https://www.kernel.org/pub/linux/kernel

[JS]笔记14之事件委托

-->什么是事件委托-->事件委托原理-->事件委托优点-->事件源 / 目标源 一.什么是事件委托 通俗的讲,onclick,onmouseover,onmouseout等这些就是事件 委托,就是这个事件本来应该加在某些元素上的,而你却加到其他元素上来完成这个事件. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &

用python实现计算1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))类似的公式计算

作业需求: 开发一个简单的python计算器 1.实现加减乘除及拓号优先级解析 2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致 上图是实现的逻辑思路图,下面是对上图的分析: 整体的思想就是先匹配最

4.26日第14次作业,23章项目整体绩效评估,24-32章信息安全相关知识

一.23章:项目整体绩效评估 1.三E审计是什么的合称?(记)P524 答:三E审计是经济审计.效率审计和效果审计的合称,因为三者的第一个英文字母均为E,顾称为三E审计. 2.霍尔三维结构是从哪三个方面考察系统工程的工作过程的?P527-528 答:霍尔三维结构是霍尔(A Hall)提出的关于系统方法论的结构,它从逻辑.时间.知识三方面考察系统工程的工作过程. 3.投资回收期的公式?(记,并理解)P533答:投资回收期的公式:(累计净现金流量出现正值的年份-1) + (上年累计净现金流量值的绝对

Linux -&gt;&gt; UBuntu 14.04 LTE下安装Hadoop 1.2.1(集群分布式模式)

安装步骤: 1) JDK -- Hadoop是用Java写的,不安装Java虚拟机怎么运行Hadoop的程序: 2)创建专门用于运行和执行hadoop任务(比如map和reduce任务)的linux用户,就像windows下的服务账户,并且授权给他可以访问运行JDK目录权限,让他可以执行java虚拟机.这个账户最后用来运行bin\.start_all.sh启动hadoop的所有服务,那运行账户肯定是他了,他肯定要有足够的权限.再者,需要配置这个账户的个人环境变量,把Java虚拟机的主目录地址环境