php学习小记
时间:2007-03-09 来源:h_jlin
资料来源:internet
整合 PHP 及 Perl
同樣是開源的 Perl 及 PHP 很多時會給人們作比較,而實際上它們各自有自己的優勢及存在價值。Perl 在系統管理及字串處理上較有優勢,而且有十分豐富的函式庫 -- CPAN,很多複雜的功能也可以簡單地完成。
而 PHP 的優勢就是在動態網頁及連接資料庫上面,資料庫的支援上,市面上大部份流行的付費及開源資料庫也支援,這也是近年在網路上 PHP 越來越流行的原因。
如果可以在一個專案上用上兩種語言的長處就很方便。在 PHP 程式內可以透過
PHP::Interpreter
呼叫 CPAN 模組以擴展 PHP 應用,例如 IO ports 操作這類工作也可以在 PHP 內完成。現在需要先安裝
PHP::Interpreter
:
1. 前往
search.cpan.org/dist/PHP-Interpreter
下載 PHP::Interpreter。
2. 執行以下指令安裝:
make
make install
這樣就完成 PHP::Interpreter 的安裝,以下舉出兩個在 PHP 程式內使用 Perl 的簡單例子:
$perl = Perl::getInstance();
$perl->eval(q^
"Executing Perl code in PHP\n";
^);
?>
以上會的第二行會建立 $perl 物件,而第二行會透過 $perl 物件執行 Perl。而以下的 $perl->call() 方法就可以傳入及回傳變數:
$perl = Perl::getInstance();
$upper = $perl->call('ucfirst', 'hello');
?>
上面的第三行是執行 perl 的 ucfirst 函式,並傳入參 "hello"。而 PHP::Interpreter 也可以讓 Perl 執行 PHP 的能力,詳細可以參閱
PHP::Interpreter 使用手冊
。
March 7, 2007 ·
程式設計分享
·
Comments (1)
用 htaccess 強制檔案下載
當 IE 存取類似 avi 或 excel 的檔案時,會自動開啟那些檔案,而不會彈出下載訊息方塊,以下是透過 .htaccess 檔案實現強制檔案下載的方法,例如要強制性下載的檔案為 .avi 及 .mpg 副檔名,可以在 .htaccess 加以以下兩行:
AddType application/octet-stream .avi
AddType application/octet-stream .mpg
而在 HTML 方面,只要像平日一樣造一個連結就可以了:
Download Movie1
February 12, 2007 ·
程式設計分享
·
Comments (1)
PHP 修改 Linux 系統密碼
在前幾篇文章介紹過
PHP 透過 Sudo 執行 root 指令
,對於單行的指令沒有問題,但如果要執行 passwd 修改系統密碼的話便不行了。
要解決可以安裝 super 或 expert,而另一個方法是用非互動的方法修改密碼,但如果主機上有其他用戶可以放置他們的網頁,則不建議使用。以下是具體步驟:
1. 用 root 執行 visudo,加入以下一行:
apache ALL=NOPASSWD:/usr/bin/passwd [A-z]*, !/usr/bin/passwd root
以上後面的部份是禁止透過 sudo 修改 root 的密碼,而基於安全理由,最好將其他較重要的用戶也禁止,例如 root 群組的用戶。
2. 以下是 PHP 的部份,會修改 user 的密碼,而密碼設成 pass:
shell_exec
("/bin/echo 'pass' | /usr/bin/sudo /usr/bin/passwd --stdin user");
?>
設定 PHP mail 的 Return Path
在 PHP 內用 mail() 發出郵件時,如果沒有指定 Return Path,系統便會以預設的電郵地址代替 (例如 me@localhost 這類)。以下是一個常見的錯誤:
$header = "From:My Name";
($to, $subject, $email_body, $header);
?>
以上設定了所發出的郵件的 From 內容,但這是不夠的,只要查看所發出郵件的 header,會發現有一個 Return-Path 顯示系統的預設電郵。因為現時 spam 非常猖獗,很多 email server 會這類 email 檔掉或者標示成 spam,將以上程式碼改成這檔便可以避免這個問題:
$header = "From:My Name\r\n";
$header .= "Reply-To: My Name\r\n";
$header .= "Return-Path: My Name\r\n";
($to, $subject, $email_body, $header);
?>
PHP 透過 Sudo 執行 root 指令
一直以來要用 PHP 以 root 身份執行系統管理工作的問題,就是 PHP 會以 apache 的身份執行,解決方法有安裝 suPHP 或 super 這類工具,但個人認為還是 Sudo 較為安全。首先要安裝 Sudo,據我所知 RHEL, Ubuntu 已經內置,Debian 只要用 apt-get 安裝就可以,以下是 FreeBSD 的安裝方法:
FreeBSD 安裝 Sudo
# cd /usr/ports/security/sudo
# make && make install
當系統有 Sudo 後,基於安全理由,不要直接編輯組態檔 /etc/sudoers,改用 visudo 來做編輯。visudo 為防止多個使用者同時修改,它會先鎖住 /etc/sudoers,並且確保組態檔的文法正確,一旦發現錯誤會拒絕儲存動作。
假如你的 Apache 的執行身份為 apache,而想透過 PHP 重新啟動 DNS server,用 root 輸入指令 visudo,便會用 vi 開啟 /etc/sudoers,在檔案最底加上以下一行:
apache ALL=NOPASSWD:/etc/rc.d/init.d/named
儲存後可以在 PHP 以 root 身份執行 /etc/rc.d/init.d/named,包括開啟、停止及重新啟動:
// 開啟 named
$output =
shell_exec
("/usr/bin/sudo /etc/rc.d/init.d/named start");
echo
$output;
?>
上面的 /usr/bin/sudo 是 sudo 的可執行檔,需要根據自己的安裝目錄進行修改。以上只是個簡單的例子,你可以根據你的需要執行其他管理動作,但如果 web server 是多人共用,那麼在使用 Sudo 時要加倍小心。
學習 Python
首先介紹一下 Python,Python 是一種支援物件導向的高階程式語言,具備簡單易學、可攜性及互動等優點。只有具備有基本的程式設計知識便會很快上手,即使是對於初學者也是十分好的入門語言。
雖然 Python 沒有 C 的執行速度,但 Python 開發速度快,又有很多現成的模組可以用。而且在一些關鍵的地可以借助 Python 的 API 使用 C 或 C++ 的擴展。
HTML5 的新表單功能
HTML 4.0 在 1998 年推出後便一直沒有更新,剛剛在
Opera Developer Community
介紹 HTML5 的表單新功能,在 HTML5 裡面內建了表單驗證功能,以及連表單欄位內需要填 url 或 email 等也可以指定。
雖然以上功能現在也可以做到,但就需要借助 javascript 來做,而 HTML5 就可以用較簡單直接的語法來實現。但對於 web developer 現在的問題是,到底何時 HTML5 也可以成為主流。這個需要待各家瀏覽器廠商對其產品加入 HTML5 的支援,而且要用家升級到新版本,這也要多等一段時間。
測試網站在流動裝置的外觀
現在流動上網越來越流行,而現在的流動上網裝置不一定是 laptop,有可能是 PDA 或手機。如果要開發一個給 PDA 及手機使用的系統,要測試網頁的呈現效果可有幾種方法:
1. 調較視窗大小
只需將瀏覽器的視窗大小縮小成與流動裝置一樣,那就可以測試,Firefox 有一個很好的 Add-on 是
Web Developer
可以較鬆實現。以下是一些流動裝置的大小:
* 176 x 208
* 240 x 160
* 320 x 240
2. 模擬器
可以安裝一些模擬器,而很多流動裝置瀏覽器的廠商也有提供 windows emulators:
*
WinWap Smartphone Emulator
*
OpenWave Browser
*
Nokia Browser Simulator
*
Microsoft Pocket PC Emulators
*
Online Mobile Simulator
*
Online WAP Browser
PHP 的單引號與雙引號的分別
在 PHP 定義字串給變數及印出字串時都要用引號,單引號及雙引號也可以做到,而它們的分別是這樣:
PHP 會解譯雙引號內的變數,而單引號內的則不會,只把單引號內的內容視作字串,包括 "$" 符號,所以如果是單純的字串,那麼執行上單引號會比雙引號較快。
PHP 常用 Class
以下幾個 PHP Class 我經常使用,開發 PHP 系統時十分實用:
Smarty
Smarty 是一套很出名的樣版引擎,樣版引擎可以讓 programmer 將注意力集中在程式功能上,及讓 web designer 只需處理網頁外觀及排版的部份。很多朋友剛接觸 Smarty 會覺得很難,我也不例外,原因是要多學習一套在 Smarty 使用的語法。但實際上那些都是 if, for 等的語法,花點時間適應一下就好了。
JpGraph
用 PHP 配合 GD 畫圖很方便,但當要繪圖一些複雜的圖表,或者做出一些圖片特效也很花時間,而 JpGraph 就提供了一個簡易的介面,只要幾行程式碼就可以畫出很專業的圖表。
PHPMailer
PHPMailer 提供電郵相關的功能,包括發送 HTML email, 遠端 SMTP servers 認証, 發送附件電郵 及 在電郵內插入圖片。有這個 Class 要做以上功能時就十分輕鬆了。
FPDF
要在 PHP 建立 PDF 檔案,可以在系統安裝
PDFlib GmbH
這個 library,但如果不可以在系統安裝軟件及重新編譯 PHP 的話,FPDF 就是最佳的選擇,因為他是用 PHP 寫成,只需上載到 web server 就可以使用,可以插入文件圖片及進行排版,而且還支援中文。
10 個 Web 2.0 API
在 LinuxWorld 看到這篇
Ten Web 2.0 APIs you can really use
,介紹 10 個實用的 Web 2.0 API,可以給開發人員在開發 Web 及 desktop 應用時使用,其中我只用過 Google Maps API 及 Geonames。10 個 API 分別是:
-- Google Maps API
-- Geonames.org
-- OpenID
-- Amazon S3
-- Amazon EC2
-- Atom API
-- OpenSearch
-- Open Media Profile
-- MediaWiki API
-- JS-Kit
相关阅读 更多 +
排行榜 更多 +