2008年6月30日 星期一

[Apache]RewriteRule regular expressions

Text:
. Any single character
[chars] Character class: One of chars
[^chars] Character class: None of chars
text1|text2 Alternative: text1 or text2

Quantifiers:
? 0 or 1 of the preceding text
* 0 or N of the preceding text (N > 0)
+ 1 or N of the preceding text (N > 1)

Grouping:
(text) Grouping of text
(either to set the borders of an alternative or
for making backreferences where the Nth group can
be used on the RHS of a RewriteRule with $N)

Anchors:
^ Start of line anchor
$ End of line anchor

Escaping:
\char escape that particular char
(for instance to specify the chars ".[]()" etc.)

2008年6月29日 星期日

[Debug]jQuery Validation Plugins的minLength無法設custom messages

原來minLength要用小寫的minlength

$("#activeVideoForm").validate({
rules: {
owner_mobile: {
required: true,
number: true,
minLength: 5
}
},
messages: {
owner_mobile: {
required: "*請輸入聯絡手機!",
number: "*請輸入正確的手機號碼!",
minLength: "*請輸入正確的手機號碼!"
}
}
});


$("#activeVideoForm").validate({
rules: {
owner_mobile: {
required: true,
number: true,
minlength: 5
}
},
messages: {
owner_mobile: {
required: "*請輸入聯絡手機!",
number: "*請輸入正確的手機號碼!",
minlength: "*請輸入正確的手機號碼!"
}
}
});

2008年6月26日 星期四

[Javascript]pause, wait, sleep 函數function


/*
* This function will not return until (at least)
* the specified number of milliseconds have passed.
* It does a busy-wait loop.
*/
function pause(numberMillis) {
var now = new Date();
var exitTime = now.getTime() + numberMillis;
while (true) {
now = new Date();
if (now.getTime() > exitTime)
return;
}
}

2008年6月23日 星期一

[Javascript]PHP to Javascript Project: php.js

This article is part of the 'Porting PHP to Javascript' Project, which aims to decrease the gap between developing for PHP & Javascript.

A lot of people are familiar with PHP's functions, and though Javascript functions are often quite similar, some functions may be missing or addressed differently. The Javascript implementations should be as compliant with the PHP versions as possible, a good indication is that the PHP function manual could also apply to the Javascript version.

Porting crucial PHP functions to Javascript can be fun & useful. Currently some PHP functions have been added, but readers are encouraged to contribute and improve functions by adding comments. Eventually the goal is to save all the functions in one php.js file and make it publicly available for your coding pleasure.

If you choose to contribute, let me know how you want to be credited in the function's comments. You may also want to subscribe to RSS so you receive updates whenever new functions are posted.

download:php.js

2008年6月20日 星期五

[FreeBSD]PHP PEAR安裝

Setp 1.
安裝 Apache + MySQL + PHP 的基本 web 環境:

#cd /usr/ports/database/mysql50-server # 安裝 MySQL 50
#make install clean

#cd /usr/ports/www/apache20 # 安裝 Apache 20
#make install clean

#cd /usr/ports/lang/php5 # 安裝 PHP5
#make install clean # 我只有選擇下列相關套件一併安裝
[X] CLI Build CLI version
[X] CGI Build CGI version
[X] APACHE Build Apache module
[X] FASTCGI Enable fastcgi support (CGI only)
[X] PATHINFO Enable path-info-check support (CGI only)

#cd /usr/ports/lang/php5-extensions # 安裝 PHP5-Extensions
#make config # 安裝前先手動選擇所需要的延伸套件
[X] CTYPE ctype functions
[X] DOM DOM support
[X] GD GD library support
[X] GETTEXT gettext library support
[X] HASH HASH Message Digest Framework
[X] ICONV iconv support
[X] MYSQL MySQL database support
[X] PCRE Perl Compatible Regular Expression support
[X] PDO PHP Data Objects Interface (PDO)
[X] POSIX POSIX-like functions
[X] SESSION session support
[X] SIMPLEXML simplexml support
[X] SQLITE sqlite support
[X] TOKENIZER tokenizer support
[X] XML XML support
[X] XMLREADER XMLReader support
[X] XMLWRITER XMLWriter support
[X] ZLIB ZLIB support

#make install # 因為 Extensions 有選 GD library 所以必須要選擇加裝 T1LIB 及 TRUETYPE 同時 SQLITE 也必須選擇是否開啟 UTF-8 編碼

Options for php5-gd 5.1.6
[X] T1LIB Include T1lib support
[X] TRUETYPE Enable TrueType string function

Options for php5-sqlite 5.1.6 # PHP 下的精簡型文字資料庫 Text Database
[X] UTF8 Enable UTF-8 support

#vi /etc/rc.conf # 編輯 FreeBSD 的開機設定檔,設定 mysql 及 apache 開機自動啟動

mysql_enable="YES"
apache2_enable="YES"

#vi httpd.conf # 編輯 Apache 的設定檔,加入下列幾行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php

#cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini # 編輯 PHP5 的設定檔將複製 php.ini-dist 到 php.ini

#vi php.ini # 如果必須要相容舊語法可將 Off 改為 On
register_globals = On

#apachectl # 重新啟動 apache

#reboot # 重開機讓 MySQL 啟動

Setp 2.

安裝 PEAR 開發環境及基本套件:
#cd /usr/ports/devel/pear # 安裝 PEAR 套件管理指令 ( 這邊只是 PEAR 的套件管理指令,PEAR 的基本套件要等裝完 lynx 才可加裝 )
#make install clean

#vi /usr/local/etc/php.ini # 將 pear 的絕對路徑加到 php.ini 設定檔中

include_path = ".:/usr/local/share/pear"

#cd /usr/ports/www/lynx # 安裝 lynx
#make install clean

#lynx -source http://go-pear.org | php # 安裝 PEAR 的基本套件

Welcome to go-pear!
Go-pear will install the 'pear' command and all the files needed by
it. This command is your tool for PEAR installation and maintenance.
Go-pear also lets you download and install the PEAR packages bundled
with PHP: MDB2.

If you wish to abort, press Control-C now, or press Enter to continue: 按 Enter

HTTP proxy (http://user:password@proxy.myhost.com:port), or Enter for none:: 按 Enter # ( 我無 proxy 所以跳過 )

Below is a suggested file layout for your new PEAR installation. To
change individual locations, type the number in front of the
directory. Type 'all' to change all of them or simply press Enter to
accept these locations.

1. Installation prefix : /usr/local
2. Binaries directory : $prefix/bin
3. PHP code directory ($php_dir) : $prefix/share/pear
4. Documentation base directory : $php_dir/docs
5. Data base directory : $php_dir/data
6. Tests base directory : $php_dir/tests
7. Temporary files directory : $prefix/temp
1-7, 'all' or Enter to continue: 按 Enter

The following PEAR packages are bundled with PHP: MDB2.

Would you like to install these as well? [Y/n] : y

#apachectl restart # 重新啟動 apache

#pear list # 查看 pear 已安裝的套件版本

Installed packages, channel pear.php.net:
==============================
Package Version State
Archive_Tar 1.3.1 stable
Console_Getopt 1.2 stable
MDB2 2.2.2 stable
PEAR 1.4.11 stable
XML_RPC 1.5.0 stable

Setp 3.

安裝套件並且測試安裝結果:
#chown -Rf www:www /usr/local/share/pear # 修改 pear 套件存放目錄權限
#chown www:www /usr/local/share # 修改 pear 套件目錄權限
#pear install Benchmark # 安裝一個套件來測試看看
pear/Benchmark can optionally use PHP extension "bcmath"
downloading Benchmark-1.2.6.tgz ...
Starting to download Benchmark-1.2.6.tgz (7,915 bytes)

.....done: 7,915 bytes
install ok: channel://pear.php.net/Benchmark-1.2.6

#pear list # 再次查看所有已安裝套件
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.1 stable
Benchmark 1.2.6 stable
Console_Getopt 1.2 stable
MDB2 2.2.2 stable
PEAR 1.4.11 stable
XML_RPC 1.5.0 stable

#cd /usr/local/share/pear/Benchmark # 查看所安裝的套件目錄
# ls -l # Benchmark 下總共有三個套件
total 30
-rw-r--r-- 1 root www 4658 9 14 17:40 Iterate.php
-rw-r--r-- 1 root www 13323 9 14 17:40 Profiler.php
-rw-r--r-- 1 root www 10095 9 14 17:40 Timer.php

#vi Timer.php # 查半 Timer.php 這個套件如何引用 Timer 裡面有說明

#vi /usr/local/www/data-dist/show.php # 寫個 php 的時間計數小程式來測試

require_once 'Benchmark/Timer.php';

$timer = new Benchmark_Timer();

$timer->start();

echo "Hello World!";

$timer->stop();

$totaltime=$timer->timeElapsed();

echo "
This Page Show Time:".$totaltime."Sec";
?>


http://xxx.xxx.xxx.xxx/show.php # 開個瀏覽器看一下 Timer 計時器是否成功

Hello World!
This Page Show Timer:0.000207185745239Sec

#pear install PEAR_Info

#vi /usr/local/www/data-dist/info.php
require_once 'PEAR/Info.php';
$pear_info = new PEAR_info();
$pear_info ->show();
?>

http://xxx.xxx.xxx.xxx/info.php # 開個瀏覽器可看見PEAR 設定檔及所安裝的套件訊息

To Add .

#pear uninstall Benchmark # 解除安裝套件
#pear help # 查看 pear 指令
<<本文引自四位的freebsd學習技術文件>>

[Browser]“取消”和“停止”流覽器事件 stopEvent

這種做法是從Bret Taylor的blog上面抄來的,原文地址在這裡(好像是,不是也別怪我。)。對於避免ajax應用中不同層的事件干擾很有用的。

先說一下“取消(cancel)”和“停止(stop)”的區別:說白了,停止就是當事件發生後,阻止它自動冒泡到父容器內;而取消則是當冒泡發生到父容器之後停止,也就是不在當前元素中回應。天哪,這東西說起來話長了,代碼說話:

function stopEvent(e) {
if (!e) e = window.event;
if (e.stopPropagation) {
e.stopPropagation();
} else {
e.cancelBubble = true;
}
}

var link = document.getElementById("link");
link.onclick = stopEvent;

以上這一段是阻止父容器事件的

function cancelEvent(e) {
if (!e) e = window.event;
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
}

var link = document.getElementById("link");
link.onclick = function(e) {
cancelEvent(e);
stopEvent(e);
}

以上這一段是阻止子元素事件的

例子位址在這裡:demo

2008年6月17日 星期二

[AppServ]安裝PEAR

第三章

▉ 3-1 PEAR套件(Package)的资讯

▓ 套件简介

PEAR最重要的就是拥有许多的程式库可供开发者免费引用,这些程式库会被包裹成套件,而且每个套件中都会放入一个名为package.xml的档案.这 是PEAR团队的规定,这个档案纪錄著程式库的档案架构,版本编号等资料,有了这个档案,程式库压缩后才有资格称为「套件」,也因为有了这个xml档, PEAR所提供的「套件管理指令」就可以很简单地管理程式库,例如:可以用指令来安装套件、刪除套件、观看套件资讯或套件升级等。


另外.关於套件的安全性方面,使用者若发现套件有问题,可以借由论坛加以讨论或回报给开发团队,他们就会快速的进行修正与改版,也因此每个套件都会有版本编号加以区分改版的过程。

详细內容请参閱〈附錄A.PEAR官方网站介绍〉会有收获的。


注意,若大家按照本文章的范例操作时,如发觉结果与我们介绍的内容有所不相同的地方,请不要觉得奇怪,那是因为PEAR套件更新的速度太快所致,我们所介绍的方法与原意是不会变的,只是过程会随套件的更改而变动。

▓ 如何得知套件的相关资讯

想下载套件或了解套件,读者可以进入PEAR官方网站(网址为http://pear.php.net),首页画面如下:





圈选的超连结是放置套件的所在,点选以后就出现如下的画面:





1号圈圈所在较粗黑的字代表套件的类別,例如:第1类叫做认证类(Authentication)。这个类別目前包含8个套件,这些套件都是用来处理登入与登出或身份认证与权限设定等。

2号圈圈所在较小的字代表套件的名称,如:Auth、Auth HTTP等等。大家可点选各套件名称进入观看更详细的套件资讯或下载套件。

至目前为止,PEAR的套件共有35大类,三百多个套件,开发套件的成员共202人,但这些数字都在持续增加中,若大家将来有一天,也想为PEAR社群的一员贡献一己之力,也可申请成为套件的开发人员。


要使用PEAR程式库,需要有以下几个基本步骤:

1.架设好网页伺服器,例如Apache,並安装好PHP与MySOL。

2.必须安装PEAR的一些基本套件,所谓的「基本套件」 就是所有PEAR套件都需要的套件,例如,除错是每一个套件都需要的,所以基本套件中就包含了除错套件,只有先安装除错的套件,其它的套件才可以顺利进行除错。

3.针对开发者的需求,安装特定的套件。例如,安装完基本套件后.若开发者想在网页中加入计算执行时间的功能,就必须用指令安装Benchmark套件,这个套件不是基本套件,必须由开发者自行安装。

4.在PHP程式中引用套件的程式库档。

以下我们来分別介绍,在Windows作业系统与类Unix作业系统下,如何安装与管理PEAR套件。


3-2 在Windows系列作业系统上PEAR的安装与管理

▓ 安装Apache+PHP+MySQL

如果您尚未建置好PHP的执行环境,建议您安装AppServ这套六合一软体,笔者就是使用AppServ来当作windows的伺服器环境。这个软体可以到http://www.appservnetwork.com/官方网站去下载。

▓ PEAR的安装方法

安装好AppServ后,就可以开始在Windows上安装PEAR的基本套件,安装过程可以分为四个步骤。
第1个步骤:进入http://pear.php.net/go-pear网站

请先连上http://pear.php.net/go-pear的网站,画面如下:





接着,将网页中的文字完全复制起来后,打开系统的附属应用程式中的记事本,将刚刚复制好的文字贴上,贴上后将档案储存于C:AppServ\www,也就 是网站根目录的位置,存挡时请注意,存档类型请选所有档案,副挡名需要为php,档名请自行命名,假设我自定存档名为pear.php,如下图:





如果您不想怎么麻烦,也可以用Dreamweaver之类的网页编辑软件,打开一个空白的PHP档,然后将http://go-pear.org复制的文字贴上并存档。


第2个步骤:安装基本套件

打开浏览器,在网址栏输入“http;//127.0.0.1复制go-pear网站档.php”或“http;//localhost/复制go- pear网站档.php”,其中所谓「复制go-pear网站档.php」就是刚刚复制储存复制文字的档案名称,在本范例中为pear.php,所以我输 入“http;//127.0.0.1/pear.php”,即可出现线上安装PEAR的网页,如下图:






第一个画面是欢迎画面,我不多做介绍了。请按NEXT >>,进行下一步的安装步骤,出现如下的画面:






这一页是用来设定PEAR套件的安装位置,最上端有一个HTTP proxy栏位,若安装者需透过proxy才能连上网路,请将proxy的IP与port号填写在此,若沒有使用proxy,此栏位可保持空白。接著有 l0项安装路径的设定,谙特別注意,其中有3个路径必须修改,分別为:

1.第l项的Install prefix,请将预设的c:AppServ﹨www改为c:AppServ﹨php,因
为我希望被安装的PEAR程式库,不要放入www中与根目錄的网页混杂在一起。

2.第9项的Filename of WebFrontend,请将预设值改为c:AppServ﹨www﹨pear﹨index.php。意思是在www中產生一个名为pear的资料夹,资 料夹內的index.php是系统產生的套件管理介面,这个介面后面会提到(为防后面的操作失败,请先在C:AppServ﹨www中建立一个名为 pear的资料夹)。

3.第10项的php.exe path需改为c:AppServ﹨php﹨php.exe,也就是需指定正确的php.exe档的所在位置。

其余的设定都用预设值就可以了,我在这里简单介绍一下其他设定项的意义:

● 第2项的Binaries Direetory,是将第一项的c:AppServ﹨php指定为PEAR的根目錄,並用变数$prefix来代表。

● 第3项的PHP code Directory,就是PEAR套件被安装后档案所放置的位置。本范例PEAR套件被下载后的档案会被安装在c:AppServ﹨php﹨PEAR中。

● 第4项是如果被安装的套件有內附的說明文件,本范例会放在c:AppServ﹨php﹨PEAR﹨docs中。

● 第5项足如果被安装的套件有內附的范例档,本范例会放在c:AppServ﹨php﹨PEAR﹨data中。

● 第6项是如果被安装的套件有內附的测试档.本范例会放在c:AppServ﹨php﹨PEAR﹨test中。

● 第7项是PEAR的cache档放置的位置,本范例会放在c:AppServ﹨php﹨PEAR﹨cache中。

● 第8项是快取(Cache)档的壽命,本范例快取档的壽命是300秒,也就是300秒后会重新快取。

另外,需注意的一点是网页的阅览者须对这些路径具有写入的权限,否则无法安装。

设定项修改完后,按最小方的install按钮,即可进行安装,画面如下:







当最上方的安装进度达到100%时,恭喜您,您已完成了基本套件的安装。根据我使用ADSL下载速度2M的环境下测试,大約2分钟即安装完毕,若大家的网路连線速度不夠快,或在安装到一半时连線中断,请按浏览器上方的重新整理钮或按F5即可重新安装。

安装完毕之后.请大家别先高兴,PEAR共有三百多个套件,目前为止只是安装了PEAR的基本套件而已,並沒有安装所有的套件,基本套件以外的其他套件则等到开发者需要使用时再逐一安装。

大家可能会问:「那其他套件如何安装? 会不会很麻烦?」大家请放心,这並不麻烦,下一个小单元中将会针对套件的安装与管理做详细的介绍。

安装完基本套件后,进入c:Appserv﹨php中将会发现有一个名为PEAR的资料夹,该资料夹即为套件经下载並解压缩后,程式库所放置的路径所在,如下图:





对大家而言,其中的docs与tests这两个资料夹內会有学习PEAR的好东西喔。有些套件会內附使用教学文件,若使用者安装该套件后,教学文件就会放在docs资料夹中。而有些套件则是內附范例程式,使用者安装套件后,范例程式会出现在tests资料夹中o



▓ PEAR套件的管理

安装完基本套件后,当开发者需要使用基本套件以外的其他套件时,会需要安装套件,若不需要某个套件时,就会想要移除套件,若套件版本过於老旧,则需要升级套件,也就是說开发者需要一套PEAR套件的管理系统。

在Windows作业系统下的套件安装与管理可以有两种方式,一种是使用Web的管理介面,另一种足使用「套件指令」。笔者较为推荐后者,因为执行的速度较快,但若您对指令有畏惧感,也可以用第一种来轻松管理套件。

摘自:http://hi.baidu.com/suek/blog/item/a9a6f303a65b92ee09fa9329.html

補充1:
修改C:\AppServ\www\pear\index.php

$pear_user_config = 'C:\Appserv\php\pear.conf';


補充2:
安裝後,在php.ini最後加上以下設定即可使用

[PEAR]
include_path="c:\AppServ\php\PEAR


補充3:
在c:\AppServ\www\pear\下新增.htaccess

AuthUserFile C:/AppServ/www/pear/.htpasswd
AuthType Basic
AuthName "Web-based PEAR Frontend"
Require valid-user


新增user,如果.htpasswd檔不存在
C:\AppServ\Apache2\bin>htpasswd -c C:\appserv\www\pear\.htpasswd username
新增user,如果.htpasswd檔已存在
C:\AppServ\Apache2\bin>htpasswd C:\appserv\www\pear\.htpasswd username


[DEBUG]
Vista+AppServ環境安裝PEAR時,切記安裝前先自行建立C:\AppServ\php\temp資料夾,否則會有權限不足的問題!

2008年6月16日 星期一

架設大型網站

「架設像Pixnet或者是無名這類網站真的要所費不貲麼?
其實不然.
下面的東西,對一些大Site來說是很基本的道理。只是想讓初學者省去摸索跟試誤的時間。
一些架站的Tips..

1. Storage Server
外面一台專業存儲設備或者是NAS等等都價格昂貴,但有多少錢做多少事情,買個幾台一般的主機,買個幾張RAID卡,RAID卡的價錢,當然就關係著品質。建議購買具有RAID 5的功能之RAID卡,stripe 可以加快讀取速度,硬碟越多顆,讀取速度越快。RAID 5允許在有一顆硬碟fail的情況下可以rebuild資料回來。增加資料安全性。

一般建立使用者,會給予其流水號,建議使用流水號來分目錄,比如說Pixnet,有一位使用者的帳號是far,他的uid是12345,我會將他的圖片放置於userpics/4/5/12345裡面,這樣有什麼好處?好處在於可以把使用者平均的分散在不同的目錄,不同的機器上。像pixnet的範例,依成長的比例,從1台~100台都可以自由運用。 (分的越細當然就可以分更多台)。有人會說每個人用量都不一樣,真的能夠平均麼?可以的。人數越多,就越平均.:)。某site用的是使用者名稱的第一個字母,但是英文字首的命名本來就極不平均,所以要load banlance就越困難,加上他只能最多分到26台。
ㄧ般要讓其他機器可以存取圖檔,我們習慣的作法是開NFS,但是我們建議,盡量不要用NFS,問題太多,效能也不好。能用其他方式取代就取代。

2. DB
Pixnet 使用MySQL 5,自MySQL 4.1之後的sub-select是我很愛用的,真的頗好用。DB在編譯的時候,用不到的功能能關就關,my.cnf 其實有很多東西可以調,看你自己最多的query type是什麼,對於memory的分配就很重要。DB重的是memory,所以能大就盡量大。

tune my.cnf只能有部分的效能增進,要使其到極限,還是要去改寫你的mysql query,使用EXPLAIN來看你的query是不是做太多白工。這部份的效能增進是最大的。

打開log slow query,可以讓你知道哪些query最耗時,想辦法改寫他。

打開mysql cache,這樣mysql會有cache的功能,相同的query就不會再去處理一次,而把上ㄧ次同樣的結果丟出來。時間與CPU都省了下來。

安裝mytop可以幫助你了解可能出問題的query在哪裡。

定期OPTIMIZE TABLE。

能讓php做的,就不要讓mysql去做。與其讓mysql去做非自己專們的運算,不如給php做。
對於常常access且static的資料,比如像是熱門相簿等等,不需要每次都重算。你可以每小時做一次統計,並且將結果丟到一個HEAP的 table,這樣對於這種很常大量access的資料,mysql幾乎只是提取資料,而不需要另外做運算。效能上當然是大大增進。

將ㄧ些會很常大量access的資料,且可以經由其他table運算出來的資料,放到另ㄧ個HEAP table,因為HEAP是把table放置到memory,在server重起後,資料會不見。所以適合可以重新運算即可得到,且被大量使用的資料上。

類似像隨機相簿這種,請不要真的把所有的資料放下去隨機,隨著你的site成長越大,這部份的load也就會越大,你只要讓人家感覺是隨機就好了。每個小時從原始資料中random出夠大的SET(比如說1萬份),當使用者要access時,再從這1萬份裡random取出10份即可。randomㄧ萬份是比random一千萬份的時間是少之又少。Server Load也頓減許多。

要做的是功能,某種層度上它是真的隨機,請不要傻傻的全部去給他隨機。
如果機器算多的話,做一下mysql replication,讓master專門做寫入,讓多台slave做讀取,如此可以做到High Available又可以做到備份的功效。效能增進上更是倍數成長。

3. reverse Proxy
Proxy是很重要的,他是擋在file server前面的東西。大家都知道file server最怕的是硬碟壞軌,而過量的IO也確實會讓file Server的壽命減少。Reverse Proxy的功能就在保護File Server的壽命。我在每台file server上面跑thttpd。然後Reverse Proxy再跟file server的HTTP要檔案。thttpd本身有cache的功能,你可以設定expire time,他會cache在memory中,所以實際上可以減少硬碟的I/O,加上Reverse Proxy又再一次的cache,可以做到雙層cache,做到保護硬碟的功效。

4. Web
如果可以的話,讓網站只有很簡單的吞吐,不要有多餘的功能,如果是用APACHE之類的,module load越少越好,htaccess能關儘量關掉。PHP如果可以就跑fastcgi,現在php cache的soft有很多,像是mmcache,APC,eaccelerator等等。它可以將php complie候cache在memory裡,如此,下一次同樣的request就可以少掉這段的耗費。

如果可以弄成static page就最好弄成static page。靜態頁面的吞吐大過於php產生頁面。

5. 程式
程式方面就沒什麼好說了,這多少是看功力。多試多玩,他就是你的了。

還有,做這種東西,很重要的是"Cache!Cache!Cache!!"

很多Optimize的方法Google其實都有,不要怕花太多時間,就算是一點點小tip,有時也是很實用的。


摘自:http://blog.pixnet.net/far/post/17024

2008年6月12日 星期四

輕鬆修改Windows XP Administrator賬號的密碼

Windows XP控制面板中的“用戶賬戶”,可以讓你修改用戶賬戶的密碼,但是卻不能修改Administrator賬戶的密碼,假如你要把Administrator的密碼改為chunke111,可以這樣操作:

依次選擇“開始→運行”,在彈出的“運行”對話方塊中輸入“cmd”命令,打開命令提示符窗口,在這裡,鍵入命令net user Administrator chunke111回車即可。

如果我們需要清除Administrator賬戶密碼,你可以進入Windows XP系統所在的盤符,刪除系統裝設目錄(Windows\system32\config)下的SAM文件,重新啟動電腦後,Administrator賬戶就沒有密碼了。

2008年6月6日 星期五

[教學]解決PHP上傳圖片2M的限制



PS:memory_limit可以設成 ini_set('memory_limit', '-1');

2008年6月1日 星期日

[Debug]CakePHP的Session無法完整寫入到資料庫DB

原來是因為中文編號的問題,
只要是有中文資料的Session,
在寫入到資料庫的過程式,就會寫入失敗,
變成空的資料。

但是就算在app_model.php中加入

function __construct(){
parent::__construct();
$this->execute("SET NAMES 'big5'");
}


還是一樣無法成功寫入到Session
最後改成這樣子,問題才得已解決

class DATABASE_CONFIG {

var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'project_name',
'prefix' => '',
'encoding' => 'utf8'
);

var $test = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'project_name-test',
'prefix' => '',
'encoding' => 'utf8'
);
}

wibiya widget