MySQL 內建提供了一些編碼函式,以下會介紹 ENCODE() 及 DECODE() 的作用及用法:
ENCODE(str,pass_str)
將字串 str 加密,並使用 "pass_str" 作為加密鑰匙,例如:
mysql> select encode("testing string", "mykey");
+ - - - - - - - - - - - - - - - - - +
| encode(”testing string”, “mykey”) |
+ - - - - - - - - - - - - - - - - - +
| �k��y����ۙ�( |
+ - - - - - - - - - - - - - - - - - +
1 row in set (0.00 sec)
DECODE(crypt_str,pass_str)
decode() 的作用就是對 encode() 加密的內容解碼,其中 crypt_str 是經過 encode() 加密的二進字串,而 pass_str 就是解密鑰匙。如果使用的鑰匙與加密時的鑰匙不同,回傳的結果便不會正確,用法如下:
mysql> select decode(encode("testing string", "mykey"), "mykey");
+ - - - - - - - - - - - - - - - - - - - - - - - - - - +
| decode(encode(”testing string”, “mykey”), “mykey”) |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - +
| testing string |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - +
1 row in set (0.01 sec)
在預設的情況下 MySQL 接受所有連線,這個不是指 MySQL 的權限設定,而是 MySQL 有監聽它所使用的埠號。例如用 netstat 檢查會得出這個結果:
# netstat -an | grep 3306
tcp4 0 0 *.3306 *.* LISTEN
以下是在 FreeBSD 設定只接受 localhost 連線的方法:
1. 開啟 /etc/rc.conf
2. 加入 mysql_args:
mysql_enable="YES"
mysql_args="–bind-address=127.0.0.1"
3. 重新啟動 mysql
# /usr/local/etc/rc.d/mysql-server.sh restart
現在可以再用 netstat 檢查一下,可以見到 MySQL 只監聽 127.0.0.1 的 3306 埠號:
# netstat -an | grep 3306
tcp4 0 0 127.0.0.1.3306 *.* LISTEN
在製作 HTML 表單的清單時,可以用 multiple 屬性讓使用者透過 Ctrl 鍵一次過選擇多個選項,例如:
HTML:
-
-
<select name="box" multiple="multiple">
-
-
-
-
</select>
-
</form>
但上面的 HTML 碼所傳送的 value 不能給 PHP 正確讀取,因為當同時選擇多個選項時,PHP 只可以讀取一個 value。要修正可以更改 select 的名稱,例如:
HTML:
-
-
<select name="box[]" multiple="multiple">
-
-
-
-
</select>
-
</form>
當傳送給 PHP 後,使用者所選取的選擇會放到 $_POST['box'] 陣列內。
有些系統用戶並沒有設定密碼,基於安全考慮,最好找出所有空密碼的帳號並暫時禁止登入。在 FreeBSD 可以透過 awk 在檔案 /etc/master.password 找出空密碼帳號,切換到 root 並輸入以下指令:
# awk -F: 'NF > 1 && $1 !~ /^[#+-]/ && $2=="" {print $0}' /etc/master.passwd
以上指令會用 awk 掃瞄 /etc/master.passwd,並以 : 作為分隔字串。並且找出 password 欄位 ($2) 空白的內容。如果系統內有空密碼帳號,便會用以下格式顯示:
username::1099:1099::0:0:User &:/home/username:/bin/bash
當發現有空密碼帳號後,可以用以下指令進行 lock 及 unlock 的動作:
lock user
# pw lock username
unlock user
# pw unlock username
現在網上購物越來越普及,所以對信用卡號碼的檢查也變得重要。要檢查信用卡號碼,一般可以用 LUHN 演算法來實現。現在大部份的主要信用卡也是使用 LUHN 演算法,包括 Visa, Master Card, American Express 及 Discover 等。LUHN 演算法只可以檢查信用卡號碼的合法性,而不會檢查信用卡其他資訊,包括是否過期。使用方法為:
1. 檢查信用卡號碼是否 16 位。
2. 將信用卡號碼切割成 16 個個別數字。
3. 將上面切割得的所有數字,由左至右起計,每逄單數位置的數值乘 2。
4. 將加總後所有結果都切割成個別數字再相加。
5. 將上面求得的總數求出 10 的餘數,如果餘數是 0 便表示信用卡號碼正確,否則便是錯誤。
以下是 PHP 使用 LUHN 演算法檢查信用卡號碼的函式:
PHP:
-
<?php
-
/* luhn_checker(): This is a small PHP function for checking valid *
-
* credit card with LUHN algorithm *
-
* *
-
* Last updated: 26 August 2007 *
-
* This is a free PHP script under GNU GPL version 2.0 or above *
-
* Copyright (C) 2007 Sam Tang *
-
* Feedback/comment/suggestions : http://www.real-blog.com/ */
-
-
function luhn_checker($card_num){
-
// 將非數字的字串移除
-
-
-
$sum = 0;
-
for($i=0; $i<strlen($card_num); $i++){
-
$digit =
substr($card_num,
$i,
1);
-
if(($i % 2) == 0){
-
// 在單數位置的數值乘 2
-
$digit = $digit * 2;
-
}
-
-
if ($digit> 9) $digit = $digit - 9;
-
$sum += $digit;
-
}
-
-
if(($sum %
10) ==
0 &&
strlen($card_num) ==
16){
-
return TRUE;
-
}else{
-
return FALSE;
-
}
-
}
-
-
/* Example
-
if(luhn_checker("1234567812345678")){
-
echo "Correct!";
-
}else{
-
echo "Wrong card number!";
-
}
-
*/
-
?>
檔案下載: luhn_checker
以下是用 PHP 列出目錄內容的方法,當然也可以略為修改以程式碼改為 function 使用:
PHP:
-
<?php
-
// 定義要開啟的目錄
-
$dir = "/var/www/vhosts/dir";
-
-
// 用 opendir() 開啟目錄,開啟失敗終止程式
-
$handle = @
opendir($dir) or
die("Cannot open " .
$dir);
-
-
echo "<b>Files in " .
$dir .
":</b><br/>";
-
-
// 用 readdir 讀取檔案內容
-
-
// 將 "." 及 ".." 排除不顯示
-
if($file != "." && $file != ".."){
-
-
}
-
}
-
-
// 關閉目錄
-
-
?>
買入匯豐後,第一次收到銀行寄來的以股代息意向書,我選擇了全數以股票方式收取股息。股息要在 10 月 4 日才收到,要等到收到股息後才知道換股價。說實在的,現在匯豐的市價真的十分抵買,PE 及 PB 均明顯偏低,以現價計算,明年的股息率最少有 5 厘。
假如想變改當前目錄下所有檔案的副檔名,可以用一個 loop 完成:
for old in *.php5; do mv $old `basename $old .php5`.php; done
上面指令會在當前目錄裡面搜索所有 ".php5" 副檔名的檔案,然後逐一用 mv 變更為 ".php" 副檔名。
MySQL 是十分流行的開源資料庫系統,很多網站也是使用 MySQL 作為後台資料儲存,而 Python 要連接 MySQL 可以使用 MySQL 模組。MySQLdb 模組可以讓 Python 程式連線到 MySQL server, 執行 SQL 語句及擷取資料等。
開始前要確定系統內的 Python 有安裝 MySQLdb 模式,你可以 Python command line interpreter 檢查,在指令模式輸入 python,然後便可以開始檢查:
Python 2.5.1 (r251:54863, May 2 2007, 16:56:35)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named MySQLdb
>>> exit()
如果見以上面的 "ImportError: No module named MySQLdb" 一句,便表示系統沒有安裝,到 MySQLdb 官方網站 下載 MySQLdb,並用以下方法安裝:
$ tar zxvf MySQL-python-1.2.2.tar.gz
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install
安裝好 MySQLdb 後便可以編寫程式碼,以下是簡單的例子:
CODE:
-
#!/usr/bin/python
-
-
# 引入 MySQL 模組
-
import MySQLdb
-
-
# 連接到 MySQL
-
db = MySQLdb.connect(host="localhost", user="db_user", passwd="db_pass", db="db_name")
-
cursor = db.cursor()
-
-
# 執行 SQL 語句
-
cursor.execute("SELECT * FROM db_table")
-
result = cursor.fetchall()
-
-
# 輸出結果
-
for record in result:
-
print record[0]
PHPMailer 是一個功能豐富的函式庫,以下是用 PHPMailer 通過遠端 SMTP 認證發送郵件的例子:
PHP:
-
<?php
-
// 建立 PHPMailer 物件及設定 SMTP 登入資訊
-
require("../phpMailer/class.phpmailer.php");
-
$mail = new PHPMailer();
-
$mail->IsSMTP(); // send via SMTP
-
$mail->Host = "remote.smtp.server"; // SMTP servers
-
$mail->SMTPAuth = true; // turn on SMTP authentication
-
$mail->Username = "me@localhost"; // SMTP username
-
$mail->Password = "123456"; // SMTP password
-
-
$mail->From = "myemail@localhost";
-
$mail->FromName = "My Name";
-
-
// 執行 $mail->AddAddress() 加入收件者,可以多個收件者
-
$mail->AddAddress("to@email.com","Josh Adams");
-
$mail->AddAddress("to2@email.com"); // optional name
-
-
$mail->AddReplyTo("jyu@aemtechnology.com","AEM");
-
-
$mail->WordWrap = 50; // set word wrap
-
-
// 執行 $mail->AddAttachment() 加入附件,可以多個附件
-
$mail->AddAttachment("path_to/file"); // attachment
-
$mail->AddAttachment("path_to_file2", "INF");
-
-
// 電郵內容,以下為發送 HTML 格式的郵件
-
$mail->IsHTML(true); // send as HTML
-
$mail->Subject = "testing email";
-
$mail->Body = "This is the <b>HTML body</b>";
-
$mail->AltBody = "This is the text-only body";
-
-
if(!$mail->Send())
-
{
-
echo "Message was not sent <p>";
-
echo "Mailer Error: " .
$mail->
ErrorInfo;
-
-
}
-
-
echo "Message has been sent";
-
?>
一直我也以為 PHP 沒有支援像 Java 或 C++ 的 threading 的功能,所以不可以寫到 multi-task (多工) 的應用程式。例如當應用程式需要擷取其他網站的內容,應用程式會延遲執行,直至完成擷取遠端的資料為止。原來現在已經可以用 stream_select 及 stream_socket_client 實現 PHP multitasking。
這篇在 developerWorks 的文章介紹了在 PHP 的 multitasking 及 threading:
Develop multitasking applications with PHP V5
昨天的股市真的如坐過山車,我只在收市看見點數跌二百多點,那時以為跌得不多,誰知原來曾跌過 1285 點。無論如何,自己也沒有在這次調整估貨,反而會看看星期一有沒有買貨的機會。我的兩隻千里馬招商銀行 (3968) 及平安保險 (2318) 公佈了中期業績,也交出了理想的成績單,對於有實質盈利支持的股份,在跌市時才也會較有信心。
要用 crontab 自動執行 php 程式,可以這樣做:
方法一
1. 在 php 程式的第一行加入:
#!/usr/local/php/bin/php -q
例如:
PHP:
-
#!/usr/local/php/bin/php -q
-
<?php
-
$foo = 123;
-
?>
請留意,我的 php 是安裝在 /usr/local/php,請根據你的 php 執行檔位置作出修改。
2. 將 php 程式給予可執行權限:
chmod +x testing.php
3. 執行 crontab -e,然後加入以下內容:
00 00 * * * /path/to/testing.php > /dev/null 2>&2
以上語法會在每天的零時零分執行 /path/to/testing.php
方法二
另一個方法是不用在 php 程式的第一行加入 "#!/usr/local/php/bin/php -q",可以省略第一步及第二步,直接執行 crontab -e,並輸入以下內容:
00 00 * * * usr/local/php/bin/php -q /path/to/testing.php > /dev/null 2>&2
這個方法的結果跟方法一的結果相同。
比較過幾間銀行的月供股票計劃後,覺得中銀的計劃最適合自己,星期五登記了計劃,今個月十號開始扣數。
股票選擇了 <2318> 平安保險及 <3968> 招商銀行。媽媽問為何股市升到這麼高點還要供款,這就是月供股票的優點。因為每月固定供款是使用了平均成本法,當股價下調時便買入較多股數;當股價上升便買入較少股數。這樣就無需在乎股價的短線波動,只要供款的股票長線上升就可以了,而且什麼時候開始也沒問題。
個人認為收費十分便宜,每月收取供款額的 0.25%,或者最低 $50 的收費,當中已包括佣金、印花稅、交易徵費及交易處理費。而且供款十分靈活,可以隨時暫停供款及重新開始。這個費用已經比起很多基金的 5% 認購費 + 每年 1% 至 2.5% 的管理費便宜。
現時自己的基金不會斷供,如果中途斷供會被徵收費用,只是往後自己想增加投資儲蓄時,會偏向月供股票的形式。因為我覺得如果連同交易費用一同計算,自己選股取得的回報率不會比基金低,且看看這決定是否正確。
今日恆指最多跌過 975 點,收市跌幅收窄為跌 729 點。可能有些人很怕股市下調,但我已經開始沒什麼感覺,因為自己沒有打算沽貨,所以早前股市創新高也只不過是 "紙上富貴"。而自己心目中的優質股裡面,除了匯豐外,其他也升到一個不合理的水平,如果可以調整一下,反而給予自己買入的機會。至於自己的理財目標,就是 40 歲達致財務自由,即靠股息/利息收入足夠支付自己的生活費。
昨天減持手上的中石油,原因很簡單,股神巴菲特減持對我的心理影響頗大。正因如此,今天剛好有一點資金買貨,將原本沽出中石油的錢以 $63.2 增持了平保。