PHP数组Array与XML相互转换(支持多维嵌套)

//XML转数组,第一种
$arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
//XML转数组,第二种
$arr = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);

//数组转XML
$xml = simplexml_load_string('<root />');
create($arr, $xml);
$xml = $xml->saveXML();
function create($arr, $xml) {
    foreach($arr as $k=>$v) {
        if(is_array($v)) {
	    if(array_keys($v) !== range(0, count($v)-1)) {  //关联数组
		$x = $xml->addChild($k);
		create($v, $x);
	    } else {  //索引数组
		$x = $xml->addChild($k);
		foreach ($v as $vv) {
		    $y = $x->addChild($vv['nodename']);  //要有节点名称
		    unset($vv['nodename']);
		    create($vv, $y);
	        }
	    }
        } else {
            $xml->addChild($k, $v);
        }
    }
}

设置putty支持中文输入和显示

第一步:设置 Fixedsys 字体

现象:win7 的记事本、putty 等程序,找不到 Fixedsys 字体,原因不是 win7 没有这个字体,而是这个字体被隐藏了。

解决:打开控制面板->所有控制面板项->字体 ,左边点击“字体设置”,把“根据语言设置隐藏字体”的选项去掉。

第二步:putty设置

第三步:服务器设置

登录你的服务器后输入:

export LC_ALL='zh_CN.utf8'

现在已经完美支持中文了,可以打开 vi 输入中文测试一下, 效果图:

Linux crontab命令

Linux crontab是用来定期执行程序的命令,当安装完成操作系统之后,默认便会启动此任务调度命令,crontab命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

而Linux任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存;
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信件,这些工作可由每个用户自行设置。

语法
crontab [ -u user ] file

crontab [ -u user ] { -l | -r | -e }

命令说明:
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表;
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是root)才能够指定他人的时程表,如果不使用 -u user 的话,就表示设定自己的时程表。

参数说明:
-e : 执行文字编辑器来设定时程表,内定的文字编辑器是vi,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变量来指定使用那个文字编辑器(比如 setenv VISUAL joe);
-r : 删除目前的时程表;
-l : 列出目前的时程表。

时程表的格式如下:
f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天,program 表示要执行的程序;
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行 program,以此类推;
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 小时到第 b 小时都要执行,以此类推;
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,以此类推;
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,以此类推。

使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定时程表。

实例:

#每月每天每小时的第 0 分钟执行一次 /bin/ls
 0 * * * * /bin/ls

#在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
 0 6-12/3 * 12 * /usr/bin/backup

#周一到周五每天下午 5:00 寄一封信给 ken@01h.net
 0 17 * * 1-5 mail -s "hi" ken@01h.net < /tmp/maildata

#每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo "heihei"
 20 0-23/2 * * * echo "heihei"

再看看几个具体的例子:

0 */2 * * * /sbin/service httpd restart  #意思是每两个小时重启一次apache
50 7 * * * /sbin/service sshd start  #意思是每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop  #意思是每天22:50关闭ssh服务
0 0 1,15 * * fsck /home  #每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup  #每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;  #每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件
30 6 */10 * * ls  #意思是每月的1、11、21、31日是的6:30执行一次ls命令

注意:当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可

MySQL将utf8字符集升级到utf8mb4以兼容生僻字

先确认当前MySQL版本,MySQL在5.5.3之后才增加了utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode,好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。

select version();

修改MySQL数据库配置文件:

[client]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'

[mysql]
default-character-set = utf8mb4

重启MySQL后查看修改结果:

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

使用示例:

--修改数据库字符集
ALTER DATABASE `test` CHARACTER SET = utf8mb4;

--修改表字符集
ALTER TABLE `test` convert to CHARACTER SET utf8mb4;

--修改字段字符集
ALTER TABLE `test` CHANGE COLUMN `name` `name` varchar(12) CHARACTER SET utf8mb4;

Apache设置允许跨域

1、首先找到 Apache 配置文件 httpd.conf ,开启 Apache 头信息自定义模块:

LoadModule headers_module modules/mod_headers.so

把以上这一行的#注释符去掉(也有可能已经默认去掉了)

2、找到对应的虚拟主机配置文件,也就是需要被跨域的网站所对应的主机配置文件,具体内容示例如下:

<VirtualHost *:80>
DocumentRoot /www/web/ken_01h_net/public_html
ServerName ken.01h.net
</VirtualHost>
<Directory /www/web/ken_01h_net>
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

添加一行: Header set Access-Control-Allow-Origin *

<VirtualHost *:80>
DocumentRoot /www/web/ken_01h_net/public_html
ServerName ken.01h.net
</VirtualHost>
<Directory /www/web/ken_01h_net>
    Options FollowSymLinks
    AllowOverride All
    Require all granted
    Header set Access-Control-Allow-Origin * #对所有域名开放
    #Header set Access-Control-Allow-Origin http://www.01h.net #对指定域名开放
</Directory>