2015年12月23日 星期三

利用Rufus製作OS安裝隨身碟取代光碟安裝片

首先說明一下會把OS安裝片寫在隨身碟中的理由:
那就是學校光碟機很多都有故障或挑片的問題,而光碟片也常常用完後不知道丟棄在哪台光碟機中,需要使用時又再燒錄一片光碟,很不環保很浪費。
於是我就把常用的系統寫在隨身碟中,需要安裝時,就拿隨身碟來用,這對我而言是比較方便的方式(不高興時也可以常常洗掉)。

官方網站:https://rufus.akeo.ie/

而製作開機隨身碟的軟體還滿多的,我比較常用的有Rufus以及Unetbootin,除了小巧好用之外,還不需要安裝,可以直接使用。

只要先準備好作業系統的ISO映像檔及一個4GB以上的隨身碟,就可以把作業系統安裝片寫在隨身碟中,然後就可以把光碟安裝片丟掉了。以後若是電腦需要重灌,只要到BIOS設定USB開機,帶隨身碟就可安裝了。

以下是操作畫面:




Office認證無法啟用

前幾天老師拿了一台Win10的筆電來,要我幫她安裝Office,一切似乎正常,但是最後在認證的時候卻卡關出現錯誤訊息,原來若是直接在ospp.vbs檔案上按右鍵,以系統管理者身分執行是不行的;若只開啟一般身分的命令提示字元,再輸入指令也會出現錯誤,需要:

1.點開始->所有程式->附屬應用程式->命令提示字元(按右鍵選以系統管理員身份執行)

2.以記事本或是文字編輯器開啟ospp.vbs。

3.將指令一行一行貼到「系統管理員:命令提示字元」


E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.

今天手動更新
sudo apt-get update
出現了錯誤訊息

E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.

白話意思就是套件產生衝突(有新舊版本的套件),請執行"sudo dpkg --configure -a"


註:像我選擇安裝套件維護者所提供的版本

接下來就再執行sudo apt-get update,錯誤訊息就不會出現了

2015年9月22日 星期二

常用的PHP正規表示式

出自於http://mro-php.blogspot.tw/2009/10/php_19.html

"^\d+$" //非負整數(正整數+ 0)
"^[0-9]*[1-9][0-9]*$" //正整數
"^((-\d+)|(0+))$" //非正整數(負整數+ 0)
"^-[0-9]*[1-9][0-9]*$" //負整數
"^-?\d+$" //整數
"^\d+(\.\d+)?$" //非負浮點數(正浮點數+ 0)
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\ .[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮點數(負浮點數+ 0)
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9] *\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負浮點數//OSPHP.COm.CN
"^(-?\d+)(\.\d+)?$" //浮點數
"^[A-Za-z]+$" //由26個英文字母組成的字符串
"^[AZ]+$" //由26個英文字母的大寫組成的字符串
"^[az]+$" //由26個英文字母的小寫組成的字符串
"^[A-Za-z0-9]+$" //由數字和26個英文字母組成的字符串
"^\w+$" //由數字、26個英文字母或者下劃線組成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" // url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1- 9]{1}))|(3[0|1]))$/ //年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0 |1]))/(d{2}|d{4})$/ //月/日/年
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|( ([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil //OSPHP.COm .CN
/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?( [0-9]{7,8})(\-[0-9]+)?$/ //電話號碼
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0- 5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[ 0-5])$" //IP地址

匹配中文字符的正則表達式: [\u4e00-\u9fa5]
匹配雙字節字符(包括漢字在內):[^\x00-\xff]
匹配空行的正則表達式:\n[\s| ]*\r
匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正則表達式:(^\s*)|(\s*$)
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網址URL的正則表達式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*)) *(\\?\\S*)?$
//開源代碼OSPhP.COm.CN

匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配國內電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配騰訊QQ號:^[1-9]*[1-9][0-9]*$


元字符及其在正則表達式上下文中的行為:

\將下一個字符標記為一個特殊字符、或一個原義字符、或一個後向引用、或一個八進制轉義符。

^匹配輸入字符串的開始位置。如果設置了RegExp對象的Multiline屬性,^也匹配'\n'或'\r'之後的位置。

$匹配輸入字符串的結束位置。如果設置了RegExp對象的Multiline屬性,$也匹配'\n'或'\r'之前的位置。

*匹配前面的子表達式零次或多次。

+匹配前面的子表達式一次或多次。 +等價於{1,}。

?匹配前面的子表達式零次或一次。 ?等價於{0,1}。



{n} n是一個非負整數,匹配確定的n次。

{n,} n是一個非負整數,至少匹配n次。

{n,m} m和n均為非負整數,其中n <= m。最少匹配n次且最多匹配m次。在逗號和兩個數之間不能有空格。

?當該字符緊跟在任何一個其他限制符(*, +, ?, {n}, {n,}, {n,m})後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。

.匹配除"\n"之外的任何單個字符。要匹配包括'\n'在內的任何字符,請使用象'[.\n]'的模式。
(pattern)匹配pattern並獲取這一匹配。

(?:pattern)匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以後使用。

(?=pattern)正向預查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。



(?!pattern)負向預查,與(?=pattern)作用相反

x|y匹配x或y。

[xyz]字符集合。

[^xyz]負值字符集合。

[az]字符範圍,匹配指定範圍內的任意字符。

[^az]負值字符範圍,匹配任何不在指定範圍內的任意字符。

\b匹配一個單詞邊界,也就是指單詞和空格間的位置。

\B匹配非單詞邊界。

\cx匹配由x指明的控製字符。

\d匹配一個數字字符。等價於[0-9]。

\D匹配一個非數字字符。等價於[^0-9]。

\f匹配一個換頁符。等價於\x0c和\cL。

\n匹配一個換行符。等價於\x0a和\cJ。

\r匹配一個回車符。等價於\x0d和\cM。

\s匹配任何空白字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。

\S匹配任何非空白字符。等價於[^ \f\n\r\t\v]。
//開源代碼OSPhP.COm.CN


\t匹配一個製表符。等價於\x09和\cI。

\v匹配一個垂直製表符。等價於\x0b和\cK。

\w匹配包括下劃線的任何單詞字符。等價於’[A-Za-z0-9_]’。

\W匹配任何非單詞字符。等價於’[^A-Za-z0-9_]’。

\xn匹配n,其中n為十六進制轉義值。十六進制轉義值必須為確定的兩個數字長。

\num匹配num,其中num是一個正整數。對所獲取的匹配的引用。

\n標識一個八進制轉義值或一個後向引用。如果\n之前至少n個獲取的子表達式,則n為後向引用。否則,如果n為八進制數字(0-7),則n為一個八進制轉義值。

\nm標識一個八進制轉義值或一個後向引用。如果\nm之前至少有is preceded by at least nm個獲取得子表達式,則nm為後向引用。如果\nm之前至少有n個獲取,則n為一個後跟文字m的後向引用。如果前面的條件都不滿足,若n和m均為八進制數字(0-7),則\nm將匹配八進制轉義值nm。 //PHP開源代碼

\nml如果n為八進制數字(0-3),且m和l均為八進制數字(0-7),則匹配八進制轉義值nml。

\un匹配n,其中n是一個用四個十六進制數字表示的Unicode字符。

匹配中文字符的正則表達式: [u4e00-u9fa5]

匹配雙字節字符(包括漢字在內):[^x00-xff]

匹配空行的正則表達式:n[s| ]*r

匹配HTML標記的正則表達式:/<(.*)>.*|<(.*) />/

匹配首尾空格的正則表達式:(^s*)|(s*$)

匹配Email地址的正則表達式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

匹配網址URL的正則表達式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

利用正則表達式限製網頁表單裡的文本框輸入內容:

用正則表達式限制只能輸入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData(' text').replace(/[^u4E00-u9FA5]/g,''))"

用正則表達式限制只能輸入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData( 'text').replace(/[^uFF00-uFFFF]/g,''))" //OSPHP.COM.Cn開源

用正則表達式限制只能輸入數字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text' ).replace(/[^d]/g,''))"

用正則表達式限制只能輸入數字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text ').replace(/[^d]/g,''))"

=========常用正則式



匹配中文字符的正則表達式: [\u4e00-\u9fa5]

匹配雙字節字符(包括漢字在內):[^\x00-\xff]

匹配空行的正則表達式:\n[\s| ]*\r

匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正則表達式:(^\s*)|(\s*$)

匹配IP地址的正則表達式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //

匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*


匹配網址URL的正則表達式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

sql語句:^(select|drop|delete|create|update|insert).*$

1、非負整數:^\d+$

2、正整數:^[0-9]*[1-9][0-9]*$

3、非正整數:^((-\d+)|(0+))$

4、負整數:^-[0-9]*[1-9][0-9]*$

5、整數:^-?\d+$

6、非負浮點數:^\d+(\.\d+)?$

7、正浮點數:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0- 9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

8、非正浮點數:^((-\d+\.\d+)?)|(0+(\.0+)?))$

9、負浮點數:^(-((正浮點數正則式)))$

10、英文字符串:^[A-Za-z]+$

11、英文大寫串:^[A-Z]+$

12、英文小寫串:^[a-z]+$

13、英文字符數字串:^[A-Za-z0-9]+$

14、英數字加下劃線串:^\w+$

15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$


16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\': +!]*([^<>\"\"])*$

17、郵政編碼:^[1-9]\d{5}$

18、中文:^[\u0391-\uFFE5]+$

19、電話號碼:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{ 2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$

20、手機號碼:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$

21、雙字節字符(包括漢字在內):^\x00-\xff

22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那樣的trim函數)

23、匹配HTML標記:<(.*)>.*<\/\1>|<(.*) \/>

24、匹配空行:\n[\s| ]*\r

25、提取信息中的網絡鏈接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\. )+('|"| *|>)?



26、提取信息中的郵件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

27、提取信息中的圖片鏈接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('| "| *|>)?

28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)

33、提取信息中的浮點數(即小數):(-?\d*)\.?\d+

34、提取信息中的任何數字:(-?\d*)(\.\d+)?


35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)

36、電話區號:/^0\d{2,3}$/

38、帳號(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

39、中文、英文、數字及下劃線:^[\u4e00-\u9fa5_a-zA-Z0-9]+$

2015年9月15日 星期二

php.ini的short_open_tag

一、php程式基本型態:
最簡單的php程式,最初必須以<?php開頭,?>結尾(?>其實是可以被省略的,而且省略後更好,被引用時比較不會出錯)。
基本型範例一:
 <?phpecho "這是我的第一支php程式";?>
也有人會把<?後面的php這幾個字省略(如範例二),很多書或資料說,這樣也可以不會出錯,但實際上php.ini預設的設定是不支援的,還需要修改。
基本型範例二:
 <?echo "這是我的第一支php程式";?>

二、修改php.ini
1.sudo vi /etc/php5/apache2/php.ini

2.把short_open_tag = Off
改成
short_open_tag = On

3.重啟apache2
sudo service apache2 restart

由於省略php的寫法不見得每個伺服器都支援,且一旦不支援,還會把原始碼都顯露出來的情形下,所以我個人覺得還是用標準的寫法比較好。

2015年8月24日 星期一

AH00557: apache2: apr_sockaddr_info_get() failed for eweb

今天重啟Apache2時出現了
AH00557: apache2: apr_sockaddr_info_get() failed for eweb
的錯誤

經檢查後發現
我的/etc/hosts、/etc/hostname兩個檔案內的主機名稱竟然輸入不一樣的內容
改正之後,再重啟apache2就好了

2015年8月22日 星期六

Ubuntu14.04安裝WorkBench

在Ubuntu下,安裝WorkBench最簡單的方法就是使用apt-get指令,但這樣安裝到的workbench有可能不是最新的,若想安裝MySq官方最新版的WorkBench其實也可以使用apt-get指令,但是得先更新套件來源。

方法一:
Ubuntu軟體中心版
sudo apt-get update
sudo apt-get install mysql-workbench
方法二:
MySql官方版
1.根據你的Linux版本,下載MySQL APT Repository
2.以Ubuntu14.04做例子,安裝下載的Mysql Apt Repository
sudo dpkg -i mysql-apt-config_0.3.5-1ubuntu14.04_all.deb
選擇要設定的套件

選最新的workbench

執行完畢後,/etc/apt/source.list.d資料夾下會多出mysql.list的檔案,設定了workbench的更新路徑與版本

3.最後再執行更新、安裝。些許的差別是安裝的套件名稱變成了「mysql-workbench-community」
sudo apt-get update
sudo apt-get install mysql-workbench-community

註:6.2、6.3最新版本的WorkBench目前只支援64位元的機器,所以如果你的電腦是32位元的,只能選用第一種方法安裝。

MySQL Workbench的畫面




參考網頁:
2.4 MySQL Workbench on Linux :: 2.4.1 Installing

2015年8月20日 星期四

CloudSchool下composer.phar update的運作簡易概念流程

當我們在CloudSchool的WebProject資料夾下輸入
php composer.phar update時,系統自動會更新

稍微了解一下運作流程



1.composer.phar執行時會去讀取composer.json

2.composer.json的內容中定義了需要哪些套件函式庫library。

3.名單中的套件會自動更新的,並安裝到vendor中。

4.此外,每次也會去檢查更新SfsUpgrade中的函式庫。

2015年8月19日 星期三

Zf2研習筆記_進階20150817第一天之(二)

三、CloudSchool1.0 系統配置

(一)建立系統配置檔

複製 local.php.dist 為 local.php
複製 module.doctrine-mongo-odm.local.php.dist 為 module.doctrine-mongo-odm.local.php

複製 application.config.php.dist 為 application.config.php
複製 sfs-upgrade.php.dist 為 sfs-upgrade.php

(二)config/autoload/local.php
以下要改的地方:1.資料庫名稱、2.資料庫帳號、3.資料庫密碼。這裡的設定是要設定新學務系統(CS1.0)的資料庫連結。


(三)sfs3 升級設定
修改/sfs_upgrade.php
以下的設定是針對有升級需求才需要設定,要改的地方有
1.學制(國民中學或國民小學)
2.sfs3資料庫的資料庫名稱、帳號、密碼
3.新的學務CS1.0的資料庫名稱、帳號、密碼


(四)整理升級資料庫(舊sfs)
1.將舊的sfs資料資料庫備份出來
mysqldump -uroot -p密碼 sfs3 > sfs.sql
2.在新主機上建立sfs3資料庫,做為待會要匯入sfs.sql資料之用
mysql -uroot -p
mysql>Create database `sfs3`;

3.回到Ubuntu指令輸入模式下,把sfs.sql的資料到回到sfs3資料庫
mysql -uroot -p密碼 sfs3 < sfs.sql

如此一來,我們就可以在新的主機上擁有舊編碼的sfs3的資料庫了,但是因為新的CS1.0擁有屬於自己的資料庫編碼與新的資料表關聯,所以以上的目的,純粹只是作為升級前的準備工作。
(五)建立資料庫
接著需要建立一個新的資料庫,但是這個新的資料庫需要設定為UTF-8編碼
mysql -uroot -p
mysql>CREATE DATABASE `school_074775` CHARACTER SET utf8 COLLATE utf8_general_ci;


若是建立完成的話,可以使用show databases;指令查看,應該會有新舊學籍系統的資料庫名稱

(六建立資料表
php module/SfsUpgrade/sfs-upgrade.php create-new-db
(七升級資料庫
php module/SfsUpgrade/sfs-upgrade.php upgrade-base

(八)開始使用CS1.0
1.此時若你在瀏覽器輸入local.cs要開啟CloundSchool,還會出現一個錯誤訊息,那是因為暫存cache的data資料夾權限尚未設定正確,在cloudschool的路徑下執行
chmod -R 777 data
data權限尚未設定

設定好後,終於看到新學籍系統的登入畫面了
2.設定管理者:CS1.0升級後較特別的是系統管理員必須重新指定。
php module/SfsUpgrade/sfs-upgrade.php set-admin 使用者帳號

三、Doctrine 練習
接著先讓我們先來瞭解一下zend framework2的檔案結構與網址的對應關係,簡言之網址的格式為
http://主機Domain/模組名稱/控制器名稱/Action名稱
舉例來說:就下圖來看,若主機Domain已定義為local.cs的前提下,模組Module名稱為application,控制器Controller名稱為Index,Action名稱為test,所以如果我們想要看到該網頁內容,網址就要輸入
http://local.cs/application/index/test
註:模組及控制器的名稱大小寫沒有差別,但是最後的action不可以/為結束,否則會被視為資料夾而產生錯誤。

此外,我們網頁的輸出顯示,其實可以直接在Controller中的function xxxAction中直接打上網頁程式碼或php的程式語法,但是這樣做的話,就浪費了zf2中樣板、物件設定的優點。所以我們通常不這樣做,有看到
public function indexAction()
{
$viewMode = new ViewModel();
return $viewMode;
這幾行吧!
我們設定了indexAction的方法Method,假如indexAction的方法被物件化時,可以把物件的回傳值,傳遞給viewMode,

待續....





研習網頁
http://docs.sfs.tw/


Zf2研習筆記_進階20150817第一天之(一)


一、CloudSchool(CS 1.0):
SFS3系統開發至今以十餘年,雖然許多的老師無私的奉獻讓系統更豐富,但相對的卻也產生許多不夠嚴謹或過時的程式碼Bug,CloudSchool就有的SFS3架構利用Zend Framework 2.0重新改寫開發,僅保留重要核心程式,以作為未來新學務系統的主要架構。


二、系統環境配置安裝
(一)安裝 mongoDB及Mongodb PHP extension
MongoDB 是 10gen 這家公司開發的一個 NoSQL Database,屬於 Document-Oriented Database 這一類型,希望能夠結合 Relational Database 與 Key/Value Database 雙方的優點,很適合用在 Web 應用程式、Internet 架構的環境底下。
在CS 1.0,我們利用MongoDB儲存所有需要上傳的資料,data會以資料庫的型態存在MongoDB中。往後執行CS學務時,一般SQL資料仍就會讀取MySql Server,然若是需要讀取上傳的資料時,則會呼叫讀取MongoDB,取代掉以往SFS3的data資料夾上傳的檔案,並且有效增加效能及往後擴充性。

首先先介紹mongodb的安裝,安裝適用的硬體裝置又分為64位元及32位元兩種,兩種安裝法又有點小小的差異,文中會特別提醒說明。

※64位元的安裝步驟
1 Import the public key used by the package management system.
The Ubuntu package management tools (i.e. dpkg and apt) ensure package consistency and authenticity by requiring that distributors sign packages with GPG keys. Issue the following command to import the MongoDB public GPG Key:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

2 Create a list file for MongoDB.
Create the /etc/apt/sources.list.d/mongodb-org-3.0.list list file using the following command:
sudo echo "deb http://repo.mongodb.org/apt/ubuntu/ "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
3 Reload local package database.
Issue the following command to reload the local package database:
sudo apt-get update
4 Install the MongoDB packages.
You can install either the latest stable version of MongoDB or a specific version of MongoDB.
Install the latest stable version of MongoDB.
Issue the following command:
sudo apt-get install -y mongodb-org 
5.Restart MongoDB Server
sudo service mongod restart
6.Type the command: "netstat -na | more " to check the port of 27017 have be running.

7.安裝 Mongodb PHP extension

 sudo apt-get install php5-dev make php-pear php5-intl
 sudo pecl install mongo
 sudo echo "extension=mongo.so" | sudo tee /etc/php5/mods-available/mongo.ini
ln -s /etc/php5/mods-available/mongo.ini /etc/php5/apache2/conf.d/20-mongo.ini
ln -s /etc/php5/mods-available/mongo.ini /etc/php5/cli/conf.d/20-mongo.ini


※32位元的安裝步驟
1 Import the public key used by the package management system.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB1
2 Create a list file for MongoDB.
sudo echo "deb http://repo.mongodb.org/apt/ubuntu/ "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
3 Reload local package database.
sudo apt-get update
 4 Install the MongoDB packages.
sudo apt-get install -y mongodb 
5.Restart MongoDB Server
sudo service mongod restart
6.安裝 Mongodb PHP extension

有兩種方法一種是直接用apt-get安裝,另一種是到Git下載編譯
(1)直接用apt-get安裝
sudo add-apt-repository ppa:chris-lea/mongodb-drivers
sudo apt-get update
sudo apt-get install php5-mongo
1.sudo add-apt-repository ppa:chris-lea/mongodb-drivers
2.sudo apt-get update
3.sudo apt-get install php5-mongo
4.sudo echo "extension=mongo.so" | sudo tee /etc/php5/mods-available/mongo.ini
ln -s /etc/php5/mods-available/mongo.ini /etc/php5/apache2/conf.d/20-mongo.ini
ln -s /etc/php5/mods-available/mongo.ini /etc/php5/cli/conf.d/20-mongo.in

(2)Git下載編譯
1.到Git下載Mongo php driver
2.解壓縮
3.
phpize
.
/configure
make

sudo make install

4.
Then, add the following to your php.ini file:extension=mongo.so
(二)安裝PHP 模組
1.CloundSchool需要用到其他php模組,以下先對模組做簡單介紹:
(1)php-apc:純php程式在執行時,速度的確是不夠快,因為每一次讀取php程式碼的時候,每一次都得重新編譯一次,這造成系統的負擔與讀取的效能變差。而APC則可以加快php的效能,如果你覺得自己的 PHP 網站不快,可以在自己的 php.ini 裡面,load 進來 apc.so 後面加上 apc.stat=0,因為當使用了 APC 並且設置 apc.stat=0 之後,其實網站在第一次編譯成 OPCODE 之後,除非重起或是清除快取,要不然就是會一直拿 OPCODE 來跑,而這樣速度也因此有了顯著的提升。(參考PHP 使用 APC 增進執行速度
其他補充:Apc.php

(2)php5-gd:跟image相關的擴充模組,PHP可以利用該模組建立或設定影像檔。
(3)php-imagick:也是跟image相關的擴充模組,可以對影像檔進行轉檔convert,改變影像尺寸等等...,像是利用PHP建立縮圖功能,就是使用imagick來完成。
(4)php5-intl:該模組是跟script的國際化有關。

2.安裝指令:
sudo apt-get install php-apc php5-gd php5-imagick php5-intl
(三)設定 Apache Virtual host
1.另外再拷貝一份虛擬站台的設定檔
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/local.cs.conf

2.清空local.cs.con的內容(在vim下可利用0dG命令刪掉全部內容),並將以下的設定檔貼到local.cs.conf裡
註:紅字的地方要修改
<VirtualHost *:80>
    ServerName local.cs
    DocumentRoot /home/使用者/cloudschool/public
    ErrorLog ${APACHE_LOG_DIR}/cloudschool.error.log
    CustomLog ${APACHE_LOG_DIR}/cloudschool.access.log combined
    # SetEnv APPLICATION_ENV "development"
    <Directory /home/使用者/cloudschool/public>
    Require all granted
    AllowOverride All
    # Order allow,deny
   # Allow from 127.0.0.1
    </Directory>
</VirtualHost>
3.加入hostname,修改/etc/hosts檔
vi /etc/hosts
127.0.0.1       localhost
127.0.1.1       ubuntu local.cs
4.加入虛擬站台設定(把available的站台link到enable的站台,虛擬站台就可啟用)
sudo a2ensite local.cs.conf

5.加入 rewite module
sudo a2enmod rewrite

6.重新啟動Apache
sudo service apace2 restart

(四)Clouds主程式安裝到虛擬站台目錄
將cloudschool學校端程式解壓縮到/home/使用者/
例:
tar zxvf cloudschool.tar.gz /home/chunkai/

(五)composer.phar update
在cloudschool目錄下,執行
php composer.phar update




研習網頁:
http://docs.sfs.tw/
其他參考網頁:
PHP 使用 APC 增進執行速度
CloudSchool下composer.phar update的運作簡易概念流程