- Apache
- 直接 apt-get install apache2
- 設定檔在 /etc/apache2/底下, 其中預設值為 apache2.conf, 其中會呼叫使用者自訂的 httpd.conf(可觀察 apache2.conf內容)
- 預設網頁內容放在 /var/www
- 驗證: 網址打入 localhost
- PHP
- apt-get install php5
- 設定檔在 /etc/php5/apache/php.ini
- 在 /var/www下建立一個附檔名為php的檔案, 內容為 <?php phpinfo();?>, 在 localhost/檔名.php檢視是否正確設定
- MySQL
- apt-get install mysql-server mysql-client phpmyadmin
- 第三項過程中會有設定密碼的地方, 請自行注意, 其中, mysql密碼可以不用和 host的 administrator密碼相同
- 注意: 若安裝完看不到 phpmyadmin, 則在 /etc/apache2/apache2.conf最後面加上 Include /etc/phpmyadmin/apache.conf即可
- Ref:
2012年10月6日 星期六
[Ubuntu] 架設 AMP-Apache MySQL 與 PHP
2012年9月21日 星期五
[PHP] primitive data structure--array
- 皆為 key-value pair, 預設 key仍為 0, 1, ...
- 可以用字串作為 key
- 利用 => assign key-value pair, e.g. $array= array("first"=>1, "second"=>2, "third"=>3);
- 利用 unset移除元素, 移除後 key(index)不變, e.g.本來是 [0]=> "iii", [1]=>"jjj", [2]=>"kkk", [3]=> "fff"經過 unset($array[2]) 會變成 [0]=> "iii", [1]=>"jjj", [3]=> "fff"
- 刪除整個陣列, unset($array)即可
- array中 index的順序與加入的順序有關. 先加 [1], [3], [5]再加[2], [4], [6], 則陣列中的順序即為 [1], [3], [5], [2], [4], [6](想成全部都是 key, not index就很好理解了)
- array中各元素可以是不同 type
- 可以用 array建立多維槽狀 array
- 常用 API
- bool in_array()
- array explode(string separator, string subject): 用 separator將 string 變成 array
- string implode(string glue, array pieces): 用 glue將 array中每個元素以 glue隔開形成一個 string
[PHP] PHP的類別與物件
- 宣告方式
- 關鍵字為 class, 尾端不用分號
- member data需加關鍵字 var, e.g. var $unit = 0;
- member function需加關鍵字 function, e.g. function add(){}
- function 不用寫 return type
- 建立物件
- 以 new建立, 但不需 (), e.g. $bottle = new UnitCounter; // UnitCounter為 class, 建立好 instance後, assign給 $bottle變數
- 存取物件
- class name沒有大小寫之分
- 以 -> 存取 member data與 member function, e.g. $bottle->unit, $bottle->add()其中 $unit為 class UnitCounter的 member data, 而 add()為其 member function
- member function中以 $this->unit, $this->add()呼叫其 member data or function
- 建構與解構
- 建構式為 function __construct() 或與 class同名的 function, 不過一般建議使用 __construct()以便於搬移類別 (P.S. 此為 PHP 5之後才支援的功能), 另外, __construct()可帶參數建構成員變數.
- 解構式為 function __destruct(), 不可帶參數. 通常用於關閉資料庫的連結. 另外, 有時候很好用, 例如: 擁有 static 變數為 static $nObj; 其在 construct就呼叫其 +1, 而 destruct則 -1, 則可以輕鬆維護該類所有 object個數
- 利用 unset()可摧毀物件
- 存取設定
- 預設皆為 public
- private:
- 於變數或 function前加 private, 不能用 private: 來一次宣告一堆 private變數
- 同時也支援 protected
- static:
- 與 C++相同, 同一類別共享 static變數.
- static function只能呼叫 static變數, 當然也不能呼叫 $this, 因為其並沒有建立物件
- static變數以類別參照方式呼叫, e.g. class Donation 擁有 static member $num, 則 member function 以 Donation::$num而非 $this->num來存取.
- 複製物件
- 建立新物件後, PHP 5回傳的是物件參照, 而不是物件本身(copy). 從下方可看出端倪. (假定 unitCounter擁有 $unit, 且 add($value)為 $unit=$unit+$value;
$a = new UnitCounter(); $a->add(5); $b = $a; $b->add(5); print "number = {$a->$unit}"; //列出 number = 10- 若要純粹複至某物件的副本, e.g. 就像複製資料庫一樣, 不止複製格式, 也複製目前的內容, 則使用 __clone()函數, 見下例
$a = new UnitCounter(); $a->add(5); $b = $a->__clone(); $b->add(5); print "number = {$a->$unit}"; //列出 number = 5 print "number = {$b->$unit}"; //列出 number = 10- 繼承
- 關鍵字 extends
- 單一繼承
- 以 parent:: 呼叫父類別, e.g. parent::__construct($parameter); 呼叫父建構子
2012年9月19日 星期三
[Mantis] 安裝與使用
- Requirements:
- Apache
- MySQL
- PHP: 5.3 up
- 前兩個沒寫主要是我用 Apache 2.2跟 MySQL 5.07並沒遇到啥問題, 反倒是 PHP 5.2.6被 argue了, 所以特別註明一下
- 基本安裝
- 下載
- 解壓縮並丟到 apache上執行該資料夾下 admin/install.php, 其快速安裝在其 doc/INSTALL, 詳細 document在 doc/lang中
- 過程中會幫你設定 MySQL, 若沒給定具有建 database權限的使用者, 將會有點 issue, 必須手動建立一下
- 安裝完執行 admin/check.php 看是否相容
- 一般就是 upload file的 size問題, 稍微改一下 php.ini的 upload_max_filesize應該就可以通過
- 移除 admin資料夾
- 更改預設帳號 (帳號: administrator/密碼: root)
- 以預設帳號登入後, 選擇 Manage-> Manage Users
- Create User並將其權限設為 Administrator
- 移除預設 administrator帳號
- 用 stmp發送信件(預設為 php.mail()), 底下以 gmail為例
- 開啟 mantis資料夾下\config_defaults_inc.php
- 修改參數
- $g_phpMailer_method= PHPMAILER_METHOD_SMTP;
- $g_smtp_host = 'smtp.gmail.com';
- $g_smtp_username = 'gmail帳號';
- $g_smtp_password = 'gmail密碼';
- $g_smtp_connection_mode = 'ssl';
- $g_smtp_port = 465;
- 搞定! (若還是不行, 可參考 Joomla Gmail設定中修改 php.ini)
- 開始使用
- 語言設定
- 若不習慣英文, 每個人可自行調整看到的介面
- My Profile->Preference->language調整即可
- 個人設定
- 我的帳號-> 基本資料->可以加入平常操作環境, 等回報 bug時選擇環境即可
- Manage Projects-> Create New Project
- 使用者管理
- 如果 config_defaults_inc.php設定 $g_enable_email_notification = ON (預設為 ON), 則使用者註冊需通過 email來建立帳號
- 回報問題
- Issue 生命週期與流程
- 建立 issue
- issue狀態
- Ref:
[PHP] 更新 PHP 5.2.6 到 5.3.5
以下為在 Windows底下更新 PHP 5.2.6到 5.3.5的過程記錄 (一開始 PHP 5.2.6以 Appserv安裝)
- download PHP VC6 x86 Thread Safe, Zip version (另有 Installer version, 可自行嘗試)--關於版本的問題, 下載頁面有詳細說明: Which version do I choose? 簡單說, 用 apache就是要用 VC6的版本...其實...5.3.5以後就找沒 VC6的版本了...完整 archive...若是用 apache的捧由...要碼就改用非官方版 Apache, 或是改用 IIS...
- 解壓縮假設到 C:\php
- 編輯 php.ini-development (或者直接 diff 原本 C:\Windows\php.ini 與 下載的package\php.ini-production)
- 更改 ; extension_dir ="ext" 為 extension_dir = "C:\php\ext"
- 比較一下 Windows\php.ini 已開啓的 extension(避免你以前哪些程式已經要求某些 extensions). e.g. extion=php_gd2.dll, ...
- timezone也可以設定一下
- data.timezone="Asia/Taipei"
- SMTP可自行設定, 若要利用 gmail發信的話, 可參考 利用 Gmail SMTP Server發信
- 設定 session存取位置
- session.save_path = "C:\php\SessionsTemp"
- upload path
- upload_tmp_dir = "C:\php\FIleuploadTemp"
- pear include path
- include_path=".;C:\php\pear", 如果還沒安裝, 可在安裝後再設定, 或是指向舊的 pear library, e.g. C:\AppServ\php\pear
- 可開啓 error log
- error_log = syslog改為 error_log = "C:\php\errorlog\error.log"
- 存檔後 copy到 C:\Windows\php.ini
- 讓 Apache server執行 php程式
- 修改 C:\AppServ\Apache2.2\conf\http.conf
- 加入
- LoadModule php5_module "C:/php/php5apache2_2.dll"
- 剩下應該原本 AppServ就設定好了
- Restart!
- Done! 記得 Windows7若是用 AppServ->Control Server by Service->Apache Restart要用管理者身份執行 (按右鍵)
- Ref: 在 Windows 7下安裝 PHP 5.3.5
2012年9月11日 星期二
[PHP] Regular Expression 正規表示法
Compiler 必學的 Regular Expression主要可以拿來比對 pattern。在網路爬蟲 (Crawler) 的世界就更不用說啦! 訓練好怎麼利用程式語言到茫茫大海找尋你要的東西, 這是必備的技能囉!
趁學 PHP複習一下!
趁學 PHP複習一下!
- 中介字元: . , 代表任何字元
- 跳脫字元: \ , 用以跳脫指令, 也就是真的是用該符號, e.g. \. 真的要表示 . 那個符號
- 字元類組: [] , e.g. came, come 可用 c[ao]me 來表示, 也可用 [0-9]表示 0到9的任一數字, 同理可使用 [a-z], [A-Z] 或混用 [a-zA-Z], 另外, 若在 [] 內第一字元加上 ^, 代表除這組以外, e.g. c[^ao]me, 代表除了 came, come以外, cxme的 x可被任何字元取代, 其餘時候 ^ 就代表該符號
- 標位點: ^: 起始, $: 結束, e.g. '^to' 代表 to開始的字串, 'be$' 代表 be結束的字串. $var = "to be or not to be" 及滿足此兩表示法. 可一起用, 以比對整個字串. $match = ereg('^Yes$', "Yes sir"); // false, 此只比對 "Yes"
- 比較 ^在字元類組與標位點的用法
- $var = "1234567"
- $match = ereg("^[0-9]", $var); // true, 比對以數字為起始的字串
- $match = ereg("[^0-9]", $var); // false, 比對時排除數字字元
- 前面都只比較字元, 接著是字元的重覆性
- ? : 0或 1次(optional)
- +: 至少一次
- *: 0或 1次以上
- e.g. pe?p可以表示 pep, pp, 而 pe*p則表示 pp, pep, peep, peeep, peeeee...ep
- {n}, n代表整數, 可用來指定樣式出現的次數
- 集結 (group) : (), 用括號表示一個小群體, e.g. (abc)+ 代表可以 abc, abcabc, abcabcabc....
- alternative: |, 其實就是 or, e.g. $pattern='(com$|net$|gov$)' 可識別 com或 net或 gov結尾的字串
- 中介字元 (metacharacter): e.g. \t表示定位, \n: new line, \d: 任何數字, \s表示任何留白 (space), 還有一種特殊字元以 [: xxx :]包起來, 如: [:alnum:] 可用來檢查字母
- 雙引號內用 \ , 必須用兩個。e.g. $found = ereg("\\.com", "www.google.com"); 代表找 .com 這個 pattern。第二個 \ 是因為表達實際的 . 要用 \. , 而第一個 \ 是在雙引號中表達 \ 要多加 \ , 若改用單引號可避免太混亂, e.g. ereg('\.com', "www.google.com");
- YYYY-MM-DD => $pattern = '^([0-9]{4})-([0-9]{2})-([0-9]{2})$';
- 以單格空白取代多於空白: ereg_replace("[[:space"]]+", " ", $source);
- 用 DD/MM/YYYY取代 YYYY-MM-DD的時間格式:
- $pattern = '^([0-9]{4})-([0-9]{2})-([0-9]{2})$';
- print ereg_replace($pattern, '\3/\2/\1', $value); \i 代表參照的運算式
2012年9月9日 星期日
[PHP] PHP特性
主要列出一些與 C或 C++較大的不同點, 以供參考
- 變數不用先宣告即可定義使用
- 參數傳遞的型別於傳遞時才決定
- 變數皆以 $開頭.
- isset()可以判別變數是否曾經定義
- 應該用 ===來檢查所有回傳值的比較 (既比較值也比較型別, 否則很容易有 false == 0的情形)
- include檔案或資料可使用 include or require, 差別在於錯誤的回報, require找不到會回報 fatal error
2012年9月8日 星期六
[PHP] debug 重複變數
由於 PHP就像 Matlab一樣, 在使用變數時, 是不需要事先宣告的. 所以有可能造成不小心重複使用了變數的情形. 在程式中的判斷其實可以簡單透過 isset($var)來確定是否曾經定義過變數, 另外, 也可以利用 var_dump($var) 來查看變數, 會 dump出資料結構及其值. 另外, 也可以用 print_r 來印出 array的內容.
[PHP] 筆記--php include path
PHP 使用關鍵字 include與 require來載入其他函式或相關程式碼. 功能皆為讀取外部檔案, 而差異的地方, 在於 include讀不到檔時會有 warning, 而 require則是 fatal error.
就像 C++會用 #ifndef 來避免 header file被重複 include, 而 PHP則有 include_once與 require_once兩種機制.
另外, 應該自己注意 php.ini中的 include path設定
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
請依據自己的系統做調整, 注意 UNIX跟 Windows在路徑斜線的方向不同, 分隔符號也不同, 一個是分號一個是冒號.
就像 C++會用 #ifndef 來避免 header file被重複 include, 而 PHP則有 include_once與 require_once兩種機制.
另外, 應該自己注意 php.ini中的 include path設定
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
請依據自己的系統做調整, 注意 UNIX跟 Windows在路徑斜線的方向不同, 分隔符號也不同, 一個是分號一個是冒號.
訂閱:
文章 (Atom)