2006年10月24日 星期二
Timezone
寫了一個簡單的php script,拿來當batch file用,定期把log備份出來,結果備份的log資料缺了一段時間,搞了好幾天才發現,將php的時區沒有設好,導致php程式與os的時區不一致。這有php設定的指令date_timezone_set,或是在設定檔(php.ini)裡的[Date]區設定date.timezone = Asia/Taipei。
SELinux
最近裝VMware Server來玩,上面跑了Fedora,而且裝了apache, php, mysql套件,自己則裝了phpMyAdmin來管理mysql,結果phpMyAdmin連的上本機的mysql,其他的機器的mysql都連不上,直覺上是firewall沒設好,網路及port都是通的,接著一度懷疑是VMware的問題,因為想不到有什麼可疑。後來索性把seclinux disable,結果卻意外連通了。管理LINXU,學問也不少。
Security-Enhanced Linux - Wikipedia
Security-Enhanced Linux - Wikipedia
2006年10月14日 星期六
MySQL的UTF8問題
環境為Apache2 + PHP5 + MySQL5,欲使用UTF8編碼,中文卻顯示???,全是問號,我的心裡也是個大問號。
所有的設定都是UTF8,包括Apache預設字集編碼,MySQL的DB,Table到Field字集編碼,以及PHP也都是用UTF8編碼寫的。後來才發現,原來PHP跟MySQL的連線也有編碼設定,要設成UTF8編碼,這樣PHP才會把這連線當做是UTF8。只要在建立連線後,Query資料表前,加上mysql_query("SET NAMES 'utf8'"); 即可。
以下是我查到的資料,寫的還蠻詳細的.
http://phorum.study-area.org/viewtopic.php?t=36484
------------------------------------------------------------------------------------------------
1. 用 vi /etc/httpd/conf/httpd.conf 設定Apache中的語系為 (記得restart) AddDefaultCharset UTF-8
2. 用 vi /etc/php.ini 設定php中的語系為 (記得restart) default_charset = "utf-8"
3. 用 vi /etc/my.cnf 設定MySQL中的語系為 (記得restart) [mysqld] init_connect='SET NAMES utf8' default-character-set=utf8 [client] default-character-set = utf8
4. 建立資料庫時選擇語系: (記得清除DB Cache) DROP DATABASE IF EXISTS `aa`; CREATE DATABASE `aa` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; USE `aa`;
CREATE TABLE IF NOT EXISTS `aat` ( `id` char(1) NOT NULL default '1', `myStr` varchar(200) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
5. 用UltraEdit(v11.20a版) 轉換所有ANSI格式的php檔案轉化為UTF-8格式: File --> Conversions --> ASCII to UTF-8 (Unicoding Editing) ( 在UltraEdit中按Advanced --> configuration --> File Handling --> Unicode/UTF-8 Detection --> 剔選Auto detect utf-8 files ) 如有需要時,可執行Remove BOM.php. 當用WinXP的Notepad將php檔由ANSI轉為UTF-8時, 因檔頭有BOM,會引起排版問題,故必須移除,執行Remove BOM.php即可自動移除. Remove BOM.php可由以下網址下載: http://www.hoyo.idv.tw/hoyoweb/document/view.php?sid=13&author=hoyo&status=view
6. 在php檔中必須加入: <meta content="text/html; charset=UTF-8" equiv="Content-Type">
7. 在連接DB的檔中必須加入3行mysql_query才ok: $host="localhost"; $DBname="aa"; $user= "root"; $passwd = ""; $link = mysql_connect($host,$user,$passwd) or die ("Fail"); $db = mysql_select_db($DBname, $link) or die ("Fail"); // 要在真正query DB取出資料前,加入以下3行 mysql_query("SET NAMES 'utf8'"); mysql_query("SET CHARACTER_SET_CLIENT=utf8"); mysql_query("SET CHARACTER_SET_RESULTS=utf8"); $sql = "select * from aat where crid='1'"; $rows = mysql_query($sql);
8. 在php檔中, 如有需要須注意: [Optional] 運用htmlentities和htmlspecialchars時,要似如下: $chars = htmlentities($chars,ENT_QUOTES,"UTF-8"); $chars = htmlspecialchars($chars,ENT_QUOTES,"UTF-8"); 並且在顯示前要用 $chars = html_entity_decode($chars,ENT_QUOTES,"UTF8"); 如有用過addslashes()或mysql_real_escape_string()記得用以下: $chars = stripslashes($chars); 如有需要可以用以下function將不同編碼轉換: $chars = iconv('Big5','UTF-8',$chars); //由Big5轉為UTF-8
所有的設定都是UTF8,包括Apache預設字集編碼,MySQL的DB,Table到Field字集編碼,以及PHP也都是用UTF8編碼寫的。後來才發現,原來PHP跟MySQL的連線也有編碼設定,要設成UTF8編碼,這樣PHP才會把這連線當做是UTF8。只要在建立連線後,Query資料表前,加上mysql_query("SET NAMES 'utf8'"); 即可。
以下是我查到的資料,寫的還蠻詳細的.
http://phorum.study-area.org/viewtopic.php?t=36484
------------------------------------------------------------------------------------------------
1. 用 vi /etc/httpd/conf/httpd.conf 設定Apache中的語系為 (記得restart) AddDefaultCharset UTF-8
2. 用 vi /etc/php.ini 設定php中的語系為 (記得restart) default_charset = "utf-8"
3. 用 vi /etc/my.cnf 設定MySQL中的語系為 (記得restart) [mysqld] init_connect='SET NAMES utf8' default-character-set=utf8 [client] default-character-set = utf8
4. 建立資料庫時選擇語系: (記得清除DB Cache) DROP DATABASE IF EXISTS `aa`; CREATE DATABASE `aa` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; USE `aa`;
CREATE TABLE IF NOT EXISTS `aat` ( `id` char(1) NOT NULL default '1', `myStr` varchar(200) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
5. 用UltraEdit(v11.20a版) 轉換所有ANSI格式的php檔案轉化為UTF-8格式: File --> Conversions --> ASCII to UTF-8 (Unicoding Editing) ( 在UltraEdit中按Advanced --> configuration --> File Handling --> Unicode/UTF-8 Detection --> 剔選Auto detect utf-8 files ) 如有需要時,可執行Remove BOM.php. 當用WinXP的Notepad將php檔由ANSI轉為UTF-8時, 因檔頭有BOM,會引起排版問題,故必須移除,執行Remove BOM.php即可自動移除. Remove BOM.php可由以下網址下載: http://www.hoyo.idv.tw/hoyoweb/document/view.php?sid=13&author=hoyo&status=view
6. 在php檔中必須加入: <meta content="text/html; charset=UTF-8" equiv="Content-Type">
7. 在連接DB的檔中必須加入3行mysql_query才ok: $host="localhost"; $DBname="aa"; $user= "root"; $passwd = ""; $link = mysql_connect($host,$user,$passwd) or die ("Fail"); $db = mysql_select_db($DBname, $link) or die ("Fail"); // 要在真正query DB取出資料前,加入以下3行 mysql_query("SET NAMES 'utf8'"); mysql_query("SET CHARACTER_SET_CLIENT=utf8"); mysql_query("SET CHARACTER_SET_RESULTS=utf8"); $sql = "select * from aat where crid='1'"; $rows = mysql_query($sql);
8. 在php檔中, 如有需要須注意: [Optional] 運用htmlentities和htmlspecialchars時,要似如下: $chars = htmlentities($chars,ENT_QUOTES,"UTF-8"); $chars = htmlspecialchars($chars,ENT_QUOTES,"UTF-8"); 並且在顯示前要用 $chars = html_entity_decode($chars,ENT_QUOTES,"UTF8"); 如有用過addslashes()或mysql_real_escape_string()記得用以下: $chars = stripslashes($chars); 如有需要可以用以下function將不同編碼轉換: $chars = iconv('Big5','UTF-8',$chars); //由Big5轉為UTF-8
2006年9月27日 星期三
CAPTCHA
CAPTCHA為Completely Automated Public Turing test to tell Computers and Humans Apart的縮寫,自動的區分電腦和人類的一種想法,此為Carnegie Mellon University所擁有的註冊商標。
http://en.wikipedia.org/wiki/Captcha
最常見的方法為把英文或數字用圖片顯示,此時電腦已經不易辦識,再經過扭曲變形,人類可輕易查看出字母及數字,但電腦辨識極為困難。
http://paul.luminos.nl/documents/show_document.php?d=316
一般常見的圖型辨識,如台鐵網路訂票系統,9月開始增加認證碼的輸入。
當然,道高一尺魔高一丈,這種方法也有人研究如何破解。
http://captcha.megaleecher.net/
http://en.wikipedia.org/wiki/Captcha
最常見的方法為把英文或數字用圖片顯示,此時電腦已經不易辦識,再經過扭曲變形,人類可輕易查看出字母及數字,但電腦辨識極為困難。
http://paul.luminos.nl/documents/show_document.php?d=316
一般常見的圖型辨識,如台鐵網路訂票系統,9月開始增加認證碼的輸入。
當然,道高一尺魔高一丈,這種方法也有人研究如何破解。
http://captcha.megaleecher.net/
Fedora Core 5 DVD 映像檔安裝失敗
今天嘗試安裝Fedora Core 5,抓DVD的ISO映像檔,到輸入密碼後,就出現錯誤訊息,重新開機後就死當,還好不是套件裝到一半的時出問題。
這是從義守大學的FTP站台抓下來的,本打算從交大FTP再下載一次,後沒有DVD映像檔而做罷,改由下載CD映像檔,抱著死馬當活馬醫的心態安裝,沒想到一路順暢,順利安裝完成。不知道是不是交大發現DVD映像檔有問題而不放上讓人下載。
這是從義守大學的FTP站台抓下來的,本打算從交大FTP再下載一次,後沒有DVD映像檔而做罷,改由下載CD映像檔,抱著死馬當活馬醫的心態安裝,沒想到一路順暢,順利安裝完成。不知道是不是交大發現DVD映像檔有問題而不放上讓人下載。
2006年8月13日 星期日
Apache2 & PHP5 & MySQL on Windows
習慣在Unix-Like的OS上裝Apache & PHP & MySQL,現在要裝在Windows環境上,還不太知道怎麼裝。個人覺得PHP的Manual寫的很詳細,查了一下,果然有很清楚的安裝步驟。
1.安裝Apache2,下載.msi進行安裝,設定用預設值。
2.安裝MySQL5,下載Windows Essentials進行安裝,設定用預設值。
3.安裝PHP5
3.1下載.zip的PHP5。
3.2解縮至c:\php。
3.3加入路徑c:\php於環境變數PATH,方便以後管理更新。
3.4複製c:\php\php.ini-recommended至c:\php\php.ini。
3.5修改c:\php\php.ini。
extension_dir = "c:\php\ext"
extension=php_mysql.dll
(註:Installer只有對IIS做configuration,所以設定檔要手動)
3.6加入如下設定於C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf。
LoadModule php5_module "c:/PHP/php5apache2.dll"
AddType application/x-httpd-php .php .phtml
PHPIniDir "c:/php"
3.7重新啟動Apache2及MySQL。
4.大功告成。
PS:因為裝的是Apache2.2.x,所以在步驟3.1,需下載最新的.dll(http://snaps.php.net/win32/php5.2-win32-latest.zip),接著步驟3.6也要改成LoadModule php5_module "c:/PHP/php5apache2_2.dll",不然會起不來。
1.安裝Apache2,下載.msi進行安裝,設定用預設值。
2.安裝MySQL5,下載Windows Essentials進行安裝,設定用預設值。
3.安裝PHP5
3.1下載.zip的PHP5。
3.2解縮至c:\php。
3.3加入路徑c:\php於環境變數PATH,方便以後管理更新。
3.4複製c:\php\php.ini-recommended至c:\php\php.ini。
3.5修改c:\php\php.ini。
extension_dir = "c:\php\ext"
extension=php_mysql.dll
(註:Installer只有對IIS做configuration,所以設定檔要手動)
3.6加入如下設定於C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf。
LoadModule php5_module "c:/PHP/php5apache2.dll"
AddType application/x-httpd-php .php .phtml
PHPIniDir "c:/php"
3.7重新啟動Apache2及MySQL。
4.大功告成。
PS:因為裝的是Apache2.2.x,所以在步驟3.1,需下載最新的.dll(http://snaps.php.net/win32/php5.2-win32-latest.zip),接著步驟3.6也要改成LoadModule php5_module "c:/PHP/php5apache2_2.dll",不然會起不來。
2006年8月8日 星期二
燒錄成ISO檔
ISO檔是通用的格式,但要找到一個免費的燒錄軟體還真的很少,而且是支援CD燒成ISO檔,或是ISO檔燒成CD更是不容易。
左翻右找,繞了一大圈才發現,原來XP就有提供這樣的功能(ISO Recorder V2), 安裝一下,馬上就支援燒錄。因為是額外提供,所以功能不多。
後記:
CDBurnerXP Pro功能完善,常用的燒錄資料片,CD,甚至是DVD都有,但不支援1:1的燒錄,如果是想要把光碟1:1的備份起來的話,還是要用另外的軟體。
左翻右找,繞了一大圈才發現,原來XP就有提供這樣的功能(ISO Recorder V2), 安裝一下,馬上就支援燒錄。因為是額外提供,所以功能不多。
後記:
CDBurnerXP Pro功能完善,常用的燒錄資料片,CD,甚至是DVD都有,但不支援1:1的燒錄,如果是想要把光碟1:1的備份起來的話,還是要用另外的軟體。
2006年7月24日 星期一
Fedora Core 5 & Firefox
更新完Fedora Core 5之後,Firefox竟然開不起來,接下Firefox的按紐後,沒有任何的錯誤訊息,也沒有Log檔可以看。後來,索性把.mozilla的目錄刪掉,就恢愎了正常。可能是舊的設定檔有衝突。
2006年7月21日 星期五
Fedora & Apache & Selinux Problem
所有的環境系統安裝完後,卻發現不能使用!Browser回傳的是403 Forbidden,看log也是403沒錯,可是Apache沒有設定權限的限制,到底是怎麼回事?原來是Selinux的安全設定的關係.
以下Browser的錯誤訊息
Forbidden
You don't have permission to access /plog/wizard.php on this server.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
--------------------------------------------------------------------------------
Apache/2.0.52 (Fedora) Server at 192.168.1.199 Port 80
以下是解決方法
最快的當然是停掉Selinux,安全一點就是用chcon改檔案的屬性,詳如連結:
http://fedora.redhat.com/docs/selinux-faq-fc3/index.html#using-s-c-securitylevel
以下Browser的錯誤訊息
Forbidden
You don't have permission to access /plog/wizard.php on this server.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
--------------------------------------------------------------------------------
Apache/2.0.52 (Fedora) Server at 192.168.1.199 Port 80
以下是解決方法
最快的當然是停掉Selinux,安全一點就是用chcon改檔案的屬性,詳如連結:
http://fedora.redhat.com/docs/selinux-faq-fc3/index.html#using-s-c-securitylevel
2006年2月14日 星期二
Ruby on Rails(RoR)
Ruby是一種物件導向的 interpreted scripting language(如同PHP,Perl),
Rails是一種網站的框架,
Ruby on Rails(RoR)即是在Rails的框架下用Ruby撰寫的網站。
RoR強調的是用簡潔及易用的語言來選寫程式及架構網站。
參考連結
Ruby on Rails將程式設計化繁為簡 - Taiwan CNET
Ruby on Rails - Wikipedia
脫離 Rails 看 Ruby - IBM
Ruby Home Page
Rolling with Ruby on Rails - Oreilly(安裝導覽)
Rails是一種網站的框架,
Ruby on Rails(RoR)即是在Rails的框架下用Ruby撰寫的網站。
RoR強調的是用簡潔及易用的語言來選寫程式及架構網站。
參考連結
Ruby on Rails將程式設計化繁為簡 - Taiwan CNET
Ruby on Rails - Wikipedia
脫離 Rails 看 Ruby - IBM
Ruby Home Page
Rolling with Ruby on Rails - Oreilly(安裝導覽)
2006年1月24日 星期二
BS7799簡介
英國資安規範最著名的即是BS7799,共分為Part1及Part2 ,Part1為原則性的指導手冊,Part2則提供資訊安全管理系統建立、實施及維護的要求,即驗證的基本要求。BS7799以流程管理(Process Approach)為其重要的精神,即PDCA(Plan, Do, Check, Action)的模型來運作,以管理的角度建立一套維護機構單位的資訊安全管理系統。
於2000年正式成為國際標準ISO 17799。因ISO規定每5年改版一次以合乎世界潮流,所以在2005年6月改版定案,如下圖。
來源:TÜV NORD
另一方面,BS7799 Part2緊接著2005年8月改版,預計翌年2006年第一季發行國際標準ISO 24743。2005年Part2的修改的重點有:
資安相關標準有很多,BS7799是位於管理層面,如下圖。
來源:TÜV NORD
相關連結:
BSI台灣分公司-資訊安全管理系統首頁
ISMS International User Group
於2000年正式成為國際標準ISO 17799。因ISO規定每5年改版一次以合乎世界潮流,所以在2005年6月改版定案,如下圖。
來源:TÜV NORD
另一方面,BS7799 Part2緊接著2005年8月改版,預計翌年2006年第一季發行國際標準ISO 24743。2005年Part2的修改的重點有:
- 控制措施由127項改成135項,其中9項刪除,118項保留,並增加17個新的控制項。
- 部份控制措施重新組合,使其關連更符合邏輯性。
- 修改部份控制措施的措詞,使其更貼近現況。
資安相關標準有很多,BS7799是位於管理層面,如下圖。
來源:TÜV NORD
相關連結:
BSI台灣分公司-資訊安全管理系統首頁
ISMS International User Group
2006年1月19日 星期四
大學生如何為加盟Google做準備
厚積薄發,有的放矢
李開復博士給中國計算機系大學生的建議
很多在校的大學同學問我們:「我今年還沒有到畢業班,但我很想知道,如果將來想申請Google中國工程研究院,現在應該如何讓自己做好準備?」下面是Google中國總裁李開復博士和其他一些Google資深的華人工程師給廣大同學的建議。
(1)練內功。不要只花功夫學習各種流行的編程語言和工具,以及一些公司招聘廣告上要求的科目。要把數據結構、算法、數據庫、操作系統原理、計算機體系結構、計算機網絡,離散數學等基礎課程學好。不妨試試Donald Knuth的Art of Computer Programming裡的題目,如果你能夠解決其中的大部分題目,就說明你在算法方面的功力不錯了。
(2)多實戰。通過編程的實戰積累經驗、內化知識。建議大家爭取在大學四年中積累編寫十萬行代碼的經驗。
(3)求實幹。不要輕視任何的實際工作,比如一些看似簡單的編碼或測試。要不懈追求對細節一絲不苟的實幹作風與職業精神。
(4)不放棄數學。數學是思維的體操,數學無處不在。尤其當你對一些「數學密集型」的領域有興趣,例如視頻、圖像處理等等,你需要使它成為你的利器。
(5)培養團隊精神,學會與人合作。
(6)激勵創新意識,不為書本和權威意見所束縛。
(7)有策略地「打工」。在不影響學業的前提下,尋找真正有意義的暑期工作或兼職。去找一個重視技術的公司,在一個好的「老闆」指導下完成真正會被用戶使用的程序。不要急於去一個要你做「頭」而獨擋一面的地方,因為向別人學習,是你的目的。打工和找工作一樣,「不要只看待遇和職銜,要挑一個你能夠學習的環境,一個願意培養員工的企業,一個重視你的專業的公司,最後,要挑一個好老闆。」
李開復博士給中國計算機系大學生的建議
很多在校的大學同學問我們:「我今年還沒有到畢業班,但我很想知道,如果將來想申請Google中國工程研究院,現在應該如何讓自己做好準備?」下面是Google中國總裁李開復博士和其他一些Google資深的華人工程師給廣大同學的建議。
(1)練內功。不要只花功夫學習各種流行的編程語言和工具,以及一些公司招聘廣告上要求的科目。要把數據結構、算法、數據庫、操作系統原理、計算機體系結構、計算機網絡,離散數學等基礎課程學好。不妨試試Donald Knuth的Art of Computer Programming裡的題目,如果你能夠解決其中的大部分題目,就說明你在算法方面的功力不錯了。
(2)多實戰。通過編程的實戰積累經驗、內化知識。建議大家爭取在大學四年中積累編寫十萬行代碼的經驗。
(3)求實幹。不要輕視任何的實際工作,比如一些看似簡單的編碼或測試。要不懈追求對細節一絲不苟的實幹作風與職業精神。
(4)不放棄數學。數學是思維的體操,數學無處不在。尤其當你對一些「數學密集型」的領域有興趣,例如視頻、圖像處理等等,你需要使它成為你的利器。
(5)培養團隊精神,學會與人合作。
(6)激勵創新意識,不為書本和權威意見所束縛。
(7)有策略地「打工」。在不影響學業的前提下,尋找真正有意義的暑期工作或兼職。去找一個重視技術的公司,在一個好的「老闆」指導下完成真正會被用戶使用的程序。不要急於去一個要你做「頭」而獨擋一面的地方,因為向別人學習,是你的目的。打工和找工作一樣,「不要只看待遇和職銜,要挑一個你能夠學習的環境,一個願意培養員工的企業,一個重視你的專業的公司,最後,要挑一個好老闆。」
2006年1月18日 星期三
AJAX
AJAX(Asynchronous JavaScript And XML),並非全新的一項技術, 是一些網站技術的組合,包括HTML, CSS, Javascript, XML等。主要是利用XMLHttpRequest的方法,瀏覽器無需重新整理,以降低伺服器的負擔,減少瀏覽器與伺服器之間的溝通成本。
AJAX目前Google已經大量應用,如Gmail, Google Maps,可見這項技術的重要性。甚至想運用此一技術來發展線上編輯,感覺上像是瀏覽器版的Office。也已經有公司做出一些成果,如Writely.com, gOFFICE.com。
相關連結
AJAX讓桌面網路應用蔚為風潮
Ajax (programming) - From Wikipedia, the free encyclopedia
AJAX - Wikipedia簡體中文版
Mastering Ajax, Part 1: Introduction to Ajax
AJAX目前Google已經大量應用,如Gmail, Google Maps,可見這項技術的重要性。甚至想運用此一技術來發展線上編輯,感覺上像是瀏覽器版的Office。也已經有公司做出一些成果,如Writely.com, gOFFICE.com。
相關連結
AJAX讓桌面網路應用蔚為風潮
Ajax (programming) - From Wikipedia, the free encyclopedia
AJAX - Wikipedia簡體中文版
Mastering Ajax, Part 1: Introduction to Ajax
訂閱:
文章 (Atom)