2009年5月21日 星期四

ssh 免輸入帳號密碼

Server A 至 Server B 不用輸入帳號密碼

Server A上的設定
ssh-keygen -t rsa 或 ssh-keygen -d (dsa) => 產生出 id_rsa, id_rsa.pub
scp id_rsa.pub ServerB:~/.ssh/

Server B上的設定
cat .ssh/id_rsa.pub >> .ssh/authorized_keys

懶人作法
ssh-keygen
cd .ssh
cp id_rsa.pub authorized_keys
scp -r .ssh  hostname:

2009年5月14日 星期四

PHP 使用 WWW-Authenticate 方式來認證身份

PHP 認證亦可以使用 WWW-Authenticate 方式來認證身份


範例程式如下:

<?php
$user = 'user';
$pw = 'pw';


if(!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_PW']=='') {
    Header("WWW-Authenticate: Basic realm=\"login\"");
    Header("HTTP/1.0 401 Unauthorized");
    die('認證失敗');
} else {
    if($_SERVER['PHP_AUTH_USER']!=$user || $_SERVER['PHP_AUTH_PW']!=$pw) {
        Header("WWW-Authenticate: Basic realm=\"login\"");
        Header("HTTP/1.0 401 Unauthorized");
        die('帳號或密碼錯誤');
    }
}


//認證成功以後要作的工作
echo "認證成功";

2009年4月23日 星期四

PHP 錯誤處理-自定處理函式

set_error_handler() - 指定一個自定函式作為 PHP 錯誤處理的函式。

這個函式是用來告知 PHP 引擎,我們所自定的錯誤處理函式的名稱,自定的錯誤處理函式的名稱可以自行命名,但必須遵守以下傳入變數的次序及數量。

function ErrorHandler($type, $msg, $file, $line){

}

範例:
<?php
function ErrorHandler($type, $msg, $file, $line){
printf("$type, $msg, $file, $line, 除數不可為 0\n");
}

set_error_handler('ErrorHandler');
printf("%d\n", 1/0);
?>

輸出結果:
2, Division by zero, /var/www/html/error1.php, 7, 除數不可為 0 0

PHP 錯誤處理-錯誤等級相關函式 error_reporting

error_reporting()  - 指定PHP程式只需要回報的錯誤等級其他的一律忽略。

參數說明:

Value

Constant

Description

Note

1E_ERROR執行時期致命的錯誤
2E_WARNING執行時期錯誤警告
4E_PARSE編譯時的程式剖析錯誤
8E_NOTICE執行時期的提醒
16E_CORE_ERRORPHP 引擎啟動執行時產生的致命錯誤
32E_CORE_WARNINGPHP 引擎啟動執行時產生的警告since PHP 4
64E_COMPILE_ERROR致命的編譯時錯誤since PHP 4
128E_COMPILE_WARNING致命的編譯時警告since PHP 4
256E_USER_ERROR使用者定義的錯誤since PHP 4
512E_USER_WARNING使用者定義的警告since PHP 4
1024E_USER_NOTICE使用者定義的提醒since PHP 4
2048E_STRICT編碼標準化警告(建議如何修改以向前兼容)since PHP 5
4096E_RECOVERABLE_ERROR接近致命的運行時錯誤,若未被捕獲則視同E_ERRORsince PHP 5.2.0
8192E_DEPRECATEDRun-time notices. Enable this to receive warnings about code that will not work in future versions. since PHP 5.3.0
16384E_USER_DEPRECATEDUser-generated warning message. This is like an E_DEPRECATED, except it is generated in PHP code by using the PHP function trigger_error(). since PHP 5.3.0
30719E_ALL所有的錯誤、警告32767 in PHP 6, 30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously




範例:
1/0 會產生一個 WARNING 的錯誤等級,先將程式錯誤等級設為 E_ERROR ,則不會有錯誤訊息出現,因為已經被忽略了。
<?php
error_reporting(E_ERROR);
printf("%d\n", 1/0);

error_reporting(E_WARNING);
printf("%d\n", 1/0);
?>



輸出結果:
0
Warning: Division by zero in /var/www/html/error1.php on line 6
0

參考文件:
http://tw2.php.net/manual/en/errorfunc.constants.php#errorfunc.constants.errorlevels.e-error

PHP 錯誤處理

PHP 程式的錯誤包含兩種類型:
1.程式編譯時發生的錯誤。
2.程式執行時發生的錯誤。
引起錯誤的原因可能是執行環境所導致的錯誤或者是程式中語法、語意或是邏輯的錯誤。

PHP 的錯誤處理可以處理直譯過程的語法、語意錯誤,或執行時的程式錯誤。PHP 4.0版之前即提供錯誤處理的機制,當程式發生錯誤時,可以提供不同的錯誤處理方式。

PHP 錯誤處理的4種等級:
1.Parser Errors:PHP程式碼語法和語意錯誤。
2.Fatal Errors:執行時間嚴重的錯誤,PHP引擎會停止執行程式。
3.Warnings:警告錯誤,PHP引擎會試圖繼續執行程式。
4.Notices:提醒程式碼可能出現的錯誤。

2009年4月3日 星期五

使用 IMAP 伺服器作身份認證

<?php
//使用 IMAP 伺服器作身份認證
$server = 'imap-server';
$port = '143';
$userid = 'userid';
$password = 'password';

//檢查 $server $port 是否可以開啟
$fp = fsockopen ($server, $port, $errno, $errstr, 5);
if(!$fp) die('連線失敗');

//檢查 伺服器連線是否成功
$msg = fgets($fp, 256);
if(strpos($msg,"* OK")!=0) die('IMAP 伺服器連線失敗');

//傳送帳號密碼
fputs($fp, ". login $userid $password\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"* OK")!=0) die('帳號密碼錯誤');
else echo '認證成功';

fputs($fp, ". LOGOUT\r\n");
$msg = fgets($fp,256);

fclose($fp);
?>

2009年4月2日 星期四

使用 POP3 伺服器作身份認證

<?php
//使用 POP3 伺服器作身份認證
$server = 'pop3server';
$port = '110';
$userid = 'userid';
$password = 'password';

//檢查 $server $port 是否可以開啟
$fp = fsockopen ($server, $port, $errno, $errstr, 5);
if(!$fp) die('連線失敗');

//檢查 POP3 伺服器連線是否成功
$msg = fgets($fp, 256);
if(strpos($msg,"+OK")!=0) die('POP3 伺服器連線失敗');

//傳送帳號
fputs($fp, "USER $userid\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"+OK")!=0) die('帳號錯誤');

//傳送密碼
fputs($fp, "PASS $password\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"+OK")!=0) return die('密碼錯誤');
else echo '認證成功';

fputs($fp, "QUIT\r\n");
$msg = fgets($fp,256);

fclose($fp);
?>

參考文件
http://yu-minspace.blogspot.com/2009/04/rfc1939-pop3.html