檢測DNS zone transfer

關於什麼是DNS zone transfer可以參考wiki

DigiNinja 提供了一個讓大家自由測試的 zonetransfer.me 網域

在 Linux 環境內,可利用 dig 指令查詢目標 domain 使用哪些 name server:

dig +nostats +nocomments +nocmd NS zonetransfer.me

Name server 查詢結果:

;zonetransfer.me. IN NS
zonetransfer.me. 7118 IN NS ns12.zoneedit.com.
zonetransfer.me. 7118 IN NS ns16.zoneedit.com.

從結果可得知有 ns12.zoneedit.com 或 ns16.zoneedit.com 這兩個 DNS server,接著即可測試是否可從外部網路對這兩個 DNS server 進行 zone transfer,測試方式如下:

dig axfr zonetransfer.me @ns12.zoneedit.com

如果嫌麻煩也有現成的網站可以測試:

一、UltraTools
二、HackerTarget
三、Digital Point

參考文章:
Zone Transfer CVE-1999-0532 – 古老的 DNS 資安議題

HippyVM

HippyVM 是透過 PyPy 的技術實做出來的 PHP 相容方案:

HippyVM is an implementation of the PHP language using 
RPython/PyPy technology.

它號稱的performance

HippyVM is 7.3x faster than stock PHP and 2x faster than HHVM

可以透過網站或Github關注它:
網站:http://hippyvm.com/
Github:hippyvm

php:iconv函式

最近在玩parser,但parse某些網站的時候,居然parse到某些網站的編碼是用big5….

於是parse回來的中文字變亂碼,解法就是用php的iconv函式。

$string_utf8 = iconv("big5","utf8",$string_big5);

iconv可以指定in_charset跟out_charset,來達到編碼轉換。

參考:

iconvConvert string to requested character encoding

php:browser cache

網站上的一些js,css,image檔,如果設置browser cache,performance會更好。

在php設置browser cache很簡單,大概如下:

$seconds_to_cache = 60*60*24;
$ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
header("Expires: $ts");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
header("Cache-Control: public,max-age=$seconds_to_cache");

Apache性能調效,KeepAlive

關於Apache的keep-alive,主要有三個參數:
KeepAlive
MaxKeepAliveRequests
KeepAliveTimeout

關於這三個參數的解說,可以參考這裡:http://httpd.apache.org/docs/2.0/en/mod/core.html#keepalive

apache預設KeepAlive是打開的,如果妳沒開KeepAlive,那麼你每一個request都會重新一個connectiion,這對cpu來說可能有點負擔。

所以如果把KeepAlive打開,而你的MaxKeepAliveRequests又夠大,當client再download你server上的東西時(例如css.js.images…等等),就有可能再一個connection裡全部做完,而且對User來說體驗會比較好,因為等待的時間變短了。

不過KeepAlive打開也有缺點,它可能會造成記憶體使用增加,因為apache的程序需要等待下一個requests進來,所以connection會保持打開,直到你設定的keepAliveTimeout的時間到了為止。

所以KeepAlive主要有以下優缺點:
優點:
一、較好的performance
二、減少cpu使用量
缺點:
一、可能造成記憶體使用量增加

如何看一個網站有沒有設定KeepALive?開一下console就可以看到了。
螢幕擷圖存為 2014-05-29 02:57:35

一般來說網站我都會把KeepALive設On,因為performance會變好。
而MaxKeepAliveRequests我會調到可以超過網站頁面的所有requests數,這可以因網站不同而異,如果你有很多頁面包含一堆檔案,例如圖片,那麼可能就需要調高一點。
至於KeepAliveTimeout我不會設太高,因為設太高可能會cost太多記憶體使用量。

參考文章:
1.Apache Performance Tuning: KeepAlive to remove latency

php-facebook找出某個網頁的facebook按讚數

<?php
function get_fb_likes($url)
{
$query = "select total_count,like_count,comment_count,share_count,click_count from link_stat where url='{$url}'";
$call = "https://api.facebook.com/method/fql.query?query=" . rawurlencode($query) . "&format=json";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $call);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output);
}

$fb_likes = reset( get_fb_likes("http://www.cnn.com") );
echo $fb_likes->total_count;
echo $fb_likes->like_count;
echo $fb_likes->comment_count;
echo $fb_likes->share_count;
echo $fb_likes->click_count;
?>

參考文章:
1.Get Number of Facebook Likes for a URL

php自己實作file cache

以下為自己製作五分鐘file cache程式

$cache_file = '/path/to/file_name';

if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 60 * 5 ))) {

$file = file_get_contents($cache_file);
} else {
$file = 'xxx';
//若cache過期,則重新對mysql進行query,並存到$file

file_put_contents($cache_file, $file, LOCK_EX);
}

參考文件:
1.filemtime
2.file_put_contents
3.5-minute file cache in PHP