2015年3月20日 星期五

PHP 取得request檔頭資訊

剛好有用到就記錄下來了

<?php
$indicesServer = array('PHP_SELF',
'argv',
'argc',
'GATEWAY_INTERFACE',
'SERVER_ADDR',
'SERVER_NAME',
'SERVER_SOFTWARE',
'SERVER_PROTOCOL',
'REQUEST_METHOD',
'REQUEST_TIME',
'REQUEST_TIME_FLOAT',
'QUERY_STRING',
'DOCUMENT_ROOT',
'HTTP_ACCEPT',
'HTTP_ACCEPT_CHARSET',
'HTTP_ACCEPT_ENCODING',
'HTTP_ACCEPT_LANGUAGE',
'HTTP_CONNECTION',
'HTTP_HOST',
'HTTP_REFERER',
'HTTP_USER_AGENT',
'HTTP_CONTENT_TYPE',
'CONTENT_LENGTH',
'CONTENT_TYPE',
'HTTPS',
'REMOTE_ADDR',
'REMOTE_HOST',
'REMOTE_PORT',
'REMOTE_USER',
'REDIRECT_REMOTE_USER',
'SCRIPT_FILENAME',
'SERVER_ADMIN',
'SERVER_PORT',
'SERVER_SIGNATURE',
'PATH_TRANSLATED',
'SCRIPT_NAME',
'REQUEST_URI',
'PHP_AUTH_DIGEST',
'PHP_AUTH_USER',
'PHP_AUTH_PW',
'AUTH_TYPE',
'PATH_INFO',
'ORIG_PATH_INFO') ;

echo '<table cellpadding="10">' ;
foreach ($indicesServer as $arg) {
    if (isset($_SERVER[$arg])) {
        echo '<tr><td>'.$arg.'</td><td>' . $_SERVER[$arg] . '</td></tr>' ;
    }
    else {
        echo '<tr><td>'.$arg.'</td><td>-</td></tr>' ;
    }
}
echo '</table>' ;
?>

2015年1月12日 星期一

DNS - ISC BIND 設定檔範例備份

"BIND path"\etc\named.conf:

options {
directory "C:\Windows\System32\dns\zone";
};

key "rndc-key" {
  algorithm hmac-md5;
  secret "H42yg4KaMNqHcPSFuBRuWg==";
};

controls {

        inet 127.0.0.1 port 953 allow { localhost; } keys { "rndc-key"; };

};


zone "dstestdns.com" IN {
type master;
file "mydomain.txt";
allow-transfer { none; };
};

zone "dstestgods.com" IN {
type master;
file "gotods.txt";
allow-transfer { none; };
};

logging
{
     channel default-log {
         file "C:\Windows\System32\dns\log\BIND_default.log" versions 10 size 200m;
         severity info;
         print-time yes;
     };
     channel lamer-log {
         file"C:\Windows\System32\dns\log\BIND_lamer.log" versions 3 size 100m;
         severity info;
         print-severity yes;
         print-time yes;
         print-category yes;
     };
     channel query-log {
         file "C:\Windows\System32\dns\log\BIND_query.log" versions 10 size 1000m;
         severity info;
         print-time yes;
     };
     channel security-log {
         file"C:\Windows\System32\dns\log\BIND_security.log" versions 3 size 100m;
         severity info;
         print-severity yes;
         print-time yes;
         print-category yes;
     };
     category lame-servers { lamer-log; };
     category security { security-log;};
     category queries { query-log;};
     category default { default-log;};
};

//=======================================================

"BIND path"\zone\mydomain.txt:

$TTL    600
@    IN   SOA  dstestdns.com.   root.dstestdns.com.  (
2006102001  ; Serial  僅作為序號而已
28800       ; Refresh slave 伺服器的更新時間
14400       ; Retry   當 slave 主機更新失敗,多久再重新更新一次
720000      ; Expire  重複 retry 多久後就宣告不治....不再更新
86400 )     ; Minimum 可視為 TTL ,尤其是你沒有設定 $TTL 時

@    IN    NS    dstestdns.com.
www    IN    A    192.168.11.227   //將www.dstestdsn.com轉到192.168.11.227
dns    IN    A    192.168.11.166
@    IN    A    192.168.11.166
IN MX     10   dns
IN MX     20   dns
IN MX     30   dns
blog IN CNAME www
ftp IN CNAME www
photo IN CNAME www
mail    IN CNAME www

//=======================================================

"BIND path"\zone\gotods.txt:

$TTL    600
@    IN   SOA  dstestdns.com.   root.dstestdns.com.  (
2006102001  ; Serial  僅作為序號而已
28800       ; Refresh slave 伺服器的更新時間
14400       ; Retry   當 slave 主機更新失敗,多久再重新更新一次
720000      ; Expire  重複 retry 多久後就宣告不治....不再更新
86400 )     ; Minimum 可視為 TTL ,尤其是你沒有設定 $TTL 時

@    IN    NS    dstestdns.com.
www    IN    A    61.31.237.201   //將www.dstestdsn.com轉到61.31.237.201
dns    IN    A    192.168.11.166
@    IN    A    192.168.11.166
IN MX     10   dns
IN MX     20   dns
IN MX     30   dns
blog IN CNAME www
ftp IN CNAME www
photo IN CNAME www
mail    IN CNAME www

2014年12月1日 星期一

C 取得當前時間

#include < time.h >

char g_szDateTime[64];  //當前時間

int main()
{
    GetCurrentDateTime();
    printf(g_szDateTime);
}

//取得當前時間,最後存入char array g_szDateTime
void GetCurrentDateTime()
{
    time_t timer;
    struct tm * timeinfo;
    time(&timer);  /* get current time; same as: timer = time(NULL)  */
    timeinfo = localtime(&timer);
    sprintf(g_szDateTime, "%d-%.2d-%.2d %.2d:%.2d:%.2d", 1900 + timeinfo->tm_year, timeinfo->tm_mon + 1, timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
}

2014年11月12日 星期三

C 標準函數庫 - time.h mktime() 時間轉秒數

轉自 http://pydoing.blogspot.tw/2010/07/c-mktime.html

time.h 的函數 mktime() 以指向結構 tm 的指標當作參數,回傳此 tm 所表示的日曆時間。

以下程式示範使用 mktime() 的結果

#include < stdio .h >
#include < time .h >
 
int main(void)
{
    time_t n;
    struct tm t1;
    t1.tm_sec = 8;
    t1.tm_min = 12;
    t1.tm_hour = 3;
    t1.tm_mday = 22;
    t1.tm_mon = 3;
    t1.tm_year = 1999-1900;
    t1.tm_wday = 1;  //可省略
    t1.tm_yday = 81;  //可省略
    t1.tm_isdst = -1;  //可省略
     
    n = mktime(&t1);
    printf("西元 1999 年 3 月 22 日 3 點 12 分 8 秒共累計了 %u 秒....\n", n);
     
    return 0;
}
 
/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:cmktime.c
    功能:示範 time.h 中函數 mktime() 的使用
    作者:張凱慶
    時間:西元2010年6月 */

2014年10月28日 星期二

術語「參數」(Parameter) 與「引數」(Argument) 的區別


一個「參數」(Parameter) 代表一個值,您必須在呼叫程序時傳遞該參數。 程序的宣告會定義其參數。
當您定義 Function 或 Sub 程序時,會在緊接著程序名稱之後的括號中指定「參數清單」(Parameter List)。 您會針對每個參數,指定名稱、資料型別和傳遞機制 (ByVal (Visual Basic) 或 ByRef (Visual Basic))。 您也可以指定某個參數為選擇性參數, 這表示呼叫程式碼不必將值傳給該參數。
每一個參數的名稱都可做為程序內部的「區域變數」(Local Variable)。 您可以使用任何其他變數的相同方式來使用參數名稱。

引數」(Argument) 代表您在呼叫程序時會傳給程序參數的值。 呼叫程式碼會在呼叫程序時提供引數。
呼叫 Function 或 Sub 程序時,會在緊接著程序名稱之後的括號中包含「引數清單」(Argument List)。 每一個引數會對應至清單中相同位置的參數。
與參數定義不同的是,引數沒有名稱。 每個引數都是一個運算式,可包含零或多個變數、常數和常值 (Literal)。 評估運算式的資料型別,通常應該會符合為對應參數所定義的資料型別,且不論在任何情況下,都必須能將它轉換成參數型別。

簡單的說
定義時稱為「參數」(Parameter) 
ex:
void myFunction(int i){   // i 為參數
//ToDo...
}

呼叫時稱為「引數」(Argument)
ex:
int i = 10;
myFunction(i);   // i 為引數

2014年9月25日 星期四

C++ 字串切割

Arguments AnalyticArguments(int argc, _TCHAR* argv[])
{
    //初始化
    Arguments args;
    args.strAction = "";
    args.strVMName = "";
    args.strSnapshotName = "";

    if(argc >= 3)
    {
        //歷遍所有參數
        for(int i=0 ; i -1)
        {
            //取得一個參數 ex:/Action=start
            string strArgument = argv[i];
            //初始化
            int iTok = -1;
            //=========================判斷參數keyword=========================
            if((iTok = strArgument.find("/Action")) > -1)
            {
                iTok = strArgument.find("=");
                int strLength = strArgument.length();
                //判斷等號右邊是否有文字
                if(iTok > -1)
                    args.strAction = strArgument.substr(iTok+1, strLength);
            }
            else if((iTok = strArgument.find("/VMName")) > -1)
            {
                iTok = strArgument.find("=");
                int strLength = strArgument.length();
                //判斷等號右邊是否有文字
                if(iTok > -1)
                    args.strVMName = strArgument.substr(iTok+1, strLength);
            }
            else if((iTok = strArgument.find("/SnapshotName")) > -1)
            {
                iTok = strArgument.find("=");
                int strLength = strArgument.length();
                //判斷等號右邊是否有文字
                if(iTok > -1)
                    args.strSnapshotName = strArgument.substr(iTok+1, strLength);
            }
            //=================================================================
        }
    }
    return args;
}

C++ 讀文字檔

list lisVMNames;
char line[100];
fstream fin;
//讀檔
fin.open("D:\\Joyce\\TXTs\\BigFarmer.txt",ios::in);
while(fin.getline(line,sizeof(line),'\n'))
{
    //將一行文字存入list
    lisVMNames.push_back(line);
}

2014年9月22日 星期一

C# 字串切割

string[] strParameter = args[i].Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);

以範例來說,以等號切割字串後,由字串陣列接收

關鍵字可用string,而不僅限於char

2014年9月9日 星期二

C# 列出目錄及子目錄之所有檔案或特定檔案

轉貼自:http://note.tc.edu.tw/446.html
C# 列出目錄及子目錄之所有檔案

用遞迴的方法,列出目錄及子目錄之所有檔案。以下的方法如果目錄或檔名太長會出錯。
using System.IO;
using System.Collections;

private void GetFiles(DirectoryInfo di, string searchPattern, ref ArrayList MyFiles)
{
     //取得檔案
    foreach (FileInfo fi in di.GetFiles(searchPattern))
    {
        MyFiles.Add(fi.FullName);
    }

    // Search in subdirctories
    foreach (DirectoryInfo d in di.GetDirectories())
    {
        GetFiles(d, searchPattern, ref MyFiles); //遞迴方法
    }
}