php在中url处理方面很有用的几个函数

http_build_query

(PHP 5) http_build_query — 生成 URL-encode 之后的请求字符串

<?php
$data = array('foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor');
echo http_build_query($data); // foo=bar&baz=boom&cow=milk&php=hypertext+processor
?>

compact

array compact ( mixed $varname [, mixed $... ] )

(PHP 4, PHP 5)  compact — 建立一个数组,包括变量名和它们的值

<?php
$city  = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$result = compact("city", "state", "event");
// array('city'=>'"San Francisco"','state'=>'CA','event' => "SIGGRAPH")
?>

-------------

$qs=compact('province','city','name');
foreach($qs as $key => $value){
    if(!$value){
        unset($qs[$key]);
    }
}
$url='something/search/?'.http_build_query($qs) ;

tar 打包备份目录时分卷打包压缩(增量备份,并自动分割成多个文件)

tar 增量备份打包目录,并分卷打包压缩(自动分割成多个文件)

tar -g /home/my_name/backup/incremenntal_list/my_website.incremenntal_list \
  -C /var/www/html/ \
  --exclude data/cache \
  --exclude data/tmp \
  -cpjvf - /var/www/html/ |split -b 2g

-g xxx  是增量日志文件,再次执行上面命令备份目录时,没有改变的文件将不备份,这样节省备份占用硬盘;需要还原时,同样要带上该参数,后边跟上该文件路径,而且要按备份的次序一个一个解包

--exclude xxx 是排除的目录,被tar忽略而不备份

split -b 2g 分割为2G的文件,分割文件名字将是 xaa, xab, xac ...

备份文件还原时,使用以下命令:

cat xaa xab xac >tar -xj

注意,1)省略了上述-g 参数,如果备份时用了这里就要带上。

2)假设只有三个分卷文件,如果不止三个,那就依次写出即可。事实上 cat  `ls x*` >tar -xj 也可以,但如果`ls x*`出来的次序是乱的,那就要解包失败。

使用cygwin在windows下自动备份目录数据/注册cygwin为windows服务

windows下备份目录是个蛋疼的事情,而linux的备份功能实在彪悍的让人感激涕零,然而对于出卖灵魂维护windows服务器的人士,在鄙视windows之余,还是得解决这个问题。突然想到cygwin这个强大的工具,是否可以在windows下使用它crond/crontab呢?查了一下,还真的有。

,先记来来,有时间研究一下

http://blog.csdn.net/cg_cheng/article/details/4377307  在cygwin下配置crontab

http://www.cnblogs.com/alaska1131/articles/1655643.html   windows下启动cygwin的cron/crontab

linux下使用tar差异化备份目录

tar命令的参数 -g, 后面跟一个文件路径,就可在该文件里记录下差异化日志记录,每次备份时带上该参数及文件路径,即是差异备份。还原时,也应该带上这个参数,否则,每次差异备份时删除的文件将不会自动删除。

tar命令的参数 --exclude=,后面跟一个文件路径(支持通配符),指备份时忽略指定的文件(包括目录),如有多个忽略文件,那就加多次该参数,每次指定一个忽略目录。

tar命令的-p参数,指打包时保留文件权限

需要还原文件时,就按备份的次序依次执行-x解包时,记得要带上-g参数,别忘了后面的差异化日志记录文件,这样每次备份时删除的文件也会自动在还原的目标目录里删除;当然你想保留所有文件时另说。

 

Microsoft SQL server数据库转换为MySQL方法

有时需要把MS SQL数据库转换成MySQL,但苦于没有好用的工具,个人使用一个手工转换的方法,相对来说还是比较方便的,对于只导一两个表的时候。

思想:
通过mssql构造出MySQL的insert into 语句,保存到一个文本文件里,然后导入MySQL数据库。

方法扼要如下:

  1. 根据ms sql表结构同步创建出mysql表,可以使用mssql客户端工具生成mssql的建表语句,里面一般来说会带上COLLATE Chinese_PRC_CI_AS 及 CONSTRAINT [DF_xxx_xxx] 这样的部分,对mysql是没有用的,使用ue的查找替换功能将其删掉,替换“CONSTRAINT [DF_xxx_xxx] ”要使用正则表达式匹配 CONSTRAINT.*?\]
  2. 将简化后的create table ... 语句改写成适合MySQL的建表语句,主要是字段类型的相应修改(mysql里没有nvarchar等以n打头的类型)、方括号替换成反引号、删掉mssql标识列定义等。
  3. MySQL里执行create table建表。
  4. 回到mssql里,对每个文本型字段执行一次字符串替换,将单引号替换成mysql风格的转义符( \ '),语句大致如下:
    update you_table_name set [field_name_1]=replace([field_name_1],'''','\''')
    里面mssql的单引号转义是两个单引号,所以看起来相当别扭,顺便逼视一下MS的脑残转义约定。
  5. 将mssql表里的非字符型字段改成字符型,当然不改也行,只是下面一步会很痛苦。
  6. 按下来我们要构造一系列用于把mssql记录插入MySQL表的insert 语句,
  7. 我们要在mssql里拼接字符串的形式构造该查询语句 select top 100 'inset into `you_table_name`(`field_name_1`,`field_name_2`,...)values('''+[field_name_1]+''','''+convert(varchar(10),isnull([field_name_2],0))+''',...);' from you_mssql_table
    从这个语句里可以看出,如果是字符型字段,像field_name_1,直接使用mssql拼接符(+)连起来就可以了,但如果是数字型或日期型字段,像`field_name_2`,就要convert做转换了,日期型还要加上第三个参数,如convert(varchar(10),time,120)这样写。
    我们可以先对前100条构造出适合MySQL的insert语句,随机复制几条到MySQL里测试是否可以正常插入。
  8. 确认无误后,从mssql里导出数据的方式,将上面的查询导出成access数据库文件,再从access中导出文本文件(也可以直接从mssql里导出文本),通常mssql导出的文本文件是ansi编码的,我们可以使用editplus之类工具打开并另存为utf-8编码。不推荐使用ue转换,经验教训表明ue转换编码容易出错。
  9. 进入mysql命令行客户端里,注意加上--default-character-set=utf8参数,否则很可能导入一团乱码
    >mysql -uroot -p --default-character-set=utf8
  10. 进入相应数据库use you_database
  11. 执行source X:\path\to\your\sql\file.sql
    应该很快可以完成,导入时可以注意一下是否有错误提示。通常不会有的。
  12. 至此转换完成。

linux/centos上安装配置gitosis(git服务器端)

gitosis长期没有更新了,换gitolite吧,或gitlab也行

[个人按本文方法是可以安装gitosis的,但在客户端git clone总是失败,也无法成功创建repo,所以个人改用gitolite,感觉比gitosis简单一些,而且一安装就可以正常工作]

安装gitosis,因为centos/redhat官方源不带gitosis,所以需要先添加EPEL软件仓库,或者手工下载gitosis的 rpm包及依赖包并手工安装。

gitosis rpm包安装后,会自动创建一个gitosis用户,为了简化其见,手工对其改名,改成git,涉及以下四个文件/etc/passwd, /etc/shadow, /etc/group, /etc/gshadow . 默认情况下,git用户(即改名前的gitosis用户)的home目录为 /var/lib/gitosis

这是git用户是作为git的管理账号之用。因为此时git用户没有设置登录密码,我们也不需要其密码,而是使用ssh密钥登录。但对gitosis的设置还是使用git用户登录比较方便。可以切换到root用户,然后 su git .

为git用户设置ssh密钥登录。上传一个ssh公钥,建议使用你的常用账号下的ssh公钥。并将其加入git用户的authorized_keys

sh-4.1$ cd ~/.ssh/
sh-4.1$ cat id_rsa.pub >>authorized_keys

确认可以使用公钥通过ssh登录。关于使用公钥自动登录ssh主机,更多可以参看这里 ssh无密码登入设置(完全版)/linux下免输入密码ssh登录

下面初始化gitosis . 要使用git用户执行下面命令

gitosis-init < [path of your id_rsa.pub]

结果大致如下

sh-4.1$ gitosis-init < id_rsa.pub
Initialized empty Git repository in /var/lib/gitosis/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /var/lib/gitosis/repositories/gitosis-admin.git/
sh-4.1$ ls
gitosis  repositories

可以看到被创建的两个目录,gitosis与repositories .

运行 git clone git@localhost:repositories/gitosis-admin.git 即可把git管理配置文件的目同步到本地。需要修改配置,就在本地修改,然后git commit;git push同步到服务器上即可以即时生效了

关于gitosis资料,参考 http://linux-wiki.cn/wiki/zh-hans/%E9%85%8D%E7%BD%AEgitosis%EF%BC%88%E4%BB%A5CentOS%E4%B8%BA%E4%BE%8B%EF%BC%89

http://git-scm.com/book/zh/服务器上的-Git-Gitosis

http://git-scm.com/book/zh/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E9%83%A8%E7%BD%B2-Git

ftp目录文件名乱码/使用原始ftp命令解决

对乱码的客户端,直接向服务器端发送原始的FTP命令:

opts utf8 off

对于flashFXT,可以按

菜单 - 命令 - 原始命令

输入

opts utf8 off

回车(或点确定)

再刷新服务端的目录列表,即正常显示

如果不行,可以试试发送ftp原始命令 opts utf8 on

原因解析:

按RFC 2610规定的方式,默认使用UTF-8。而某些服务器和客户端并不用此标准。即,server和client对话时,FTP服务器直接使用UTF-8发送数据,除非对方大喊一声opts  utf8 off ;而一些ftp产品则数默认使用本地编码对话,除非对方说一声opts  utf8 on 。所以,当服务器端与客户端不统一时,就出现了一个讲UTF8,一个用本地编码,就出现了乱码。

通过网络ntp自动同步linux主机的日期时间

如果只需要同步一次,那么执行如下命令即可

rdate -s time.nist.gov

其中time.nist.gov 是一个时间服务器,当然你也可以使用另外的时间服务器。

如果是多台服务器的时间需要保持完全同步,那么最好还是给这些服务器配置统一的自动同步任务,以免因为各种原因,造成它们的时间有所偏差。方法如下

使用 crontab 让linux自动同步时间
vi /etc/crontab
加上一句:

00 0 1 * * root rdate -s time.nist.gov

time.nist.gov 是一个时间服务器.

apache下载docx,pptx文件被浏览器当作zip文件保存:修改apache MIME类型配置mime.types

apache web服务器的站点,下载pptx,docx,xlsx文件,却被浏览器当作zip文件保存。

这不是浏览器的问题,而是apache不认docx,pptx,,xlsx等Microsoft Office 2007+的文件格式,而这些文件本身是zip压缩文件,所以被apache当作zip压缩文件发给浏览器了。

做个形像一点的比喻:浏览器请求一个url路径,这个路径指向一个.pptx文件,apache从web服务器的目录(磁盘上)查到这个文件,但它不知道这个文件是什么类型(注意:文件类型并不是由文件名后缀决定的,而是文件本身内容所决定),于是它通过分析这个文件内容,发现这个文件像是个zip压缩档,文件大小为12345字节,于是它给浏览器说:“嘿,你请求的是个zip压缩文件,它的大小为12345个字节,文件名是 abcd.pptx 。下面是这个文件的内容,请接收”

浏览器收到消息后,得知apache要发给自己一个zip压缩档,于是一边弹出对话框、询问用户是直接打开、还是保存到硬盘,一边把apache接下来发回的数据保存到缓冲区(或者保存到硬盘的临时目录里),等用户做好选择后,采取相应的打开或是保存的操作。

形象的说明,并不是十分准确的,但大体过程如此。

那现在的问题在于apache因为不认识这个pptx文件,那我们要教会apache,让它知道。我们可以通过mime.types文件让告诉它:

修改mime.types文件,在其中加上

application/vnd.ms-word.document.macroEnabled.12 docm
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
application/vnd.ms-powerpoint.template.macroEnabled.12 potm
application/vnd.openxmlformats-officedocument.presentationml.template potx
application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam
application/vnd.ms-powerpoint.slideshow.macroEnabled.12 ppsm
application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm
application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
application/vnd.ms-excel.addin.macroEnabled.12 xlam
application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb
application/vnd.ms-excel.sheet.macroEnabled.12 xlsm
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
application/vnd.ms-excel.template.macroEnabled.12 xltm
application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx

这样的一部分代码,这里包含了ms office相关的很多文件类型。

mime.types文件位置

mime.types文件在什么位置呢?

对于windows版本的apache,它在apache安装目录下的conf子目录里,典型位置为 X:\Program Files\Apache Group\Apache2\conf\mime.types

而linux版本下,通常位于/etc/mime.types, 如redhat/centos/fedora都是如此,debian/ubuntu系列应该也在这里,个人没有亲自查证。

不过centos并不推荐在这里修改,参看这里 http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-apache-config.html TypesConfig一小节

Instead of editing /etc/mime.types, the recommended way to add MIME type mappings is to use the AddType directive.

建议不要去修改 /etc/mime.types ,添加MIME type的推荐方法是使用apache的 AddType 指令.

AddType application/vnd.ms-word.document.macroEnabled.12 docm
AddType application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
AddType application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
AddType application/vnd.ms-powerpoint.template.macroEnabled.12 potm
AddType application/vnd.openxmlformats-officedocument.presentationml.template potx
AddType application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam
AddType application/vnd.ms-powerpoint.slideshow.macroEnabled.12 ppsm
AddType application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
AddType application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm
AddType application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
AddType application/vnd.ms-excel.addin.macroEnabled.12 xlam
AddType application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb
AddType application/vnd.ms-excel.sheet.macroEnabled.12 xlsm
AddType application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
AddType application/vnd.ms-excel.template.macroEnabled.12 xltm
AddType application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx

可以把这些指令加到apache的配置文件里,该指令在apache里出现过N次,不需多说,照着加进去就对了。

Pages: Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 Next