顯示具有 PHP 標籤的文章。 顯示所有文章
顯示具有 PHP 標籤的文章。 顯示所有文章

2012年10月6日 星期六

[Ubuntu] 架設 AMP-Apache MySQL 與 PHP

  1. Apache
    1. 直接 apt-get install apache2
    2. 設定檔在 /etc/apache2/底下, 其中預設值為 apache2.conf, 其中會呼叫使用者自訂的 httpd.conf(可觀察 apache2.conf內容)
    3. 預設網頁內容放在 /var/www
    4. 驗證: 網址打入 localhost
  2. PHP
    1. apt-get install php5
    2. 設定檔在 /etc/php5/apache/php.ini
    3. 在 /var/www下建立一個附檔名為php的檔案, 內容為 <?php phpinfo();?>, 在 localhost/檔名.php檢視是否正確設定
  3. MySQL
    1. apt-get install mysql-server mysql-client phpmyadmin
    2. 第三項過程中會有設定密碼的地方, 請自行注意, 其中, mysql密碼可以不用和 host的 administrator密碼相同
    3. 注意: 若安裝完看不到 phpmyadmin, 則在 /etc/apache2/apache2.conf最後面加上 Include /etc/phpmyadmin/apache.conf即可
  4. Ref: 
    1. 使用 Ubuntu 安裝 AMP
    2. Ubuntu AMP Install

2012年9月21日 星期五

[PHP] primitive data structure--array


  1. 皆為 key-value pair, 預設 key仍為 0, 1, ...
  2. 可以用字串作為 key
  3. 利用 => assign key-value pair, e.g. $array= array("first"=>1, "second"=>2, "third"=>3);
  4. 利用 unset移除元素, 移除後 key(index)不變, e.g.本來是 [0]=> "iii", [1]=>"jjj", [2]=>"kkk", [3]=> "fff"經過 unset($array[2]) 會變成  [0]=> "iii", [1]=>"jjj", [3]=> "fff"
  5. 刪除整個陣列, unset($array)即可
  6. array中 index的順序與加入的順序有關. 先加 [1], [3], [5]再加[2], [4], [6], 則陣列中的順序即為 [1], [3], [5], [2], [4], [6](想成全部都是 key, not index就很好理解了)
  7. array中各元素可以是不同 type
  8. 可以用 array建立多維槽狀 array
  9. 常用 API
    1. bool in_array()
    2. array explode(string separator, string subject): 用 separator將 string 變成 array
    3. string implode(string glue, array pieces): 用 glue將 array中每個元素以 glue隔開形成一個 string

[PHP] PHP的類別與物件


  1. 宣告方式
    1. 關鍵字為 class, 尾端不用分號
    2. member data需加關鍵字 var, e.g. var $unit = 0;
    3. member function需加關鍵字 function, e.g. function add(){}
    4. function 不用寫 return type
  2. 建立物件
    1. 以 new建立, 但不需 (), e.g. $bottle = new UnitCounter; // UnitCounter為 class, 建立好 instance後, assign給 $bottle變數
  3. 存取物件
    1. class name沒有大小寫之分
    2. 以 -> 存取 member data與 member function, e.g. $bottle->unit, $bottle->add()其中 $unit為 class UnitCounter的 member data, 而 add()為其 member function
    3. member function中以 $this->unit, $this->add()呼叫其 member data or function
  4. 建構與解構
    1. 建構式為 function __construct() 或與 class同名的 function, 不過一般建議使用 __construct()以便於搬移類別 (P.S. 此為 PHP 5之後才支援的功能), 另外, __construct()可帶參數建構成員變數.
    2. 解構式為 function __destruct(), 不可帶參數. 通常用於關閉資料庫的連結. 另外, 有時候很好用, 例如:  擁有 static 變數為 static $nObj; 其在 construct就呼叫其 +1, 而 destruct則 -1, 則可以輕鬆維護該類所有 object個數
    3. 利用 unset()可摧毀物件
  5. 存取設定
    1. 預設皆為 public
    2. private: 
      1. 於變數或 function前加 private, 不能用 private: 來一次宣告一堆 private變數
    3. 同時也支援 protected
    4. static: 
      1. 與 C++相同, 同一類別共享 static變數.
      2. static function只能呼叫 static變數, 當然也不能呼叫 $this, 因為其並沒有建立物件
      3. static變數以類別參照方式呼叫, e.g. class Donation 擁有 static member $num, 則 member function 以 Donation::$num而非 $this->num來存取.
  6. 複製物件
    1. 建立新物件後, PHP 5回傳的是物件參照, 而不是物件本身(copy). 從下方可看出端倪. (假定 unitCounter擁有 $unit, 且 add($value)為 $unit=$unit+$value; 
    2. $a = new UnitCounter();
      
      $a->add(5);
      $b = $a;
      $b->add(5);
      
      print "number = {$a->$unit}"; //列出 number = 10
      
    3. 若要純粹複至某物件的副本, e.g. 就像複製資料庫一樣, 不止複製格式, 也複製目前的內容, 則使用 __clone()函數, 見下例
    4. $a = new UnitCounter();
      
      $a->add(5);
      $b = $a->__clone();
      $b->add(5);
      
      print "number = {$a->$unit}"; //列出 number = 5
      print "number = {$b->$unit}"; //列出 number = 10
      
  7. 繼承
    1. 關鍵字 extends
    2. 單一繼承
    3. 以 parent:: 呼叫父類別, e.g.  parent::__construct($parameter); 呼叫父建構子

2012年9月19日 星期三

[Mantis] 安裝與使用


  1. Requirements:
    1. Apache
    2. MySQL
    3. PHP: 5.3 up
    4. 前兩個沒寫主要是我用 Apache 2.2跟 MySQL 5.07並沒遇到啥問題, 反倒是 PHP 5.2.6被 argue了, 所以特別註明一下
  2. 基本安裝
    1. 下載
    2. 解壓縮並丟到 apache上執行該資料夾下 admin/install.php, 其快速安裝在其 doc/INSTALL, 詳細 document在 doc/lang中
    3. 過程中會幫你設定 MySQL, 若沒給定具有建 database權限的使用者, 將會有點 issue, 必須手動建立一下
    4. 安裝完執行 admin/check.php 看是否相容
      1. 一般就是 upload file的 size問題, 稍微改一下 php.ini的 upload_max_filesize應該就可以通過
    5. 移除 admin資料夾
  3. 更改預設帳號 (帳號: administrator/密碼: root)
    1. 以預設帳號登入後, 選擇 Manage-> Manage Users
    2. Create User並將其權限設為 Administrator
    3. 移除預設 administrator帳號
  4. 用 stmp發送信件(預設為 php.mail()), 底下以 gmail為例
    1. 開啟 mantis資料夾下\config_defaults_inc.php
    2. 修改參數
      1. $g_phpMailer_method= PHPMAILER_METHOD_SMTP;
      2. $g_smtp_host = 'smtp.gmail.com';
      3. $g_smtp_username = 'gmail帳號';
      4. $g_smtp_password = 'gmail密碼';
      5. $g_smtp_connection_mode = 'ssl';
      6. $g_smtp_port = 465;
    3. 搞定! (若還是不行, 可參考 Joomla Gmail設定中修改 php.ini)
  5. 開始使用
    1. 語言設定
      1. 若不習慣英文, 每個人可自行調整看到的介面
        1. My Profile->Preference->language調整即可
    2. 個人設定
      1. 我的帳號-> 基本資料->可以加入平常操作環境, 等回報 bug時選擇環境即可
    3. Manage Projects-> Create New Project
    4. 使用者管理
      1. 如果 config_defaults_inc.php設定 $g_enable_email_notification = ON (預設為 ON), 則使用者註冊需通過 email來建立帳號
    5. 回報問題

    6. Issue 生命週期與流程
      1. 建立 issue
      2. issue狀態
  6. Ref:
    1. 中文化問題
    2. Mantis操作說明
    3. Mantis安裝設定

[PHP] 更新 PHP 5.2.6 到 5.3.5

以下為在 Windows底下更新 PHP 5.2.6到 5.3.5的過程記錄 (一開始 PHP 5.2.6以 Appserv安裝)
  1. 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...
  2. 解壓縮假設到 C:\php
  3. 編輯 php.ini-development (或者直接 diff 原本 C:\Windows\php.ini 與 下載的package\php.ini-production)
    1. 更改 ; extension_dir ="ext" 為 extension_dir = "C:\php\ext"
    2. 比較一下 Windows\php.ini 已開啓的 extension(避免你以前哪些程式已經要求某些 extensions). e.g. extion=php_gd2.dll, ...
    3. timezone也可以設定一下
      1. data.timezone="Asia/Taipei"
    4. SMTP可自行設定, 若要利用 gmail發信的話, 可參考 利用 Gmail SMTP Server發信
    5. 設定 session存取位置
      1. session.save_path = "C:\php\SessionsTemp"
    6. upload path
      1. upload_tmp_dir = "C:\php\FIleuploadTemp"
    7. pear include path
      1. include_path=".;C:\php\pear", 如果還沒安裝, 可在安裝後再設定, 或是指向舊的 pear library, e.g. C:\AppServ\php\pear
    8. 可開啓 error log
      1. error_log = syslog改為 error_log = "C:\php\errorlog\error.log"
  4. 存檔後 copy到 C:\Windows\php.ini
  5. 讓 Apache server執行 php程式
    1. 修改 C:\AppServ\Apache2.2\conf\http.conf
    2. 加入
      1. LoadModule php5_module "C:/php/php5apache2_2.dll"
      2. 剩下應該原本 AppServ就設定好了
  6. Restart!
  7. Done! 記得 Windows7若是用 AppServ->Control Server by Service->Apache Restart要用管理者身份執行 (按右鍵)
  8. Ref: 在 Windows 7下安裝 PHP 5.3.5

2012年9月11日 星期二

[PHP] Regular Expression 正規表示法

Compiler 必學的 Regular Expression主要可以拿來比對 pattern。在網路爬蟲 (Crawler) 的世界就更不用說啦! 訓練好怎麼利用程式語言到茫茫大海找尋你要的東西, 這是必備的技能囉!

趁學 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");
實用 pattern:
  • 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++較大的不同點, 以供參考
  1. 變數不用先宣告即可定義使用
  2. 參數傳遞的型別於傳遞時才決定
  3. 變數皆以 $開頭.
  4. isset()可以判別變數是否曾經定義
  5. 應該用 ===來檢查所有回傳值的比較 (既比較值也比較型別, 否則很容易有 false == 0的情形)
  6. 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在路徑斜線的方向不同, 分隔符號也不同, 一個是分號一個是冒號.