2012年7月 的存檔

禁止頁面緩存

2012年7月29日 沒有評論

要想控制頁面不緩存,無非是從過期時間、頁面的最后更新時間以及Cache-Control來入手。只要在響應的header信息中正確設置了這些信息就能到達頁面不緩存的目的。例如在php中通過header函數來設置頁面不緩存:

header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); 
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); 
header( 'Cache-Control: no-store, no-cache, must-revalidate' ); 
header( 'Cache-Control: post-check=0, pre-check=0', FALSE ); 
header( 'Pragma: no-cache' );

說明:
Expires(過期時間)只要設置成一個過去的時間即可;

Last-Modified(頁面最后更新時間)設置為當前時間,讓瀏覽器獲取最新的頁面資料;

第一個Cache-Control,告訴瀏覽器不要緩存當前頁面,針對HTTP 1.1 協議

第二個Cache-Control主要是針對古老的IE 5

Pragma: no-cache針對HTTP 1.0 協議告訴瀏覽器不要

php header 之 Set-Cookie

2012年7月29日 沒有評論

php設置cookie可以使用setcookie函數或header函數。使用header方式時候需要注意字符串的順序,如果順序不對,可能會出現意想不到的問題。正確的順序為

name=value; [expires=date; [path=path]; [domain=domainname]; [secure]]

例如:在netingcn.com下設置一個名為cookiename,值為cookieValue,過期時間為一年的cookie

header("Set-Cookie: cookiename=cookieValue; expires=" . gmstrftime("%A, %d-%b-%Y %H:%M:%S GMT", time() + (86400 * 365)) .  '; path=/; domain=netingcn.com');

如果把domain、path放到expires前面,在firefox通過httpfox查看時,發現過期時間是“End Of Session”,但退出瀏覽器后重新打開,發現該cookie還是存在的,chrome顯示的也是類似。雖說瀏覽器最終還是設置了一個一年過期的cookie,不過domain信息為當前頁面的完整域,不是設置的頂級域。所以一定要注意順序。

另外,如果用header的方式設置多個cookie,需要設置header的第二個參數為FALSE,下面是header函數的聲明:

void header ( string string [, bool replace [, int http_response_code]] )

第二個參數replace 指明是替換掉前一條類似的標頭還是增加一條相同類型的標頭。默認為替換,但如果將其設為 FALSE 則可以強制發送多個同類標頭。

分類: PHP 標簽:

shell 字符串截取

2012年7月29日 沒有評論

shell中截取字符串的方法有很多中,可以分為兩大類。第一種獲取特定的字符或字符串的左邊或者右邊的字字符串,java中實現需要先用indexOf來確定特定字符串的位置,然后再用substring來獲取結果;第二種類似java中的substring。

第一種又可以分為四種情況,下面一一介紹。

1、使用 # 號操作符。用途是從左邊開始刪除第一次出現子字符串即其左邊字符,保留右邊字符。用法為#*substr,例如:

str='http://www.twubdg.tw/cut-string.html'

echo ${str#*//}

得到的結果為www.twubdg.tw/cut-string.html,即刪除從左邊開始到第一個"http://"及其左邊所有字符

2、使用 ## 號操作符。用途是從左邊開始刪除最后一次出現子字符串即其左邊字符,保留右邊字符。用法為##*substr,例如:

str='http://www.twubdg.tw/cut-string.html'

echo ${str##*/}

得到的結果為cut-string.html,即刪除最后出現的"/"及其左邊所有字符

3、使用 % 號操作符。用途是從右邊開始刪除第一次出現子字符串即其右邊字符,保留左邊字符。用法為%substr*,例如:

str='http://www.twubdg.tw/cut-string.html'

echo ${str%/*}

得到的結果為http://www.twubdg.tw,即刪除從右邊開始到第一個"/"及其右邊所有字符

4、使用 %% 號操作符。用途是從右邊開始刪除最后一次出現子字符串即其右邊字符,保留左邊字符。用法為%%substr*,例如:

str='http://www.twubdg.tw/cut-string.html'

echo ${str%%/*}

得到的結果為http://www.twubdg.tw,即刪除從右邊開始到最后一個"/"及其右邊所有字符

第二種也分為四種,分別介紹如下:

1、從左邊第幾個字符開始以及字符的個數,用法為:start:len,例如:

str='http://www.twubdg.tw/cut-string.html'

echo ${var:0:5}

其中的 0 表示左邊第一個字符開始,5 表示字符的總個數。
結果是:http:

2、從左邊第幾個字符開始一直到結束,用法為:start,例如:

str='http://www.twubdg.tw/cut-string.html'

echo ${var:7}

其中的 7 表示左邊第8個字符開始
結果是:www.twubdg.tw/cut-string.html

3、從右邊第幾個字符開始以及字符的個數,用法:0-start:len,例如:

str='http://www.twubdg.tw/cut-string.html'
echo ${str:0-15:10}

其中的 0-6 表示右邊算起第6個字符開始,10 表示字符的個數。
結果是:cut-string

3、從右邊第幾個字符開始一直到結束,用法:0-start,例如:

str='http://www.twubdg.tw/cut-string.html'
echo ${str:0-4}

其中的 0-6 表示右邊算起第6個字符開始,10 表示字符的個數。
結果是:html

注:(左邊的第一個字符是用 0 表示,右邊的第一個字符用 0-1 表示)

使用運算符 -= 的陷阱

2012年7月28日 沒有評論

一般的編程語言中都提供了+=、-=這樣的運算符,例如

var para = 1;
para = para + 4;
//等價于
para += 4;

//同樣
para = para - 4;
//等價于
para -= 4;

我的編程習慣一直比較傾向后者,最近在寫php代碼時候發現了一個小陷阱,如下代碼:

$cnt = 100;
$offset1 = 80;
$offset2 = 120;

$cnt -= $offset1 + $offset2;

我的原意是$cnt – $offset1 + $offset2,結果為140,但是真實的結果是-100。這也是典型運算符優先級導致的問題,原來 + 的優先級要高于 -=,所以自然結果就是-100了。經測試java、php、javascript、python都是這樣。

使用 +=、-= 時如果超過兩個操作數,一定要清楚到底在做什么,特別要注意運算符的優先級。

平時我是記不住那么多運算符的優先級順序,在處理多個參數進行混合運算時都是祭出法寶,那就是使用括號來控制優先級。

分類: web前端 標簽:

unable to load dynamic library memcached.so

2012年7月28日 1 條評論

通過源代碼編譯安裝php的memcached擴展,一路順利,最終生成了memcached.so,同時在php.ini中添加了extension=memcached.so,使用命令php -v查看時提示PHP Warning: PHP Startup: Unable to load dynamic library。以前在多臺機器上安裝擴展都是這么設置就可以,但是這臺機器上就不行,后來發現是此機器的php.ini默認配置中使用了extension_dir,解決辦法就是注釋掉php.ini中的extension_dir配置。

關于memcached擴展的安裝可以參看這里:http://www.twubdg.tw/php-memcached.html

分類: PHP 標簽:

nginx php 使用memcached出現頁面502錯誤

2012年7月28日 沒有評論

php的版本5.2.17,memcached擴展的版本2.0.1,當使用memcached的cas功能時候出現502錯誤,而set、get功能正常。開始一直以為是nginx的配置有問題,網上也有人提到過可能跟fast-cgi的一些參數設置有問題,試著修改默認值,問題依舊沒有得到解決。后來通過CLI來執行php腳本時候提示了一個錯誤,按照這個錯誤搜索,發現原來這是memcached擴展2.0.1跟php 5.2.17不兼容的Bug,具體參看:https://bugs.php.net/bug.php?id=61283。

解決的辦法要么是升級php,要么降級memcached擴展到1.0.2,經過測試在php 5.2.17 和 memcached 1.0.2能正常工作。

分類: PHP 標簽:

解決 PHPExcel 長數字串顯示為科學計數

2012年7月24日 8 條評論

解決 PHPExcel 長數字串顯示為科學計數

在excel中如果在一個默認的格中輸入或復制超長數字字符串,它會顯示為科學計算法,例如身份證號碼,解決方法是把表格設置文本格式或在輸入前加一個單引號。

使用PHPExcel來生成excel,也會遇到同樣的問題,解決方法有三種:
1、設置單元格為文本

$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setTitle('Simple');
//設置A3單元格為文本
$objPHPExcel->getActiveSheet()->getStyle('A3')->getNumberFormat()
	->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
//也可以設置整行或整列的style
/*
//E 列為文本
$objPHPExcel->getActiveSheet()->getStyle('E')->getNumberFormat()
	->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
//第三行為文本
$objPHPExcel->getActiveSheet()->getStyle('3')->getNumberFormat()
	->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
*/

更多的格式可以在PHPExcel/Style/NumberFormat.php中找到。注意:上述的設置對長數字字符串還是以文本方式來顯示科學計數法的結果,原因可能php在處理大數字時采用的科學計數法。

2、在設置值的時候顯示的指定數據類型

$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setTitle('Simple');

$objPHPExcel->getActiveSheet()->setCellValueExplicit('D1',
                                 123456789033, 
                                 PHPExcel_Cell_DataType::TYPE_STRING);

3、在數字字符串前加一個空格使之成為字符串

$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setTitle('Simple');

$objPHPExcel->getActiveSheet()->setCellValue('D1', ' ' . 123456789033);

推薦使用第二、三種,第一種沒有根本解決問題。

分類: PHP 標簽:

PHPExcel mac os 下中文亂碼問題

2012年7月24日 沒有評論

在php中使用PHPExcel來生成Excel表格,內容含有中文,window系統下顯示正常,mac os的office打開excel顯示不出來中文,現象是表格中看到中文顯示為方框,但是焦點放在表格上時,上面的顯示的又是中文。程序中使用的編碼是GBK,由于PHPExcel只支持UTF8,已經在程序中使用iconv進行了轉碼,所以可以排除編碼的問題。百思不得其解,只好借助萬能的Google,在一個鏈接中發現有人說mac os 打開的excel文件出現亂碼是由于字體造成的,再次打開亂碼的excel文件,發現打開的默認字體為一個英文字體,終于找到原因了,解決問題就很簡單了,在生成excel時候強制設置表格使用某種支持中文的字體即可,如宋體,代碼如下:

$objPHPExcel = new PHPExcel();	
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('宋體');

注意:如果當前文件的編碼不是使用UTF8,需要對’宋體’進行編碼轉換使之成功UTF8編碼。

PHPExcel真是個好東西,功能太強大了,有點小遺憾的是中文文檔不全,想要實現某種功能只能借助搜索引擎了。

分類: PHP 標簽:

php json 中文問題

2012年7月11日 沒有評論

php中內置函數json_encode提供把一個array轉化為json字符串的功能。網上看到很多人說不能處理中文,這種說法其實是不對的,關鍵是要看php源文件的編碼方式,對于非UTF8的php源文件,中文確實會有問題,反之能正常工作,為什么會這樣呢,php手冊上說的很清楚

This function only works with UTF-8 encoded data.

對于使用utf8作為文件編碼方式的人,可以直接忽視中文問題,那么采用GBK或GB2312的怎么辦?要么修改文件的編碼方式,往往這個不太顯示,總不能為了這個問題把一個項目都修改成UTF-8,另外的一個辦法是借助urlencode、urldecode在轉換一下,urlencode是把原字符串轉換為UTF8格式編碼,這就滿足了json_encode支持UTF8的需求,而urldecode是把UTF8編碼轉換成當前字符編碼。所以在進行json_encode前先把array中的字符串使用urlencode,然后執行json_encode,接著使用urlencode把json_encode結果進行解碼。實例代碼如下:

function arrayEncode(&$arr) {
    foreach ($arr as $k => $v) {
        if (is_array($v)) {
            arrayEncode($arr[$k]);
        } else {
            $arr[$k] =  urlencode($v);
        }

        if (is_string($k)) {
            $nk = urlencode($k);

            if ($nk != $k) {
                $arr[$nk] = $arr[$k];

                unset($arr[$k]);
            }
        }
    }
}

function my_json($arr) {
    arrayEncode($arr);
    
    return urldecode(json_encode($arr));
}

將圖片生成圓角圖片

2012年7月10日 沒有評論

說明:此文章有網友提供

見官方demo:http://www.imagemagick.org/Usage/thumbnails/#rounded%5Fborder

運行此demo必須條件:

1、ImageMagick 安裝路徑 D:/Program Files/ImageMagick/convert.exe

2、將 ex 文件夾放在 C盤根目錄下。

最終轉換命令

"convert c:/card1.jpg -alpha set -gravity center -extent 1200x750 " +
" c:/a_big.png -compose DstIn -composite " +
" c:/b_big.png -compose Over -composite " +
" c:/111.png "

其中 a_big.png b_big.png 均是背景圖 順序不能互換 111.png 是生成的圓角圖片

思路:

這里假設用戶上傳的最大長寬比例不超過1200*750,

我們可以先做 1200*750 2張背景圖,frist_1200_750.png 和 sec_1200_750.png。

由于用戶上傳圖片大小不同,也就是 width,height不同

1、得到用戶上傳圖片的width、height

2、判斷目錄下是否存在此長寬比的背景圖,如果不存在,再創建此長寬比的背景圖,Radius.java createThumbnail 方法。

3、根據轉換命令,進行轉換。記住,2張背景圖的順序不能反, 讀者可試試互換結果。 Radius.java createRadiusImg 方法。

4、測試,如果 width > height 生成的圓角圖長寬比正常。測試圖片 card1.jpg

如果 width < height,就不正常了。 測試圖片 4d58cae79da70.jpg 如果 width > height, 長寬比均比較大,生成圖片 和 原圖片對比,發現生成圖片模糊,測試圖片 200711108226923_2.jpg

Demo代碼下載地址:http://pan.baidu.com/netdisk/singlepublic?fid=588935_3480700337

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

30选5怎么中奖