PHP Extensions Download from PECL

在window環境下,有時候PHP函式需要安裝一些必要的dll,像是php_bcompiler.dll、php_bz2.dll等…
在PECL有個清單已經把常常會使用到的dll檔整理下載點了。真是方便,

dll下載清單:http://pecl4win.php.net/list.php

話說...我還是沒去摸liunx呀,滿殘念的@_@

使用bcompiler將PHP加密

公司最近說要將PHP原始碼加密@_@,我之前壓根都沒想到這事,所以今天花了一整天拜請google大仙,找到有一種使用bcompiler的方法,趴了官方文件後,索性就寫了一個加密的class,或許以會有機會用到。

1
2
3
4
5
6
7
//載入函式
include_once('phpCodeZip.php');
//建立加密物件
$encryption  = new PhoCodeZip('sourceDir','targetDir');
//執行加密
$encryption->zip();
//如此一來,你就可以在targetDir找到經過加密的PHP原始碼


續繼閱讀...

我們曾經都有夢,不是嗎?


Mr.ADULTS

這篇影片是從我朋友那邊看到的,相當不錯的短片,讓人感慨年輕時的夢想,卻隨著年長,一直被個擱置著,最後當回頭一望,才發現自己已經滿臉蒼老。

CI縮圖類別(Image Manipulation Class )的true color


一口一...我用了CI的Image類別,但是上傳後的圖片都失去原始的顏色了!後來記得之前有一本「專業PHP5程式設計指南」有提供縮圖章節,索性就重啃了一遍,其中有一段提到

imagecreatetruecolor函式是被用來產生出一個準備要放置縮圖的空白圖(以PHP變數的型態存在於記憶體當中),注意涵式名稱所暗示的,這個函數將會產生出一個「真實色彩」(true color) (24位元)的圖,而不會像imagecreate那樣,只能取得「以調色盤為基礎」(palette-based) (8位元)的圖。

接著續繼趴CI的User Guide(中)(英)提到Image類別支援使用GD, GD2, ImageMagick, NetPBM的圖型函式庫。我目前設定是GD,所以我猜想會不會GD是舊函式庫,所以沒有imagecreatetruecolor()?但是工作上的同事告訴我他在GD圖型庫的環境中,能正常使用imagecreatetruecolor()

一皿一||||見鬼了!!,害我又不得開啟system\libraries\Image_lib.php進行人工趴碼了@_@,後來發現在第504行類別判斷竟然是這樣的

續繼閱讀...

DataMapper Use Custom PK id to save()

剛又找到DM1.4.5一個不算是bug的錯誤,那就是save()函式無法儲存使用自訂的id,換句話說DM預定強制限定你的id(PK)欄位必需數字並且自動增值(auto_increment),所以沒辦法使用像是UUID來當做識別碼。

1
2
3
4
5
6
7
8
<?php
    //建立User物件(create user ORM)
    $u = new User();
    //使用自訂ID(use custom id)
    $u->id = uuid();
    //無法運作(It' can't working)
    $u->save();
?>

@_@真是的,所以我又開始趴原始碼了,找到判斷什麼時候做update什麼時候做insert動作的那部分。
如何做修改呢?(how to fix?)

續繼閱讀...

CodeIgniter ORM library

最近從小海那邊得知CodeIgniter有ORM的library,馬上就去下載試了一下。從文件來看DataMapper比起IgnitedRecord來得詳細多了,不過我覺得IR的名稱比較帥XD,但是我還是選用了DM了。

DM目前最新的版本是1.4.5,看著文件一步一步試著如何使用,可能之前碰過CakePHP,所以用起來相當的容易上手,一下子就差不多看完了,不過在Automated Timestamps那篇章節所說的效果我卡彈了!

Automated Timestamps的設定,可以讓每次資料有做異動時,自動更新的異動時間欄位,換句話說就是記錄最後修改時間,但是我試了好幾次都沒有成功,後來我自己試著去debug,發現原來在libraries/datamapper.php的428行遺漏了一個動作。


//原始碼片斷(source)
if ($field == $this->updated_field)
{
    // Update updated datetime
    $this->{$field} = $timestamp;
} 

//修正後的程式碼(fixed)
if ($field == $this->updated_field)
{
    // Update updated datetime
    $this->{$field} = $timestamp;
    // Register changed existing
    array_push($this->changed_existing,$field);
}

將 PEAR 放進 CodeIgniter

這個做法是參考此篇「Using Zend Framework with CodeIgniter」修改而來的。

事實上外掛Zend的需要性可能比PEAR還要高,我之所以要外掛PEAR來做是因為CI的分頁類好像有問題@_@,索性就直接使用PEAR的分頁類了,而且PEAR的分頁類還有Jumping和Sliding不同模式可選用,在某些情況下,PEAR的彈性可能比較高。however...看你喜不喜歡多掛一個做同樣事情的library而已。

一、下載PEAR函式庫必要的「PEAR核心檔」即可,然後再下載所需的類別套件,以我為例就是「Pager套件」,最終的資料夾結構大概長這樣


續繼閱讀...

Xdebug


這個東西之前就看到了,不過一直沒去試著安裝他,最近重新看書又提到了,所以真的動手去試試這套。嗯…。口。意外的好用耶(廢話,不然怎麼會那麼有名),所以順便在這邊發表一篇當做記錄。

續繼閱讀...

動態選單 dynamicSelector v0.1

有時候我們必需要動態產生下拉式選單時,用以前的Javascript去寫實在太麻煩了,不過自從有了jquery,一切都簡單多了。所以我自己寫了一個dynamicSelector.js的程式,來方便完成下拉式選單的動作。這次的寫法,每個選單都是用Ajax的方式取得。而且可以套用在多層下拉式選單,只要定義明確都可以運作。

在HTML部分所以,<select>的title屬性定義了三個變數。

  • url:資料來源,此選單是讀取來源網址回傳的json資料
  • parent:父層名稱,表示此選單會依照此父層的改變而一起變動
  • varname:變數名稱,此選單會抓取父層的值,然後配給此變數名稱後,傳給資料來源網址

初始的<option>就等同於預設選項,所以不必再去設定selected="selected",只要確認初始

《LIVE DEMO》

不過比較遺憾的是把屬性定義在title,不過select已沒有其它屬性可以用了@_@!,雖然可以用自訂的屬性,不過這樣子在HTML驗證器就會出現警告了,呃…我好像有點完美主義?!

續繼閱讀...

stringtoarray in utf8

昨天試著要將字串折成陣列,不過在PHP雖然和Javascript都有split(),但是兩個運作的模式卻不一樣

在javascript:


var str = '我是中文字!';
var str_arr = str.split('');
//結果:str_arr = new Array('我','是','中','文','字','!');

在PHP:


$str = '我是中文字!';
$str_arr = split('',$str);
//結果:Warning: split() [function.split]: REG_EMPTY in split.php on line 2

所以在PHP只好自訂折字串為陣列函式,在網路上找到一個function


function stringtoarray($string){
     $len = strlen($string);
     for($cur=0; $cur<$len; $cur++){
         $characterarray[] = $string{$cur};
     }
     return $characterarray;
}
$str = 'abc123';
print_r(stringtoarray($str)); //輸出 array('a','b','c','1','2','3');


續繼閱讀...

←較舊的