2012年12月 的存档

PHP curl 获取响应的状态吗

2012年12月23日 没有评论

PHP curl可以从服务器端模拟一个http请求,例如抓取网页、模拟登陆等。根据选项设置,可以在curl_exec的返回结果中获取到响应头和body,但这没有响应的状态吗。想要获取状态吗,需要在执行curl_exec后再通过curl_getinfo来获取。例如:

$ch = curl_init ();
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com.hk');
curl_setopt($ch, CURLOPT_TIMEOUT, 200);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

curl_exec($ch);
$httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);

另外curl_getinfo还可以获取很多其他信息,具体请参考:http://php.net/manual/en/function.curl-getinfo.php 。

分类: PHP 标签:

Mac Mail客户端彻底删除Gmail邮件的方法

2012年12月21日 没有评论

自从换了Mac笔记本,就一直在用Mac下的邮件客户端Mail,感觉蛮好用的。通过IMAP方式添加了Gmail邮箱,有一个问题为删除邮件总是无法彻底删除。当直接通过收件箱中删除Gmail邮件,此时收件箱是没有了,但是通过查找,还是能找到,发现邮件还在“所有邮件”,那怕在“所有邮件”中把他删除,同步后又会下载下来。以前的解决办法是通过网页登陆Gmail进行删除操作,今天无意中发现其实可以通过Mail客户端来操作的,在要删除邮件上点邮件,在出来的菜单中要选“删除”,而是选“移动”到该邮箱的“删除邮件”中,如果曾经执行过一次,以后就可以通过选“再次拷贝到“已删除邮件””这项,同样,也可以通过拖动的方式把邮件拖到“已删除邮件”中,操作完成后,可以在“已删除邮件”中发现刚才删除的邮件,此时只要删除“已删除邮件”中的邮件,就能真正删除掉邮件了,如果不手动删除也无所谓,Gmail服务器会在30天后自动永久删除的。

另外,彻底删除草稿箱、已发邮件中的邮件也需要采用上述方式。

分类: 其它 标签:

使用PHPMailer发送邮件

2012年12月20日 2 条评论

PHPMailer是别人封装好的一个发送邮件的库,用起来很方便。其支持mail、sendmail和smtp的方式。官网地址:http://phpmailer.worxware.com/,可以到https://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list去下载最新版本的。下面通过gmail smtp发送邮件为例来说明smtp使用方法。

function sendMail($subject, $body, $to, $ccs = array()) {
    require_once './class.phpmailer.php';

    $mail  = new PHPMailer();
    //设定邮件编码,默认ISO-8859-1,也可以直接去源代码中修改
    $mail->CharSet = 'UTF-8';
    // 使用smtp的方式发送
    $mail->IsSMTP();
    //smtp服务器需要认证
    $mail->SMTPAuth = TRUE;
    //安全协议 gmail 是采用ssl的
    $mail->SMTPSecure = "ssl";
    //smtp服务器
    $mail->Host = 'smtp.gmail.com';
    //smtp服务器端口,普通是25
    $mail->Port = 465;
    //smtp 认证用户名和密码
    $mail->Username = 'yourgmailaccount@gmail.com';
    $mail->Password = "yourpassword";
    //发件人地址和名字,名字可以省略
    $mail->SetFrom('yourgmailaccount@gmail.com', 'display name');
    // 邮件标题
    $mail->Subject = $subject;
    // 邮件内容,支持HTML格式
    $mail->MsgHTML($body);
    // 收件人地址
    $mail->AddAddress($to);
    // 抄送人
    foreach ($ccs as $cc) {
        $mail->AddCC($cc);
    }

    if(!$mail->Send()) {
        echo "error info:" . $mail->ErrorInfo;
    }
}
分类: PHP 标签:

PHP ob_clean 清空先前输出

2012年12月19日 没有评论

默认配置下,php输出是先到输出缓冲区(output_buffering),只要数据还没有真正发送到浏览器(严格来说是tcp buffer),那么还是有机会清空先前的缓冲区里面的数据,使用内置的ob_clean函数即可。注意:ob_clean 只是清空当前缓冲区的数据,如果先前输出的数据大于缓冲区,那么一部分数据已经发送,发送的这部分数据是无法清空的。另外如果禁用php输出缓冲区,那么ob_clean起不到任何效果的。

分类: PHP 标签:

vim粘贴代码格式变乱

2012年12月18日 没有评论

有时候从编辑器里面复制粘贴代码到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是在阅读模式下使用,按下相应的快捷键就相当于执行后面定义的命令。

分类: Linux 标签: , ,

php foreach 传值还是传引用

2012年12月17日 3 条评论

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对象已经修改了,所以这里的赋值又是传引用而不是传值

综合上述,得出的结论:如果数组里面存放的是普通类型的元素就是采用传值的方式,存放对象类型元素采用的方式为传地址

分类: PHP 标签:

window rsync server 安装使用

2012年12月15日 1 条评论

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

分类: Linux 标签:

mac 彻底清空废纸篓

2012年12月14日 2 条评论

有时候通过右键废纸篓进行“清倒废纸篓”,无法彻底清空,提示某些文件正在使用,就算关闭所有的应用程序,还是无法清空。可能某些人会通过重启电脑后才能彻底清空废纸篓,其实完全没有必要。在废纸篓上点右键,然后按下command键,你可以看到弹出菜单中的“清倒废纸篓”前面多了”安全“两字,这时候你选中比单击,就可以彻底清空废纸篓了。

分类: 其它 标签:

eclipse自动换行的插件

2012年12月13日 没有评论

eclipse下内置的编辑器以及一些其他插件插件的编辑器似乎都没有提供自动换行的功能。没有这个有时候真不方便,估计很多人都有这样的感受吧,所有终于有人开发了一个自动换行的插件,名为WordWrap,试用了一下,感觉还不错,拿出来和大家分享。插件地址:

http://ahtik.com/eclipse-update/

安装通过菜单help 下 install New Software来进行,具体细节就不多说了。安装好后在编辑器中右键菜单中有一项Word Wrap,选中就是自动换行,当然你可以绑定一个自己喜欢的快捷键,从而快速切换是否自动换行。

js调试的一些经验

2012年12月12日 没有评论

调试js代码最直接最简单的方式是使用alert,对于一般的小问题用它就足以解决。但如果需要调试类似于鼠标事件,例如mousemove、mouseover等,可能就有点力不从心了,搞不好都无法关闭弹出的alert框,最后只能通过结束浏览器进程的方式退去。对于这类问题的调试可以采取在页面放一个div,然后通过innerHTML的方式把想跟踪的结果输入到div中,缺点是调试结束后需要清理这些辅助的div。最近看到一个网站会动态修改页面的title,方式当然是js,这给我一点灵感,其实调试的时候我们也可以把结果放到title上,这样也很直观,使用window.document.title = ‘result’即可。

另外一个不能忽视的问题是异常,当异常发生在你插入调试代码以前,你调试的结果永远不会出现,这个时候就需要用上try catch了。

firefox下的firebug提供了一个对js脚本调试的功能,可以自由的设置断点,单步执行等,功能非常强大。可以说是调试、学习别人js的终极武器了。

分类: web前端 标签:

无觅相关文章插件,快速提升流量