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 = '[email protected]';
    $mail->Password = "yourpassword";
    //發件人地址和名字,名字可以省略
    $mail->SetFrom('[email protected]', '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://[email protected]:/test/

同步window下文件夾到linux中
rsync -vzrtp  --progress --delete \
--password-file=/xxx/rsyncd.secrets  \
rsync://[email protected]:/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前端 標簽:

無覓相關文章插件,快速提升流量

30选5怎么中奖