PHP ob_clean 清空先前输出
默认配置下,php输出是先到输出缓冲区(output_buffering),只要数据还没有真正发送到浏览器(严格来说是tcp buffer),那么还是有机会清空先前的缓冲区里面的数据,使用内置的ob_clean函数即可。注意:ob_clean 只是清空当前缓冲区的数据,如果先前输出的数据大于缓冲区,那么一部分数据已经发送,发送的这部分数据是无法清空的。另外如果禁用php输出缓冲区,那么ob_clean起不到任何效果的。
默认配置下,php输出是先到输出缓冲区(output_buffering),只要数据还没有真正发送到浏览器(严格来说是tcp buffer),那么还是有机会清空先前的缓冲区里面的数据,使用内置的ob_clean函数即可。注意:ob_clean 只是清空当前缓冲区的数据,如果先前输出的数据大于缓冲区,那么一部分数据已经发送,发送的这部分数据是无法清空的。另外如果禁用php输出缓冲区,那么ob_clean起不到任何效果的。
有时候从编辑器里面复制粘贴代码到vim中,代码格式会完全乱套。其原因是vim开启了smartindent(智能缩减)或autoindent(自动对齐)模式。为了保持代码的格式,在粘贴前可以先停止上面的两种模式,命令为:
set nosmartindent set noautoindent
上述命令是在vim的阅读模式先输入冒号(:),然后分别执行即可。为了一个粘贴搞出这么多事来,确实是麻烦。不过还有一个更加简单的方法,用命令开始粘贴模式,即:
开启 set paste 关闭 set nopaste 或 set paste!
由于粘贴模式和上面的smartindent、autoindent模式是互斥的,而smartindent是不可少的,所以粘贴完后使用上面的两条命令之一来关闭粘贴模式。
另外还可以通过绑定自定义快捷键的方式来快速切换,例如将下属配置加入到.vimrc中
方式1: set pastetoggle=<F4> 方式2: :map <F8> :set paste :map <F9> :set nopaste
注意:方式1在阅读和编辑模式下都可以使用,对粘贴模式开启和关闭进行切换;方式2是在阅读模式下使用,按下相应的快捷键就相当于执行后面定义的命令。
php 中遍历一个array时可以使用for或foreach,foreach的语法为:foreach ($arr as $k => $v)。遍历数组,把index赋给$k,数组的值赋给$v,那么此处的赋值是传值还是传引用呢。先看下面的例子:
$arr = array( array('id' => 1, 'name' => 'name1'), array('id' => 2, 'name' => 'name2'), ); foreach ($arr as $obj) { $obj['id'] = $obj['id']; $obj['name'] = $obj['name'] . '-modify'; } print_r($arr); //输出的结果 Array( [0] => Array ( [id] => 1 [name] => name1 ) [1] => Array( [id] => 2 [name] => name2 ) )
观察可以发现在foreach循环中对$arr操作并没有影响到$arr的元素,所以这里的赋值是传值而不是传引用。那如果需要修改$arr中元素的值该怎么办呢?可以在变量前面加一个”&”符号,例如:
foreach ($arr as &$obj) { $obj['id'] = $obj['id']; $obj['name'] = $obj['name'] . '-modify'; }
再看另外一个例子,array里面存放的是object,
$arr = array( (object)(array('id' => 1, 'name' => 'name1')), (object)(array('id' => 2, 'name' => 'name2')), ); foreach ($arr as $obj) { $obj->name = $obj->name . '-modify'; } print_r($arr); //输出的结果 Array ( [0] => stdClass Object ( [id] => 1 [name] => name1-modify ) [1] => stdClass Object ( [id] => 2 [name] => name2-modify ) )
此时可以看到原始数组中的object对象已经修改了,所以这里的赋值又是传引用而不是传值
综合上述,得出的结论:如果数组里面存放的是普通类型的元素就是采用传值的方式,存放对象类型元素采用的方式为传地址。
rsync是linux下一款用于同步文件的优秀软件,window下也可以使用它,不过名字为cwRsync。本文主要介绍的是使用window作为rsync的服务端,linux为客户端的使用方法。
cwRsync也分为客户端很服务端,下载地址:http://sourceforge.net/projects/sereds/files/cwRsync/4.0.5/,window是作为服务端,所以下载名为cwRsyncServer_4.0.5_Installer.zip的文件。下载后解压安装,按照向导一步一步下去即可,安装最后需要输入一个系统账号和密码,这个账号是用于运行cwRsync服务的,必须有管理员权限。
安装完成后,在安装的根目录下有一个名为rsyncd.conf文件,即是配置文件。修改后的内容如下:
use chroot = false strict modes = false hosts allow = * log file = rsyncd.log # 如果没有uid,gid 的设置linux客户端会提示 # invalid uid nobody 错误 uid = 0 gid = 0 # 指定tcp 端口,默认是873 # port = 1122 # 定义模块,可以定义多个 [test] # 模块对应系统目录,需要使用/cygdrive + 盘符 path = /cygdrive/c/work # 用于认证模块的用户名 auth users = testuser # 存放认证密码文件,存放于etc下的testuser.pas中 # 文件名可以随便取,内容为用户名:密码,例如“testuser:123” secrets file = etc/testuser.pas read only = false transfer logging = yes
启动服务:运行 — services.msc,在打开的“服务”管理器中找到RsyncServer并启动,也可以使用在命令行的方式来启动和关闭。
启动服务 net start RsyncServer 停止服务 net stop RsyncServer
在linux下使用如下命名即可进行同步了
同步linux下文件夹到window中, rsync -vzrtp --progress --delete \ --password-file=/xxx/rsyncd.secrets \ /home/linuxdir/ rsync://testuser@10.211.55.3:/test/ 同步window下文件夹到linux中 rsync -vzrtp --progress --delete \ --password-file=/xxx/rsyncd.secrets \ rsync://testuser@10.211.55.3:/test/ /home/linuxdir/
注意需要在用户名前使用“rsync://”,否则会提示“connect to host xxx port 22: Connection refused”;密码文件的内容只有密码,不需要用户名,且文件的owner为root,权限为600;如果使用非默认端口需要在ip的冒号后指定端口;端口后是服务配置中定义的模块名字。
当出现rsync: chown “” failed: Invalid argument (22)错误时,是因为参数中有o,即保留文件的owner信息,而window服务端无法完成chown操作,解决办法是去掉参数o。另外有些可能还会出现rsync: chgrp “” failed: Invalid argument (22),原因类似,只要去掉参数中的g即可。
相关资源链接:
http://blog.csdn.net/gguxxing008/article/details/7018924
http://bbs.ywlm.net/thread-915-1-1.html
有时候通过右键废纸篓进行“清倒废纸篓”,无法彻底清空,提示某些文件正在使用,就算关闭所有的应用程序,还是无法清空。可能某些人会通过重启电脑后才能彻底清空废纸篓,其实完全没有必要。在废纸篓上点右键,然后按下command键,你可以看到弹出菜单中的“清倒废纸篓”前面多了”安全“两字,这时候你选中比单击,就可以彻底清空废纸篓了。
eclipse下内置的编辑器以及一些其他插件插件的编辑器似乎都没有提供自动换行的功能。没有这个有时候真不方便,估计很多人都有这样的感受吧,所有终于有人开发了一个自动换行的插件,名为WordWrap,试用了一下,感觉还不错,拿出来和大家分享。插件地址:
http://ahtik.com/eclipse-update/
安装通过菜单help 下 install New Software来进行,具体细节就不多说了。安装好后在编辑器中右键菜单中有一项Word Wrap,选中就是自动换行,当然你可以绑定一个自己喜欢的快捷键,从而快速切换是否自动换行。
调试js代码最直接最简单的方式是使用alert,对于一般的小问题用它就足以解决。但如果需要调试类似于鼠标事件,例如mousemove、mouseover等,可能就有点力不从心了,搞不好都无法关闭弹出的alert框,最后只能通过结束浏览器进程的方式退去。对于这类问题的调试可以采取在页面放一个div,然后通过innerHTML的方式把想跟踪的结果输入到div中,缺点是调试结束后需要清理这些辅助的div。最近看到一个网站会动态修改页面的title,方式当然是js,这给我一点灵感,其实调试的时候我们也可以把结果放到title上,这样也很直观,使用window.document.title = ‘result’即可。
另外一个不能忽视的问题是异常,当异常发生在你插入调试代码以前,你调试的结果永远不会出现,这个时候就需要用上try catch了。
firefox下的firebug提供了一个对js脚本调试的功能,可以自由的设置断点,单步执行等,功能非常强大。可以说是调试、学习别人js的终极武器了。
前两天一个朋友说他电脑上淘宝无法登陆,登陆页面上所有图片都没有,而且整个页面都是乱的,开始以为是不是去了钓鱼网站,后来通过远程确认网址是正确的,通过清除浏览器缓存等一些列操作,问题依旧。后来直接访问支付宝时提示网站数字证书过期无效,心想支付宝这么大的站应该不会犯这样错误吧,在本人机器上登录又没有提示这样错误,在网上查询了一下,如果系统时间不对可能会造成这样错误,遂看看他机器的系统时间,一看是2002年的,果然是时间有问题,把时间修改正确后,再次访问支付宝问题,没有提示整数出错了,通过淘宝登陆也是好的。查看了一下淘宝登陆页面,发现里面用到的css、js和图片资源都是https的,由于时间问题导致证书无效后,这些资源都无法加载,所以页面只显示基本乱七八糟的。
mac下通过软件parallels desktop虚拟安装了一个win xp。parallels desktop就是和vmware,virtualbox类似的虚拟机软件,在mac下parallels desktop功能超强大。在虚拟机中通过共享的方式很容易访问到mac下的硬盘,但我遇到的问题是需要把mac下的某个程序文件夹复制到win xp下,而且程序修改都是在mac下进行的,最开始的做法是修改程序后去win下面手动拷贝,程序还是在增加修改中,所以这真不是一个好办法。后来发现在finder中也可以看到win xp的硬盘,当然也可以访问,方法是打开finder后,使用command+向上方向键一直到最顶层目录就可以看到。进一步发现win xp的硬盘是挂载在/private/tmp目录下的,通过命令mount可以看到类型下面的信息:
vfstool@prlufs0 on /private/tmp/96967/C (prlufs, nodev, noexec, nosuid, synchronous, mounted by yangyz)
上述数字96967是不固定,重启虚拟机后就变化了,那到底代表是什么呢?观察任务管理器,发现原来它就是进程“prl_vm_app”的pid号。知道了其中的奥秘,那事情就好办了,写一个shell脚本,使用rsync来让它同步文件夹的内容,这样就可以做到自动处理了。简单代码如下:
#/bin/bash pid=$(ps aux | grep prl_vm_app | grep -v "grep" | awk -F" " '{print $2}') src=/Users/xxxx/macdir/ dest=/tmp/${pid}/C/windir/ while true do if [ -d "$dest" ] then rsync -vzrtopg --progress --exclude-from=exclude.list $src $dest fi sleep 3 done
hypertranslate是firefox下一个翻译的扩展,可以自定义翻译的目标语言,支持划词翻译,后台数据是通过google 翻译api接口,因此可以自动识别源语言并翻译到目标语言,个人觉得很好用的一个扩展。扩展的安装地址:https://addons.mozilla.org/zh-tw/firefox/addon/hypertranslate/。
另外该扩展还提供chrome、safari,但我在mac下chrome下安装后无法使用。