header()
http://member.ettoday.com/book/function.php-header.htm
die()
http://member.ettoday.com/book/function.php-die.htm...
Read more
2007年3月14日 星期三
[+/-] : c51 特殊資料型態
2007年3月13日 星期二
2007年3月10日 星期六
2007年3月9日 星期五
[+/-] : php.ini 校調
php.ini是PHP的設定檔
修改過後一定要重新啟動Apache,設定值才能生效
[位在哪裡]
Windows系統下,位於 C:\WINDOWS\php.ini
Linux系統下,打以下指令去找
locate php.ini
會找到好幾個
其中,這是正確的位置: /etc/php4/apache2/php.ini
以下這兩個設定檔則不是種點
/etc/php4/cli/php.ini
是指當PHP用來當做指令列語言使用(不搭配網站伺服器) 時所用的設定
/etc/php4/cgi/php.ini
則是把PHP當做CGI來用時的設定檔
[ 快速設定 ] 懶得看原理的話可以直接設定這些選項
max_execution_time = 300 //上傳檔案的最大執行時間,預設是30秒
register_globals = Off
magic_quotes_gpc = On
magic_quotes_runtime = Off
upload_max_filesize = 20M //上傳檔案的最大size,預設是2M
//以下是window才需設定
SMTP = 您的郵件外送主機
sendmail+from = 您的Email
[ 常用延伸函式庫 ]
1. for Windowsa:
在 php/extensions 裡面,一個 dll 就是一個函式庫
若要使用該函式庫,則從 php.ini 中取消前面的分號 ";" 即可
若沒有,則去 PHP 官網抓(http://www.php.net/downloads.php)
找 Windwos Binaries 底下的 PHP 4.x.x zip package
找到extension 目錄之後,將你所需要的 xxx.dll 複製過去即可
2. for Linux:
若當初沒有 compile 進去,則用 rpm 或 deb 來安裝
[ 參考 ]
PHP+MySQL快速入門 - 吳弘凱
...
Read more
修改過後一定要重新啟動Apache,設定值才能生效
[位在哪裡]
Windows系統下,位於 C:\WINDOWS\php.ini
Linux系統下,打以下指令去找
locate php.ini
會找到好幾個
其中,這是正確的位置: /etc/php4/apache2/php.ini
以下這兩個設定檔則不是種點
/etc/php4/cli/php.ini
是指當PHP用來當做指令列語言使用(不搭配網站伺服器) 時所用的設定
/etc/php4/cgi/php.ini
則是把PHP當做CGI來用時的設定檔
[ 快速設定 ] 懶得看原理的話可以直接設定這些選項
max_execution_time = 300 //上傳檔案的最大執行時間,預設是30秒
register_globals = Off
magic_quotes_gpc = On
magic_quotes_runtime = Off
upload_max_filesize = 20M //上傳檔案的最大size,預設是2M
//以下是window才需設定
SMTP = 您的郵件外送主機
sendmail+from = 您的Email
[ 常用延伸函式庫 ]
1. for Windowsa:
在 php/extensions 裡面,一個 dll 就是一個函式庫
若要使用該函式庫,則從 php.ini 中取消前面的分號 ";" 即可
若沒有,則去 PHP 官網抓(http://www.php.net/downloads.php)
找 Windwos Binaries 底下的 PHP 4.x.x zip package
找到extension 目錄之後,將你所需要的 xxx.dll 複製過去即可
2. for Linux:
若當初沒有 compile 進去,則用 rpm 或 deb 來安裝
[ 參考 ]
PHP+MySQL快速入門 - 吳弘凱
...
Read more
[+/-] : PHP結合資料庫常用語法(未完成)
[ 大綱 ]
1. mysql_connect()與mysql_pconnect()
[ 內文 ]
1. mysql_connect()
不佔線(每次連結用完就關閉連線),強烈建議使用。
除非你的網站隨時有上千萬人在使用才不建議使用。...
Read more
1. mysql_connect()與mysql_pconnect()
[ 內文 ]
1. mysql_connect()
不佔線(每次連結用完就關閉連線),強烈建議使用。
除非你的網站隨時有上千萬人在使用才不建議使用。...
Read more
2007年3月6日 星期二
[+/-] : 指標
[ 定義 ]
一個變數,用來存放變數位址。
[ 宣告方式 ]
1.
int i = 100;
int *ptr = &i; //宣告ptr為指標,存入i的位址
2.
int i = 100;
int * ptr; //宣告ptr為指標
ptr = &i; //存入i的位址。不可以寫成*ptr = &i
[ 參考 ]
Turbo C 圖例教學範本,蔡明志。
...
Read more
一個變數,用來存放變數位址。
[ 宣告方式 ]
1.
int i = 100;
int *ptr = &i; //宣告ptr為指標,存入i的位址
2.
int i = 100;
int * ptr; //宣告ptr為指標
ptr = &i; //存入i的位址。不可以寫成*ptr = &i
[ 參考 ]
Turbo C 圖例教學範本,蔡明志。
...
Read more
2007年3月5日 星期一
[+/-] : A book on C
[+/-] : The Function Pointer Tutorials
1.
http://www.newty.de/fpt/fpt.html#chapter2
2.
http://publications.gbdirect.co.uk/c_book/chapter8/typedef.html
3.
Hide Function Pointer Declarations With a typedef
Can you tell what the following declaration means?
void (*p[10]) (void (*)() );
Only few programmers can tell that p is an "array of 10 pointers to a function returning void and taking a pointer to another function that returns void and takes no arguments." The cumbersome syntax is nearly indecipherable. However, you can simplify it considerably by using typedef declarations. First, declare a typedef for "pointer to a function returning void and taking no arguments" as follows:
typedef void (*pfv)();
Next, declare another typedef for "pointer to a function returning void and taking a pfv" based on the typedef we previously declared:
typedef void (*pf_taking_pfv) (pfv);
Now that we have created the pf_taking_pfv typedef as a synonym for the unwieldy "pointer to a function returning void and taking a pfv", declaring an array of 10 such pointers is a breeze:
pf_taking_pfv p[10];
[ 轉錄 ]
http://www.devx.com/tips/Tip/13829...
Read more
http://www.newty.de/fpt/fpt.html#chapter2
2.
http://publications.gbdirect.co.uk/c_book/chapter8/typedef.html
3.
Hide Function Pointer Declarations With a typedef
Can you tell what the following declaration means?
void (*p[10]) (void (*)() );
Only few programmers can tell that p is an "array of 10 pointers to a function returning void and taking a pointer to another function that returns void and takes no arguments." The cumbersome syntax is nearly indecipherable. However, you can simplify it considerably by using typedef declarations. First, declare a typedef for "pointer to a function returning void and taking no arguments" as follows:
typedef void (*pfv)();
Next, declare another typedef for "pointer to a function returning void and taking a pfv" based on the typedef we previously declared:
typedef void (*pf_taking_pfv) (pfv);
Now that we have created the pf_taking_pfv typedef as a synonym for the unwieldy "pointer to a function returning void and taking a pfv", declaring an array of 10 such pointers is a breeze:
pf_taking_pfv p[10];
[ 轉錄 ]
http://www.devx.com/tips/Tip/13829...
Read more
[+/-] : 函式型態的別名
1.
很多寫 C/C++ 的人都把 typedef 當成#define 來使用。
誠然,像這樣的定義
typedef unsigned short WORD;
就相當於
#define WORD unsigned short
但就本義來說,#define 是字串的取代,例如
#define WORD Hello!
在程式任何使用到 WORD 的地方會用 Hello! 取代 WORD
typedef看來不怎麼有用是吧!?非也,由於所謂 C/C++ 的型態是很廣義的,使用typedef
可以使程式看起來簡潔易懂且不容易出錯。下面是幾個typedef的應用例子:
簡單型態的別名
typedef unsigned char BYTE;//定義無號單字節的型態
typedef unsigned short WORD;//定義無號雙字節的型態
typedef unsigned long DWORD;//定義無號四字節的型態
//嗯!這三行沒什麼大不了,用#define也可以做
結構型態的別名
typedef struct StructTag{
int mA;
int mB;
}STRUCTTAG, *PSTRUCTTAG;
當要建立這個結構的物件時,就可以用別名 STRUCTTAG 和 PSTRUCTTAG,例如
STRUCTTAG StructObj;
PSTRUCTTAG pStructObj;
就相當於
struct StructTag StructObj;
struct StructTag *pStructObj;
函式型態的別名
如果你有一個 library 提供了字串轉整數的函式
int HexToInt(char *str);//十六進位字串轉整數
int DecToInt(char *str);//十進位字串轉整數
當你的程式要使用這些函式時,就必需include這些函式的定義,但用typedef會
更簡潔:
typedef int ToInt(char *str);
//上面這行定義了一個需傳入字串(char *)且返回整數(int)的函式型態別名
//叫 ToInt
ToInt HexToInt,DecToInt;//宣告HexToInt,DecToInt這兩個函式
現在你的程式可以呼叫HexToInt(...),DecToInt(...)了。
在Windows,通常是應用程式呼叫API來工作的,但由於某種需求,Windows API
會反過來呼叫應用程式的函式,這種函式稱之為 callback function。
callback function 對API來說只有該傳入那些參數和返回值型態,沒有函式名稱而用函式
指標來呼叫(事實上Windows也不可能用程式的函式名稱來呼叫)。這時使用函式型態的別名
來宣告函式指標就特別好用了。
舉個例子吧!建立一個新的行程(Thread)的函式:
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc,
LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT
nStackSize = 0, DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
其中AFX_THREADPROC就是一個函式型態的別名
它的定義是
typedef UINT (AFX_CDECL *AFX_THREADPROC)(LPVOID);
//AFX_THREADPROC 是一個傳入一個指標參數返回UINT型態值的函式
//指標的名稱(AFX_CDEL是標明函式呼叫為 __cdecl(C style calling convention))
用這個宣告,不論API或應用程式本身都很方便,如應用程式可以這樣來
開啟行程:
CWinThread* pMyThread=AfxBeginThread(
(AFX_THREADPROC)MyThreadFunc,............
是不是很簡潔明瞭?嗯...MyThreadFunc算不算 callback function 有點疑義,但做為 typedef 的使用例子應沒問題的
[ 轉錄 ]
http://ehome.hifly.to/showthread.php?s=&threadid=132
2.
http://publications.gbdirect.co.uk/c_book/chapter8/typedef.html...
Read more
很多寫 C/C++ 的人都把 typedef 當成#define 來使用。
誠然,像這樣的定義
typedef unsigned short WORD;
就相當於
#define WORD unsigned short
但就本義來說,#define 是字串的取代,例如
#define WORD Hello!
在程式任何使用到 WORD 的地方會用 Hello! 取代 WORD
typedef看來不怎麼有用是吧!?非也,由於所謂 C/C++ 的型態是很廣義的,使用typedef
可以使程式看起來簡潔易懂且不容易出錯。下面是幾個typedef的應用例子:
簡單型態的別名
typedef unsigned char BYTE;//定義無號單字節的型態
typedef unsigned short WORD;//定義無號雙字節的型態
typedef unsigned long DWORD;//定義無號四字節的型態
//嗯!這三行沒什麼大不了,用#define也可以做
結構型態的別名
typedef struct StructTag{
int mA;
int mB;
}STRUCTTAG, *PSTRUCTTAG;
當要建立這個結構的物件時,就可以用別名 STRUCTTAG 和 PSTRUCTTAG,例如
STRUCTTAG StructObj;
PSTRUCTTAG pStructObj;
就相當於
struct StructTag StructObj;
struct StructTag *pStructObj;
函式型態的別名
如果你有一個 library 提供了字串轉整數的函式
int HexToInt(char *str);//十六進位字串轉整數
int DecToInt(char *str);//十進位字串轉整數
當你的程式要使用這些函式時,就必需include這些函式的定義,但用typedef會
更簡潔:
typedef int ToInt(char *str);
//上面這行定義了一個需傳入字串(char *)且返回整數(int)的函式型態別名
//叫 ToInt
ToInt HexToInt,DecToInt;//宣告HexToInt,DecToInt這兩個函式
現在你的程式可以呼叫HexToInt(...),DecToInt(...)了。
在Windows,通常是應用程式呼叫API來工作的,但由於某種需求,Windows API
會反過來呼叫應用程式的函式,這種函式稱之為 callback function。
callback function 對API來說只有該傳入那些參數和返回值型態,沒有函式名稱而用函式
指標來呼叫(事實上Windows也不可能用程式的函式名稱來呼叫)。這時使用函式型態的別名
來宣告函式指標就特別好用了。
舉個例子吧!建立一個新的行程(Thread)的函式:
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc,
LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT
nStackSize = 0, DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
其中AFX_THREADPROC就是一個函式型態的別名
它的定義是
typedef UINT (AFX_CDECL *AFX_THREADPROC)(LPVOID);
//AFX_THREADPROC 是一個傳入一個指標參數返回UINT型態值的函式
//指標的名稱(AFX_CDEL是標明函式呼叫為 __cdecl(C style calling convention))
用這個宣告,不論API或應用程式本身都很方便,如應用程式可以這樣來
開啟行程:
CWinThread* pMyThread=AfxBeginThread(
(AFX_THREADPROC)MyThreadFunc,............
是不是很簡潔明瞭?嗯...MyThreadFunc算不算 callback function 有點疑義,但做為 typedef 的使用例子應沒問題的
[ 轉錄 ]
http://ehome.hifly.to/showthread.php?s=&threadid=132
2.
http://publications.gbdirect.co.uk/c_book/chapter8/typedef.html...
Read more
2007年3月4日 星期日
[+/-] : PHP + BAT 製作PHP自解析批處理
就是,一個BAT文件,內部包含了DOS的BAT批處理代碼和PHP的CLI的代碼。
因為後綴名為BAT,所以在WIndows系統上面,我點他,他就可以自動運行
因為我做了一些對PHP的特殊處理,因而它又能自己使用PHP的CLI來解析自己所包含的PHP指令。
有何用途:
例如你要做一個PHP-CLI的發行包,那麼你可以參照這個腳本來做你自己的安裝程序。
代碼原文:
filename: phpbat.bat
代碼:
@REM
一點說明,巧妙的運用了BAT批處理的REM指令和PHP的''定義字符串的方式,使得二者混合一體,而又互補干擾。
參考:ActivePerl的WIndows Zip Packge的Installer.bat
[ 轉錄 ]
http://helen.dragonwake.net/index.php/action/viewspace/itemid/5014...
Read more
因為後綴名為BAT,所以在WIndows系統上面,我點他,他就可以自動運行
因為我做了一些對PHP的特殊處理,因而它又能自己使用PHP的CLI來解析自己所包含的PHP指令。
有何用途:
例如你要做一個PHP-CLI的發行包,那麼你可以參照這個腳本來做你自己的安裝程序。
代碼原文:
filename: phpbat.bat
代碼:
@REM
一點說明,巧妙的運用了BAT批處理的REM指令和PHP的''定義字符串的方式,使得二者混合一體,而又互補干擾。
參考:ActivePerl的WIndows Zip Packge的Installer.bat
[ 轉錄 ]
http://helen.dragonwake.net/index.php/action/viewspace/itemid/5014...
Read more
訂閱:
文章 (Atom)