上次介紹PaaS (Platform as a Service)模式的AppHarbor - AppHarbor - 新一代雲端開發平台使用心得,它完美支援ASP.NET技術,但可惜就不支援普遍的PHP語言。
所以上網找一找同類型的免費服務,PHP的選擇其實都不算多的,但都有好幾個選擇,其中兩間都有免費的服務,我認為不錯的是 PHP Fog 和 Pagoda Box。
最後選擇了PHP Fog原因是Pagoda Box的MySQL DB只提供免費10MB,而PHP Fog就有20MB,另外Pagoda Box亦有1GB Bandwidth上的限制。
PHP Fog同樣是以GIT去提交檔案,所以故之然同樣有Collaboration和Version Control的優點。
跟上一篇文章一樣,由零開始去教大家如何用這個新一代的雲端開發平台。
我會使用 TortoiseGit 和我熟悉的WordPress 做範例。
2012年8月17日星期五
2012年5月14日星期一
Aptana Studio 3 安裝 PHP xDebug
自從Aptana Studio 3重新加入PHP開發功能後,我幾乎已經完全用它取代了Eclipse PDT。
Aptana Studio 3很多地方都要比PDT或另一免費的PHP IDE - Netbeans強,但到目前為止Aptana唯一失色的地方就是沒有PHP Debugger。
幸好Aptana團隊自3.0版本開始十分積極,差不多一個月有一次更新。預計v3.2.0版本就會支援Zend Debugger 和 xDebug了。
而PHP Debugger亦隨著nightly build公開下載,貼一下安裝攻略。
首先第一樣要做,當然是更新至Nightly Build的Aptana Studio 3,或者有人擔心用Nightly會不穩定,但我親身試用了5個月Nightly Build,沒有任何問題,只是提示更新比較頻密而已。
我自己是用xDebug的,其實設定上比Netbeans或其他商業IDE更要下點功夫,但都跟PDT大同小異。
至於怎樣設置xDebug,可以參考下文 : Configure Eclipse PDT / XDebug for PHP debugging
唯一要注意的是在Debug Configurations中,是否需要使用URL/Auto Generate? 又是否需要Path Mapping?
好像我的情況就要取消Auto Generate URL和自行設定Path Mapping了。
送上一些圖給大家參考一下吧。





Aptana Studio 3很多地方都要比PDT或另一免費的PHP IDE - Netbeans強,但到目前為止Aptana唯一失色的地方就是沒有PHP Debugger。
幸好Aptana團隊自3.0版本開始十分積極,差不多一個月有一次更新。預計v3.2.0版本就會支援Zend Debugger 和 xDebug了。
而PHP Debugger亦隨著nightly build公開下載,貼一下安裝攻略。
首先第一樣要做,當然是更新至Nightly Build的Aptana Studio 3,或者有人擔心用Nightly會不穩定,但我親身試用了5個月Nightly Build,沒有任何問題,只是提示更新比較頻密而已。
安裝
- 前往Preferences,打開Install/Updates,選擇Available Software Sites。
- 按Add,Name位置輸入Aptana Studio Nightly Updates,Location輸入http://preview.appcelerator.com/aptana/studio3/standalone/update/nightly/,緊記要選取CheckBox才算是完成,之後按OK退出Preferences。
- 前往Help,按Check for updates,此時應該會見到3.2.0.xxxx版本了,之後安裝完成,重新開啟Aptana(很重要!)。
- 然後前往Aptana的IssueTracker Sitehttps://jira.appcelerator.org/browse/APSTUD-769,下載Attachments - com.aptana.php.debug.site.zip,把它放到Aptana安裝目錄的plugins資料夾之中。
- 再次前往Preferences,打開Install/Updates,選擇Available Software Sites,按Add,Name位置輸入PHP Debugger,Location按Archive按鈕,選取剛下載回來的com.aptana.php.debug.site.zip,跟之前一樣,要選取CheckBox,然後按OK退出,安裝完成,重新開啟Aptana
- 重新啟動後,可以打開Preferences/Aptana Studio/Editors/PHP,看看有沒有Debug選項,有的話就大功告成。
我自己是用xDebug的,其實設定上比Netbeans或其他商業IDE更要下點功夫,但都跟PDT大同小異。
至於怎樣設置xDebug,可以參考下文 : Configure Eclipse PDT / XDebug for PHP debugging
唯一要注意的是在Debug Configurations中,是否需要使用URL/Auto Generate? 又是否需要Path Mapping?
好像我的情況就要取消Auto Generate URL和自行設定Path Mapping了。
送上一些圖給大家參考一下吧。






2011年11月9日星期三
PHPExcel 效能提升%300方法
公司有一個schedule task是用PHPExcel去export一個Excel 檔案再發送給其他部門,一直困擾很久的問題是效能問題和失效問題。
雖然我已經優化PHP程式本身和在php.ini把最大執行時間和Memory Limit設定成一定數值:
但這只是解決PHP程式有機會死於memory用量過多或execution time過久而已。
最後在宏宏網海中,找到答案。
原來PHPExcel有一項設定"setPreCalculateFormulas()",沽名思義,可以略省計算Cell中的Formula。
以我的情況,我最後會輸出約500 rows x 30 columns的Excel,沒有任何formula的話,把它設定成False,真實測試後,效能的確可以大大提升超過%300。
方法:
雖然我已經優化PHP程式本身和在php.ini把最大執行時間和Memory Limit設定成一定數值:
max_execution_time =3600;
memory_limit = 1024M;
但這只是解決PHP程式有機會死於memory用量過多或execution time過久而已。
最後在宏宏網海中,找到答案。
原來PHPExcel有一項設定"setPreCalculateFormulas()",沽名思義,可以略省計算Cell中的Formula。
以我的情況,我最後會輸出約500 rows x 30 columns的Excel,沒有任何formula的話,把它設定成False,真實測試後,效能的確可以大大提升超過%300。
方法:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->setPreCalculateFormulas(false);
2011年10月10日星期一
Ruby on Rails取代PHP?
每種Dev Language都會有一批死忠者,有部份人總不想與競爭者並存。
在遠古時代,已經有:
"C# Kill VB" ,
"PHP Kill Perl",
"PHP Kill ASP.NET",
"Python kill Java" 等等...多得可以做一串Array...
每次一有這類話題,雙方都會爭議得面紅耳熱,但當中不乏一些論點具參考性,所以我一般看完主文後,文章的Comments才是主菜。
這段時間又有一篇"Ruby on Rails kill PHP" - PHP needs to die. What will replace it?
Java vs Ruby on Rails vs PHP
PHPer當然大反撃喇。
其實我個人認為PHP先不要急推PHP6,最需要變一下的是PHP Logo和官網。
我一直都認為PHP的Logo很80年代感覺的,官網亦欠缺時代感。

在遠古時代,已經有:
"C# Kill VB" ,
"PHP Kill Perl",
"PHP Kill ASP.NET",
"Python kill Java" 等等...多得可以做一串Array...
每次一有這類話題,雙方都會爭議得面紅耳熱,但當中不乏一些論點具參考性,所以我一般看完主文後,文章的Comments才是主菜。
這段時間又有一篇"Ruby on Rails kill PHP" - PHP needs to die. What will replace it?
Java vs Ruby on Rails vs PHP
PHPer當然大反撃喇。
其實我個人認為PHP先不要急推PHP6,最需要變一下的是PHP Logo和官網。
我一直都認為PHP的Logo很80年代感覺的,官網亦欠缺時代感。


2011年7月21日星期四
我的PHP IDE選擇 - PDT 3.0 & Aptana Studio 3
早前寫了一篇文說我對Aptana Studio 3.0.2很失望,是的,直到昨天都是一樣。
但今天Aptana出了新版本3.0.3,就版本號,理應是小更新,但Aptana一個小版號,所Fix的Bug是十分多,看看Release Notes就知道了。
修正了幾個很重要的Bug :
再次抱有希望測試一下,又真的改良很多。
之前軟件內很多奇怪的事都沒有再出現,HTML/CSS/JS/PHP的Code-Assist亦正常很多了。
而Eclipse又在上個月出了3.7版本(Indigo),但PDT的工作進度緩慢下,被Eclipse官方下架了。
但基於好奇心,我依照這裡的方法安裝了Eclipse 3.7 + PDT 3.0 milestones,實行互相比較一下。
HTML方面,Aptana始終都做得比較好,有Browser的兼容性指示。


Javascript & CSS方面
Aptana支援-moz和-webkit的,但PDT的就沒有了。而Javascript方面,兩者其實差不多,但Aptana在解釋部份比較詳細,Aptana又再加分。




PHP方面
PDT 3.0就做得好過Aptana,最主要是Aptana 3.0.3版都是依賴按"ALT+/"去叫出Code-Assist,但官方已預計3.0.4版會改成與PDT一樣。
我沒有做很詳細的比較,只是針對我以前對Aptana的不滿去試用一下。
始終兩者的含Bug量都是能夠嚇死人,可見:
PDT Bug List
Aptana Bug List
所以暫時不用太計較,反正今次沒有的,下一版就可能會有,但我認為除PDT之外,Aptana終於令我有返信心,期待下一版本。
Aptana Studio 3
http://aptana.com/
另有官方Portable版本,在官網上沒有顯示出來的,把以下連結的X轉成版號就可以了。
例如
http://download.aptana.com/studio3/standalone/3.X.X/win/Aptana_Studio_3_Setup_Win_3.X.X.zip
轉成
http://download.aptana.com/studio3/standalone/3.0.3/win/Aptana_Studio_3_Setup_Win_3.0.3.zip
其實我試過很多不同的PHP IDE,商業的也有,如果是好的IDE,我都不介意花錢去買,但很可惜,收費的並不是好過Free的很多。
例如
PHP Designer,軟件本身有很多不必要的文字功能,3rd-party的軟件呼叫項目,Syntax highlight著色又不好。
PHPEdit,只是PHP Code-Assist做得好,但連HTML/JS/CSS的Code-Assist都沒有,雖然介面是最漂亮(用Office 2010 UI),但最慢的又是它。
Kodomo IDE - 是不錯的,但價錢是最貴,免費版本的又不可Debug。
而出名的NetBeans,我覺得是最差的一個,無論介面,功能上都是差。
反而最近一年才冒起的PHP Storm,我就認為是最完美的一個,應有的,都有了。
不是吹牛,這個PHP IDE測試平台,我玩了幾天。
但今天Aptana出了新版本3.0.3,就版本號,理應是小更新,但Aptana一個小版號,所Fix的Bug是十分多,看看Release Notes就知道了。
修正了幾個很重要的Bug :
- PHP content assist for build-in constants and static
- No autocomplete proposals in incomplete HTML tags
- Add support for -webkit- properties in css content assist
- -moz- properties are not inserted correctly in CSS content assist
- PHP content assist for build-in constants and static
- No autocomplete proposals in incomplete HTML tags
- PHP Function Parameter/Argument Hinting
再次抱有希望測試一下,又真的改良很多。
之前軟件內很多奇怪的事都沒有再出現,HTML/CSS/JS/PHP的Code-Assist亦正常很多了。
而Eclipse又在上個月出了3.7版本(Indigo),但PDT的工作進度緩慢下,被Eclipse官方下架了。
但基於好奇心,我依照這裡的方法安裝了Eclipse 3.7 + PDT 3.0 milestones,實行互相比較一下。
HTML方面,Aptana始終都做得比較好,有Browser的兼容性指示。


Javascript & CSS方面
Aptana支援-moz和-webkit的,但PDT的就沒有了。而Javascript方面,兩者其實差不多,但Aptana在解釋部份比較詳細,Aptana又再加分。




PHP方面
PDT 3.0就做得好過Aptana,最主要是Aptana 3.0.3版都是依賴按"ALT+/"去叫出Code-Assist,但官方已預計3.0.4版會改成與PDT一樣。
我沒有做很詳細的比較,只是針對我以前對Aptana的不滿去試用一下。
始終兩者的含Bug量都是能夠嚇死人,可見:
PDT Bug List
Aptana Bug List
所以暫時不用太計較,反正今次沒有的,下一版就可能會有,但我認為除PDT之外,Aptana終於令我有返信心,期待下一版本。
Aptana Studio 3
http://aptana.com/
另有官方Portable版本,在官網上沒有顯示出來的,把以下連結的X轉成版號就可以了。
例如
http://download.aptana.com/studio3/standalone/3.X.X/win/Aptana_Studio_3_Setup_Win_3.X.X.zip
轉成
http://download.aptana.com/studio3/standalone/3.0.3/win/Aptana_Studio_3_Setup_Win_3.0.3.zip
其實我試過很多不同的PHP IDE,商業的也有,如果是好的IDE,我都不介意花錢去買,但很可惜,收費的並不是好過Free的很多。
例如
PHP Designer,軟件本身有很多不必要的文字功能,3rd-party的軟件呼叫項目,Syntax highlight著色又不好。
PHPEdit,只是PHP Code-Assist做得好,但連HTML/JS/CSS的Code-Assist都沒有,雖然介面是最漂亮(用Office 2010 UI),但最慢的又是它。
Kodomo IDE - 是不錯的,但價錢是最貴,免費版本的又不可Debug。
而出名的NetBeans,我覺得是最差的一個,無論介面,功能上都是差。
反而最近一年才冒起的PHP Storm,我就認為是最完美的一個,應有的,都有了。
不是吹牛,這個PHP IDE測試平台,我玩了幾天。

2011年5月9日星期一
令我失望的Aptana Studio 3
在漫長的開發期間,每一個Beta Build都有試用,初時已經覺得問題多多,實在覺得當初不應該再期待。
3.0 Release版出來了,舊有問題依然,主要都是HTML/JS/CSS/PHP的code assist依然古古怪怪。
還是需要依靠手動"ALT+/"顯示出來,即使3.0.2 Nightly Build都一樣。
而Javascript的,document後竟然沒有getElementById()
HTML的,td的inline style中,竟然沒有text-align....玩了10分鐘已經覺得用回Eclipse PDT好過。
其實原本Aptana Studio 1.5版本時實在好好用的,可惜被2.0版本把PHP刪去,主力發展ROR,後期被Appcelerator這間公司收購,3.0版本又把PHP功能放回去,但做到不倫不類。
似乎還是放棄Aptana Studio好了。

3.0 Release版出來了,舊有問題依然,主要都是HTML/JS/CSS/PHP的code assist依然古古怪怪。
還是需要依靠手動"ALT+/"顯示出來,即使3.0.2 Nightly Build都一樣。
而Javascript的,document後竟然沒有getElementById()
HTML的,td的inline style中,竟然沒有text-align....玩了10分鐘已經覺得用回Eclipse PDT好過。
其實原本Aptana Studio 1.5版本時實在好好用的,可惜被2.0版本把PHP刪去,主力發展ROR,後期被Appcelerator這間公司收購,3.0版本又把PHP功能放回去,但做到不倫不類。
似乎還是放棄Aptana Studio好了。


2010年7月16日星期五
PHP for Android Apps
用PHP起Android手機上寫程式....我個人就唔睇好,玩下無妨,真係工作上的話,還是Native語言-Java最好。
而且有PHP基礎,要學Java都唔係咁難o者...
Open Source Android Apps for Developers: PHP for Android
PHPforAndroid.apk HOWTO install and test
而且有PHP基礎,要學Java都唔係咁難o者...
Open Source Android Apps for Developers: PHP for Android
PHPforAndroid.apk HOWTO install and test
2009年10月13日星期二
Aptana PHP Plugin停止開發~轉用PHP Designer 7
今天看到一直用的Aptana慢慢轉向商業化經營了...原本Domain是aptana.com,現在瓜分為.com和aptana.org for community plugins。最可惜的是Aptana已聲明PHP Plug-in停止開發 (見 Aptana PHP Plugin discontinued? ) ,會把現有的module移至Eclipse PDT。但我真的用不慣Eclipse系的IDE,可能我個人太Visual Studio向,用起Eclipse甚至Netbeans都覺得怪怪地。
唯有再看看其他PHP IDE有冇更新,有沒有更新至我要求的HTML + JavaScript Code Completion / PHP Code Hints等等。
我對工作上/興趣上的軟件要求很高,而且Programming的IDE更是我謀生工具,豈能兒戲。
我堅信 "工欲善其事,必先利其器。"的道理,無論軟件介面設計,Right-Click的menu command"就不就手"都有要求。
試過很多,比較出名的PHPEdit , PhpED , Zend Studio , Komodo IDE都試過,依然不稱心,主要都是不如Visual Studio無論HTML,JS,CSS都主面支援。
再試試PHP Designer 7,原來前幾天剛出新版,看ChangeLog見到這幾項,立即試試 :
試用過後,算是不錯,感覺很完整,無論HTML,JS,CSS,PHP的 Code Completion都做得不錯,但依然有半秒到Delay(即使我已set 0ms delay)。
介面都較接近返Visual Studio,不錯不錯。
Screenshots of phpDesigner 7
http://www.mpsoftware.dk/phpdesigner_screenshots.php
唯有再看看其他PHP IDE有冇更新,有沒有更新至我要求的HTML + JavaScript Code Completion / PHP Code Hints等等。
我對工作上/興趣上的軟件要求很高,而且Programming的IDE更是我謀生工具,豈能兒戲。
我堅信 "工欲善其事,必先利其器。"的道理,無論軟件介面設計,Right-Click的menu command"就不就手"都有要求。
試過很多,比較出名的PHPEdit , PhpED , Zend Studio , Komodo IDE都試過,依然不稱心,主要都是不如Visual Studio無論HTML,JS,CSS都主面支援。
再試試PHP Designer 7,原來前幾天剛出新版,看ChangeLog見到這幾項,立即試試 :
New. JavaScript code completion
New. Support for JavaScript Object-oriented programming (OOP)
New. JavaScript code tip with extended information/documentation
New. Support for user-defined JavaScript functions
New. Support for user-defined JavaScript variables
New. Code Explorer for JavaScript
New. Jump to JavaScript declarations
New. Support for the JavaScript framework jQuery
試用過後,算是不錯,感覺很完整,無論HTML,JS,CSS,PHP的 Code Completion都做得不錯,但依然有半秒到Delay(即使我已set 0ms delay)。
介面都較接近返Visual Studio,不錯不錯。
Screenshots of phpDesigner 7
http://www.mpsoftware.dk/phpdesigner_screenshots.php

2009年10月8日星期四
2009年10月7日星期三
PHP Comments Remover & Space Cleaner
一個免費的PHP Comments Remover,去PHP和HTML格式的Comment,另有去空白和內建obfuscator。
我試用過還不錯,用Universal Extractor後便是Portable版。
如果想進一步除去Line Break可以用用這個 PHP Code Cleaner and Indenter
Download PHP Comments Remover
我試用過還不錯,用Universal Extractor後便是Portable版。
如果想進一步除去Line Break可以用用這個 PHP Code Cleaner and Indenter
Download PHP Comments Remover

2009年8月9日星期日
Portable Aptana Studio
Aptana Studio是一個十分好用的IDE,而且PHP Plug-in 比 Eclipse PDT還要好。即使大公司Sun上個月推出的NetBeans 6.7都不及Aptana,我始終還是用不慣Netbeans的介面,而且對HTML / Javascript /CSS的支援實在太弱,所以我寫PHP一直都用Aptana。對於支援HTML / Javascript /CSS方面,如Code Completion / Hints,Aptana甚至做得比Visual Studio 2008更好。

Aptana官方網站雖然有Zip版本Download,不過並不是Portable。
但只需要幾步就可以打造自己的Portable版本了,步驟如下:

Aptana官方網站雖然有Zip版本Download,不過並不是Portable。
但只需要幾步就可以打造自己的Portable版本了,步驟如下:
2009年5月9日星期六
如何設定 SQL Server 2005 Driver for PHP
節錄於 邊做邊學 如何設定 SQL Server 2005 Driver for PHP 執行環境
更多 : http://msdn.microsoft.com/zh-tw/windowsserver/dd794783.aspx
雖然 PHP 提供了 mssql_* 函式,可用來存取 Microsoft SQL Server 資料庫,但實際效果經常不盡理想,尤其對較新版本 SQL Server 的支援常常慢了半拍。這對各自擁有廣大使用族群、且又經常需要以 PHP 存取 SQL Server 的開發人員來說,實在很困擾--直到微軟自己開發 SQL Server 2005 Driver for PHP。
使用 PHP 內建的 mssql_* 函式存取 SQL Server 資料庫常有許多問題,可能是中文變亂碼或不支援某些資料型別,尤其只支援到 SQL Server 6.5 (MSSQL Library 7.0 ),無法善用 SQL Server 2005/2008 的新功能。
為了讓 PHP 環境能有更好的 SQL Server 存取方式,微軟在 2007 年開始發展 SQL Server 2005 Driver for PHP ,這是 PHP 5 的擴充程式(extension ),能讓 PHP 程式讀寫 SQL Server 裡的資料。值得一提的是,微軟不僅公開釋出 SQL Server 2005 Driver for PHP 的二進位檔,也以 Microsoft Publlic License (Ms-PL )釋出 SQL Server 2005 Driver for PHP 原始程式碼。
更多 : http://msdn.microsoft.com/zh-tw/windowsserver/dd794783.aspx
2009年4月17日星期五
Essential PHP Techniques for Web Designer and Developers
睇完呢個網Desizn Tech , 介紹左廿多種PHP的東西是Web Designer和Web Developer都要識的,當然無所謂絕對。但到了今天,Web Application實在五花百門,無論是設計或者程式部份已經比以前複雜很多,要學的東西自然會多。
雖然近期ASP.NET MVC 1.0已推出,Silverlight 3.0又差不多說要Release。但我還是認為,我把時間花在PHP和jQuery會更幫到我工作。而jQuery是我覺得Designer或Developer都要學習的技術。
PHP

自從上年10月開始,工作轉寫PHP後,我好認同PHP是種好Flexible,好岩入門甚至Designer去學的一種語言,除左免費同資源多之外,PHP本身語法實在容易,假如你完全未接觸過Programming,只要你每天花幾小時去學,幾星期內已經學有所成。其實外國很多Web Designer都能寫基本的PHP,即使日後有機會接觸到PHP或者轉職做Programmer時,都不會臨急抱佛腳。其實PHP+MySQL拎資料都只是10行不到的Syntax,何不一試。
jQuery

其實接觸jQuery都是這幾個月的事,看到連Microsoft都支持,而Visual Studio 2008更native support jQuery,用左幾個月,現在差不多9成工作都依賴jQuery。jQuery的Selectors實在太強,配合ASP.NET的GridView或Repeater使用都十分方便。其次就Ajax + Web Service / Page Method都是十分好用。除非必要,如果唔係我都會用jQuery的Ajax多過Microsoft的Ajax。jQuery其中一個好用亦是我最常用之處是Selectors配合eq可以十分輕易取得Dom中的資料,例如一個Grid模式的Table,要取得Table中第幾個TR中第幾TD中的innerHTML,jQuery幾隻字已經做到。在Web Designer方面,jQuery除左本身的effects有很多PlugIn和UI可以使用。幾乎不用什麼Java Script基礎都可以用得很好。在Javascript Framework來說,jQuery是最容易使用,亦是Documentation最齊,Sample最易明白的。
雖然近期ASP.NET MVC 1.0已推出,Silverlight 3.0又差不多說要Release。但我還是認為,我把時間花在PHP和jQuery會更幫到我工作。而jQuery是我覺得Designer或Developer都要學習的技術。
PHP

自從上年10月開始,工作轉寫PHP後,我好認同PHP是種好Flexible,好岩入門甚至Designer去學的一種語言,除左免費同資源多之外,PHP本身語法實在容易,假如你完全未接觸過Programming,只要你每天花幾小時去學,幾星期內已經學有所成。其實外國很多Web Designer都能寫基本的PHP,即使日後有機會接觸到PHP或者轉職做Programmer時,都不會臨急抱佛腳。其實PHP+MySQL拎資料都只是10行不到的Syntax,何不一試。
jQuery

其實接觸jQuery都是這幾個月的事,看到連Microsoft都支持,而Visual Studio 2008更native support jQuery,用左幾個月,現在差不多9成工作都依賴jQuery。jQuery的Selectors實在太強,配合ASP.NET的GridView或Repeater使用都十分方便。其次就Ajax + Web Service / Page Method都是十分好用。除非必要,如果唔係我都會用jQuery的Ajax多過Microsoft的Ajax。jQuery其中一個好用亦是我最常用之處是Selectors配合eq可以十分輕易取得Dom中的資料,例如一個Grid模式的Table,要取得Table中第幾個TR中第幾TD中的innerHTML,jQuery幾隻字已經做到。在Web Designer方面,jQuery除左本身的effects有很多PlugIn和UI可以使用。幾乎不用什麼Java Script基礎都可以用得很好。在Javascript Framework來說,jQuery是最容易使用,亦是Documentation最齊,Sample最易明白的。
2008年11月7日星期五
PHP不是首選的Language
記得10年前左右我學VB6時,很多人說VB6學壞手勢,話學Delphi好,當然呢o的已經係歷史話題。但前排睇左幾篇Blog文,話PHP是次選語言,不會是初學者的首選,我都很同意,亦令我想起"學壞手勢"呢四隻字。
PHP的問題,其實在於太過寬鬆,好似近排我工作上是寫PHP就有很多令我出奇的情況。
疑問1:
第一個Session很正常,只是assign "1"給info_1 ,但第二個Session沒出現Error卻很奇怪,不論是true或false,起沒有主體或不是condition情況下,卻Syntax成立,如果不小心打多一個"="符號,整個程式就已經錯誤。
疑問2:
這段Code看似沒有問題,只是重用變數,但我卻奇怪為什麼PHP不搞好少少,雖然$row只是in-memory的data集合,但不論JSP或ASPX,這類DataReader/Datatable已經是一個物件,不用New而且在沒有關閉的情況下可以重用有點怪怪.(例如.NET datareader都要進行DataReader.Close() ; DataTable只要結構和第一次不同,都要重構一次。
疑問3:
Include/Require無限Loop...這個是人為問題,很多PHP程式都是這樣,鐘意Include library,function,variable,但Include之中再Include,多層Level的引用Class方式,我卻覺得只會一個亂字,雖然很多IDE可以Open Declaration,但係呢種手法我真係不感恭維。而且不同Folder,層層疊疊下真係頭都暈。
C.php有Function C
B.php include C.php 用Function C
但又會有A.php include B.php去Call function C.....
疑問4:
全部都係是Dynamic Type,PHP不用設Data Type,無論你是什麼類型,都可以用於一個Variable上,但這正是"學壞手勢"的根源。為什麼一個看似Int的類型可以和String結合,這是不可能發生在C#上的。
其實還有很多奇怪地方都是出自PHP語法太過flexible,當然有好有唔好,好既就係可以好快咁寫到一個網頁程式,唔好既就係潛移默化了一些錯誤的觀念。
有幾個好網,很值得一睇,更加深入講解點解PHP不是一隻首選Langauge。
PHP ‘Good’ Practices
http://rubayeet.wordpress.com/2008/08/27/php-good-practices/
A simple ‘Gotcha’ in PHP
http://rubayeet.wordpress.com/2008/04/29/a-simple-php-gotcha/
PHP is a good second programming language(but never a first)
http://rubayeet.wordpress.com/2008/05/10/php-is-a-good-second-programming-language/
Is PHP a good first language?
http://codeutopia.net/blog/2008/05/01/is-php-a-good-first-language/
PHP的問題,其實在於太過寬鬆,好似近排我工作上是寫PHP就有很多令我出奇的情況。
疑問1:
<?php $_SESSION['info_1'] = "1"; // assign value $_SESSION['info_2'] == "2"; // compare value ?>
第一個Session很正常,只是assign "1"給info_1 ,但第二個Session沒出現Error卻很奇怪,不論是true或false,起沒有主體或不是condition情況下,卻Syntax成立,如果不小心打多一個"="符號,整個程式就已經錯誤。
疑問2:
<?php $select = "SELECT login_id FROM user"; $rs = mysql_query($select); $row = mysql_fetch_assoc($rs); //data reader pointer 在第一行 echo $row["login_id"]; //output : sam // 100行code後 $select_pwd = "SELECT password FROM user"; $rs_pwd = mysql_query($select_pwd); $row = mysql_fetch_assoc($rs_pwd); //示範:忘記之前已經使用$row echo $row["password "]; //output password string: ASj89qa ?>
這段Code看似沒有問題,只是重用變數,但我卻奇怪為什麼PHP不搞好少少,雖然$row只是in-memory的data集合,但不論JSP或ASPX,這類DataReader/Datatable已經是一個物件,不用New而且在沒有關閉的情況下可以重用有點怪怪.(例如.NET datareader都要進行DataReader.Close() ; DataTable只要結構和第一次不同,都要重構一次。
疑問3:
Include/Require無限Loop...這個是人為問題,很多PHP程式都是這樣,鐘意Include library,function,variable,但Include之中再Include,多層Level的引用Class方式,我卻覺得只會一個亂字,雖然很多IDE可以Open Declaration,但係呢種手法我真係不感恭維。而且不同Folder,層層疊疊下真係頭都暈。
C.php有Function C
B.php include C.php 用Function C
但又會有A.php include B.php去Call function C.....
疑問4:
$varInt = 1; $varString = "2"; echo $varInt.$varString; //Output : 12 (OMFG~)
全部都係是Dynamic Type,PHP不用設Data Type,無論你是什麼類型,都可以用於一個Variable上,但這正是"學壞手勢"的根源。為什麼一個看似Int的類型可以和String結合,這是不可能發生在C#上的。
其實還有很多奇怪地方都是出自PHP語法太過flexible,當然有好有唔好,好既就係可以好快咁寫到一個網頁程式,唔好既就係潛移默化了一些錯誤的觀念。
有幾個好網,很值得一睇,更加深入講解點解PHP不是一隻首選Langauge。
PHP ‘Good’ Practices
http://rubayeet.wordpress.com/2008/08/27/php-good-practices/
A simple ‘Gotcha’ in PHP
http://rubayeet.wordpress.com/2008/04/29/a-simple-php-gotcha/
PHP is a good second programming language(but never a first)
http://rubayeet.wordpress.com/2008/05/10/php-is-a-good-second-programming-language/
Is PHP a good first language?
http://codeutopia.net/blog/2008/05/01/is-php-a-good-first-language/
2008年2月21日星期四
Make PHP + Apache + Linux + MSSQL 2005 Work!
這幾個月都在寫PHP,因為要接上一手的爛攤子,主要都是使用PHP在MSSQL和MySQL之間交換資料。
公司在GoDaddy租了部行Fedora 7的dedicated server,自己絕對是對Fedora零經驗!!
誰不知原來Fedora 7 Default不會跟MSSQL的Extension,即使CentOS 5都是一樣。
公司有一個號稱"十年Programming經驗"的老派Programmer說Fedora Server不可以config 支援PHP 的web伺機器,就算我不太懂Linux都知佢吹水。
若果root access都可以改config,都不能安裝PHP,那我要dedicated server幹什麼?
所以我要做的就是安裝php_mssql的Extension,我原以為好像Windows IIS Server般簡單,以為修改一下php.ini,Reboot Apache 就搞定。
原來在Linux下,要重新compile過PHP...還要在SSH用Shell Command去操作....經過幾日研究,終於辛苦地安裝好,雖然網上都有一些教學,但對於好像我這雖然自稱Windows IIS + ASP.NET老手,但亦是Linux + PHP新手,在console行command line去執行步驟,何其痛苦,未必短時間可以完成,所以我重新打一次過程希望可以幫到其他人,CentOS都適用!
操作環境 : Apache/2.2.6 & Fedora core 7 or CentOS
PHP version : 5.2.4
所需軟件 : PuTTY Download : http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
1. 確認你的Apache和PHP已經可以正常運作後,首先開啟PuTTY,輸入你的Server Host 然後Protocol選擇 SSH,按Open。

2. 然後照PuTTY的指示去登入,需要注意的是:
-在第2和第5行輸入密碼時,PuTTY不會出現星號,你只需照樣用鍵盤輸入密碼後,按Enter即可。
-第4行的su 是切換至root login。
3. 安裝RPMForge
前往 http://dag.wieers.com/rpm/packages/rpmforge-release/找最新的版本,然後輸入:
按Enter,等執行完成後,再輸入:
4. 以yum去install freetds,freetds-devel, php-devel , Development tools (Line By Line去按Enter執行)
5. 用VI Editor去修改php.spec
- 如果找不到放在那裡的話,可以試試輸入updatedb 然後輸入locate php.spec找出位置。
- 如沒有php.spec的話,便下載php source rpm (一般檔案名稱都是以php-做開頭的)http://centos.mirrors.skynet.be/pub/centos/5/os/SRPMS/
安裝完成後,再重覆這個Step直至成功用VI打開php.spec。
6.打開php.spec後,按[i] 進入INSERT Mode,然後在文件後半部份,你應該可以找到一行是以
"CFLAGS="做開頭的並把"-Wno-pointer-sign"這句刪除。
然後試試找尋"%package mysql" 或"%package pdo" ,當找到後,在這一行上方(記住是上方)加入:
然後按一下"Esc"退出Insert Mode
再按一下":"進入command並輸入"wq" 再按Enter。(wq = write & quit)
Step 7 :
重建php rpm
輸入
請保持冷靜,在這時,極大機會會出現xxxx-devel Missing Dependency等error訊息。
如果是的話,可以輸入yum install xxx-devel 一個一個地去install。
把所有Dependency搞好後,切換至extension目錄:
輸入以下去建立mssql module :
Step 8:
就如Windows Server時一樣,修改php.ini。
和之前一樣,輸入"vi /etc/php.ini" 打開php.ini , 按[i] , 把"extension=mssql.so" 放進php.ini 的extension / module部份中,按[Esc],按":",按"wq"再Enter。
最後一刻就是要reboot apache server,輸入
Step 9:
還要再做多一點點功夫,就是修改freetds.conf 檔案,不知是否Window和Linux不同關係,我在這一步之前,搞了幾天都不能連接MSSQL =_="!!!
在Windows Server,我可以填進server,username,password至mssql_connect連接至SQL Server 2005 如
$db=mssql_connect('210.168.xxx.xxx:1234','usr','pwd');
但Linux Server就不可以,其實我都不肯定技術上是否真的不能,但我看過很多文章,理解為PHP是經FreeTDS連接至MSSQL,所以freetds.conf 必須有其設置。
首先,MSSQL Server 2005 或Express版都不可以用Default Port, 你需要設定Dynamic Port。在
Start Menu 的SQL Server Configuration Manager -> SQL Express Protocols -> TCP/IP properties -> IP Adresses -> IPAll -> Dynamic Port
輸入你的Port,如2468 etc. 謹記在你Server的Firewall 打開port 2468 和 把TCP/IP和NamePipes都設成Enable!
那麼最後一步就是用vi editor打開freetds.conf 修改,這次簡單得多,開啟後,加入:
最後的一步,測試!
成功!
PS: 打了很多字,很累,有任何問題,歡迎留言,我會看的!
公司在GoDaddy租了部行Fedora 7的dedicated server,自己絕對是對Fedora零經驗!!
誰不知原來Fedora 7 Default不會跟MSSQL的Extension,即使CentOS 5都是一樣。
公司有一個號稱"十年Programming經驗"的老派Programmer說Fedora Server不可以config 支援PHP 的web伺機器,就算我不太懂Linux都知佢吹水。
若果root access都可以改config,都不能安裝PHP,那我要dedicated server幹什麼?
所以我要做的就是安裝php_mssql的Extension,我原以為好像Windows IIS Server般簡單,以為修改一下php.ini,Reboot Apache 就搞定。
原來在Linux下,要重新compile過PHP...還要在SSH用Shell Command去操作....經過幾日研究,終於辛苦地安裝好,雖然網上都有一些教學,但對於好像我這雖然自稱Windows IIS + ASP.NET老手,但亦是Linux + PHP新手,在console行command line去執行步驟,何其痛苦,未必短時間可以完成,所以我重新打一次過程希望可以幫到其他人,CentOS都適用!
操作環境 : Apache/2.2.6 & Fedora core 7 or CentOS
PHP version : 5.2.4
所需軟件 : PuTTY Download : http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
1. 確認你的Apache和PHP已經可以正常運作後,首先開啟PuTTY,輸入你的Server Host 然後Protocol選擇 SSH,按Open。

2. 然後照PuTTY的指示去登入,需要注意的是:
-在第2和第5行輸入密碼時,PuTTY不會出現星號,你只需照樣用鍵盤輸入密碼後,按Enter即可。
-第4行的su 是切換至root login。
login as: ming ming@202.19.110.29's password: Last login: Wed Feb 13 20:38:31 2008 from 210.119.205.57 [ming@ip-202-19-110-29 ~]$ su Password: [root@ip-202-19-110-29 ming]#
3. 安裝RPMForge
前往 http://dag.wieers.com/rpm/packages/rpmforge-release/找最新的版本,然後輸入:
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.fc3.rf.i386.rpm
按Enter,等執行完成後,再輸入:
rpm --install rpmforge-release-0.3.6-1.fc3.rf.i386.rpm
4. 以yum去install freetds,freetds-devel, php-devel , Development tools (Line By Line去按Enter執行)
yum groupinstall 'Development Tools' yum install freetds freetds-devel –enablerepo=rpmforge yum install php-devel
5. 用VI Editor去修改php.spec
vi /usr/src/redhat/SPECS/php.spec
- 如果找不到放在那裡的話,可以試試輸入updatedb 然後輸入locate php.spec找出位置。
- 如沒有php.spec的話,便下載php source rpm (一般檔案名稱都是以php-做開頭的)http://centos.mirrors.skynet.be/pub/centos/5/os/SRPMS/
wget http://centos.mirrors.skynet.be/pub/centos/5/os/SRPMS/php-5.1.6-15.el5.src.rpm rpm --install php-5.1.6-15.el5.src.rpm
安裝完成後,再重覆這個Step直至成功用VI打開php.spec。
6.打開php.spec後,按[i] 進入INSERT Mode,然後在文件後半部份,你應該可以找到一行是以
"CFLAGS="做開頭的並把"-Wno-pointer-sign"這句刪除。
然後試試找尋"%package mysql" 或"%package pdo" ,當找到後,在這一行上方(記住是上方)加入:
%package mssql Group: Development/Languages Requires: php = %{version}-%{release}, php-pdo Summary: A module for PHP applications that use the MSSQL database. provides: php_database BuildRequires: freetds-devel%description mssql The MSSQL package contains a dynamic shared object that will add support for accessing MSSQL databases to php.
然後按一下"Esc"退出Insert Mode
再按一下":"進入command並輸入"wq" 再按Enter。(wq = write & quit)
Step 7 :
重建php rpm
輸入
rpmbuild -bb /usr/src/redhat/SPECS/php.spec
請保持冷靜,在這時,極大機會會出現xxxx-devel Missing Dependency等error訊息。
如果是的話,可以輸入yum install xxx-devel 一個一個地去install。
把所有Dependency搞好後,切換至extension目錄:
cd /usr/src/redhat/BUILD/php-5.1.6/ext/mssql/
輸入以下去建立mssql module :
phpize ./configure –with-mssql make make install
Step 8:
就如Windows Server時一樣,修改php.ini。
和之前一樣,輸入"vi /etc/php.ini" 打開php.ini , 按[i] , 把"extension=mssql.so" 放進php.ini 的extension / module部份中,按[Esc],按":",按"wq"再Enter。
最後一刻就是要reboot apache server,輸入
"/etc/init.d/httpd restart"這時在phpinfo() 應該已經可以看到MSSQL了。
Step 9:
還要再做多一點點功夫,就是修改freetds.conf 檔案,不知是否Window和Linux不同關係,我在這一步之前,搞了幾天都不能連接MSSQL =_="!!!
在Windows Server,我可以填進server,username,password至mssql_connect連接至SQL Server 2005 如
$db=mssql_connect('210.168.xxx.xxx:1234','usr','pwd');
但Linux Server就不可以,其實我都不肯定技術上是否真的不能,但我看過很多文章,理解為PHP是經FreeTDS連接至MSSQL,所以freetds.conf 必須有其設置。
首先,MSSQL Server 2005 或Express版都不可以用Default Port, 你需要設定Dynamic Port。在
Start Menu 的SQL Server Configuration Manager -> SQL Express Protocols -> TCP/IP properties -> IP Adresses -> IPAll -> Dynamic Port
輸入你的Port,如2468 etc. 謹記在你Server的Firewall 打開port 2468 和 把TCP/IP和NamePipes都設成Enable!
那麼最後一步就是用vi editor打開freetds.conf 修改,這次簡單得多,開啟後,加入:
[sqlserver2005] host = 210.168.xxx.xxx port = 2468 tds version = 8.0然後照之前般儲存離開。要注意的是,不要把instance加入,如210.168.xxx.xxx/SQLEXPRESS , 直接輸入210.168.xxx.xxx就可以,因為要經Namepipes去存取instance.
最後的一步,測試!
$db=mssql_connect('sqlserver2005','usrxxxx','pwdxxxx');
成功!
PS: 打了很多字,很累,有任何問題,歡迎留言,我會看的!
2008年2月2日星期六
PHP 連接不到MSSQL Server 2005解決方法
這段時間的工作都是要寫PHP,我選擇了用NetBeans + PHP Plugin還不錯。而且或者我之前寫C# + ASP.NET關係,轉寫PHP其實沒有太大難度。
我需要做的程序很簡單,就是連接MSSQL Server把資料Sync (都是Insert而已)至另一個MySQL資料庫,但無論怎樣設定,PHP都不能連接MSSQL,並出現Error Message :
最後上網找找,看到有人說是因為ntwdblib.dll版本問題,但我的電腦已經安裝
PHP 5.2 / SQL Server 2005 Express SP2 / VS 2003 / 2005 / 2008
照計系統元件都不太可能是舊版本,深信是其他問題...
但最後差不多放棄時,就檢查一下電腦中的ntwdblib.dll,的確是舊版本7.00.xxx (汗...)
需要的是8.00.xxx , 那我下載新版本8.00.xxx取代所有的,一切就正常了~

Download ntwdblib.dll Version:8.00.194
http://es.dll-download-system.com/docman/n-dlls-not-system-/ntwdblib.dll/details-2.html
我需要做的程序很簡單,就是連接MSSQL Server把資料Sync (都是Insert而已)至另一個MySQL資料庫,但無論怎樣設定,PHP都不能連接MSSQL,並出現Error Message :
Warning: mssql_connect(): Unable to connect to server即使我100%肯定已開啟PHP Extension,MSSQL的Dynamic Port都打開了,什麼防火牆等等都檢查一翻,還是一樣。
最後上網找找,看到有人說是因為ntwdblib.dll版本問題,但我的電腦已經安裝
PHP 5.2 / SQL Server 2005 Express SP2 / VS 2003 / 2005 / 2008
照計系統元件都不太可能是舊版本,深信是其他問題...
但最後差不多放棄時,就檢查一下電腦中的ntwdblib.dll,的確是舊版本7.00.xxx (汗...)
需要的是8.00.xxx , 那我下載新版本8.00.xxx取代所有的,一切就正常了~

Download ntwdblib.dll Version:8.00.194
http://es.dll-download-system.com/docman/n-dlls-not-system-/ntwdblib.dll/details-2.html
2008年1月15日星期二
Top 60 PHP IDE & Editor List
近期工作上要接手一個PHP Project,老實說,我對PHP全無興趣....PHP可以做的,我ASP.NET都可以做,
而我愛C# / VB語言多過PHP...
真是要學多一種語言,我會選擇近似C#的Java都未到PHP...
不過冇辦法,始終都是工作~
上網狂找商業或免費的PHP IDE軟件,最後試用了很多,我的要求只是想好像Visual Studio 般有Syntax Suggestion,其他都不太重要~
最後我在Eclipse PDT 和NetBeans 6.0 + PHP Plugin中選擇,因為我覺得這兩個比很多商業的更好,而且兩者都是Java高位的IDE,掌握工具後,或者日後真的學習Java都有幫助,不過兩者中最後都是選擇NetBeams 6.0 + PHP Plugin,整個集成環境最近似Visual Studio。
很適合新手,而以下就是我找到的PHP IDE,大家可以自己試試。
這4個我覺得免費又不錯的~
Eclipse PDT
http://www.eclipse.org/pdt/
NetBeans 6.0 IDE PHP Plugin
http://php.netbeans.org/
Aptana Studio 1.0
http://www.aptana.com/
PHP Development Studio v2.0
http://www.joomlatwork.com/products/free_products_for_joomla/php_development_studio_2.0.html
以下是轉貼自php-editors.com
而我愛C# / VB語言多過PHP...
真是要學多一種語言,我會選擇近似C#的Java都未到PHP...
不過冇辦法,始終都是工作~
上網狂找商業或免費的PHP IDE軟件,最後試用了很多,我的要求只是想好像Visual Studio 般有Syntax Suggestion,其他都不太重要~
最後我在Eclipse PDT 和NetBeans 6.0 + PHP Plugin中選擇,因為我覺得這兩個比很多商業的更好,而且兩者都是Java高位的IDE,掌握工具後,或者日後真的學習Java都有幫助,不過兩者中最後都是選擇NetBeams 6.0 + PHP Plugin,整個集成環境最近似Visual Studio。
很適合新手,而以下就是我找到的PHP IDE,大家可以自己試試。
這4個我覺得免費又不錯的~
Eclipse PDT
http://www.eclipse.org/pdt/
NetBeans 6.0 IDE PHP Plugin
http://php.netbeans.org/
Aptana Studio 1.0
http://www.aptana.com/
PHP Development Studio v2.0
http://www.joomlatwork.com/products/free_products_for_joomla/php_development_studio_2.0.html
以下是轉貼自php-editors.com
Editor Name | Version | License | Platform/OS | Rating |
5.0 | Commercial | Windows Linux | 5/5 | |
2.10 | Commercial | Windows | 5/5 | |
3.0.6 | Commercial Other | Windows | 5/5 | |
3.5 | Commercial Other | Windows Unix Linux Other | 5/5 | |
2.6 | Commercial | Windows Linux Mac | 5/5 | |
1.0 | Other | Unix Linux Mac | 5/5 | |
21 | Freeware | Windows Unix Linux Mac Other | 5/5 | |
1.4 | Commercial Other | Windows | 5/5 | |
8 | Commercial | Windows Mac Other | 5/5 | |
2005 | Commercial Other | Windows | 5/5 | |
1.3.X | Commercial | Windows | 4/5 | |
1.1.0 | Freeware | Windows | 4/5 | |
3 | Shareware Commercial | Windows | 4/5 | |
1.06a | Freeware | Unix Linux | 4/5 | |
0.3.4 | Freeware | Windows Unix Linux Other | 4/5 | |
1.53 | Freeware | Windows Unix Linux Other | 4/5 | |
Beta 3 | Commercial Other | Windows | 4/5 | |
5.5 | Commercial | Windows | 4/5 | |
2.2 | Freeware | Linux | 4/5 | |
4.7.2 | Freeware Commercial | Windows | 4/5 | |
1.0 | Shareware Commercial | Windows | 4/5 | |
292 | Freeware Commercial | Windows | 4/5 | |
6.1 | Freeware | Windows Unix Linux | 4/5 | |
2.5 | Shareware Commercial | Windows | 4/5 | |
1.4 | Shareware Commercial | Windows | 4/5 | |
1.0.1 | Freeware | Unix Linux | 4/5 | |
2.11 SR-2 | Shareware Commercial | Windows | 4/5 | |
3.2.1 | Freeware | Linux | 4/5 | |
5 | Commercial | Windows Unix Linux Mac Other | 4/5 | |
2.2 | Shareware Commercial | Windows | 4/5 | |
0.1 | Freeware | Windows Unix Linux Mac | 3/5 | |
0.4 | Freeware | Windows Unix Linux | 3/5 | |
4.0 | Freeware Shareware | Windows | 3/5 | |
0.97.4 | Freeware | Windows | 3/5 | |
1.1.1 | Commercial | Windows Unix Linux | 3/5 | |
1.0.0. | Freeware | Windows Unix Linux Mac | 3/5 | |
3.2 | Shareware Commercial | Windows | 3/5 | |
0.9 | Commercial | Windows Unix Linux Mac Other | 3/5 | |
1.0.1 | Freeware | Mac | 3/5 | |
3.1 | Freeware | Windows | 3/5 | |
4.0 | Freeware | Windows | 3/5 | |
2 | Freeware Other | Windows | 3/5 | |
7.0 | Commercial | Mac | 3/5 | |
6.1 | Freeware | Mac | 3/5 | |
3.17.7 | 3/5 | |||
5.3 | Freeware | Unix Linux | 3/5 | |
4.3.0 | Freeware | Windows | 3/5 | |
3 | Freeware | Windows | 3/5 | |
5 | Shareware Commercial | Windows | 3/5 | |
v1.19.6 | Shareware Commercial | Windows | 3/5 | |
4.1 | Freeware | Windows Unix Linux Mac Other | 3/5 | |
1.1.5 | Freeware | Mac | 3/5 | |
2004 | Shareware | Windows | 3/5 | |
3.0 | Freeware | Windows | 3/5 | |
3.60 | Freeware | Windows | 3/5 | |
1.2 | Shareware | Windows | 3/5 | |
2 | Freeware | Windows | 2/5 | |
1.0.1 | Freeware | Windows | 2/5 |
訂閱:
文章 (Atom)