LNMP 安裝

LNMP 安裝

LNMP 故名就是 Linux + Nginx + MariaDB +  php
是當前提供網頁服務 最佳的組合

原生 Linux Centos 安裝時是以 Apache為基礎下去安裝
以效能極至考量 , 相對於 nginx 簡單輕巧




先 ifconfig 查看是否有浮動ip


若無浮動,又要遠端 ssh 登入,動態重新分配ip(注意需在虛擬機開機前,網路設定設bridge)
sudo dhchient


更新 yum
yum update

安裝nginx
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
sudo yum install nginx


把80 port打開
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

開啟 nginx 服務
sudo systemctl start nginx.service


安裝 php , mariaDB
root # yum install httpd mariadb-server mariadb php php-mbstring php-mysql php-gd
root # yum install wget unzip



啟動 mariaDB
root # systemctl start mariadb.service

啟動 mariaDB(加在開機使用)
root # systemctl enable mariadb.service

設定 mariaDB帳密
sudo mysqladmin -u root password 'your-password'

Phalcon 安裝教學


相對於 Laravel , Phalcon 安裝是很簡單的
請依下列步驟安裝即可,直接用pietty 複製貼上簡單輕鬆的完成它

此套 Phalcon 是安裝在 linux Centos 7.0
若還未裝此之朋友,請至另一頁 Linux Centos 7.0安裝教學



yum 更新 rpm 到最新

yum -y install php-devel --enablerepo=remi (基本上是安裝這個 )

//以下我沒裝
yum -y install gcc make
yum -y install php --enablerepo=remi
yum -y install php-pear
yum -y install mysql-devel



安裝Phalcon Developper Tools
 git clone git://github.com/phalcon/phalcon-devtools.git
$ sudo mv phalcon-devtools /usr/local/src
$ cd /usr/local/src/phalcon-devtools
$ . ./phalcon.sh 
$ nano ~/.bash_profile



//以下擺到任何位置皆可 安裝它
$ yum install git
$ git clone git://github.com/phalcon/cphalcon.git
$ cd cphalcon/build
$ ./install



create 一個phalcon專案
$ cd /var/www/html
$ phalcon project phalconTest
Phalcon DevTools (1.2.5)



權限都開 (有人只開 app/cache)
chmod -R 777 /var/www/html/phalconTest


vi /etc/selinux/config
檢查有無 phalcon.so
$ ls /usr/lib64/php/modules/


檢查 /etc/php.d/下是否有 phalcon.ini

若無則去剛才下載的安裝檔裡面copy phalcon.ini 到  /etc/php.d
cphalcon/unit-tests/ci/phalcon.ini

檢查有無加載成功
php -ini |grep Phalcon


對create的phalcon資料夾 設定權限
chmod -R 777 /var/www/html/phalconTest


設定SELinux
vi /etc/selinux/config
由原本 #SELINUX=enforcing 改為 SELINUX=disabled

SELinux是 Security Enhanced Linux (安全加強的 Linux) 的縮寫, 他並不是一個防火牆的軟體,而是一個『針對檔案系統權限作更細部規劃的一個模組』。

輕鬆駕馭 Linux 必備工具




1. MobaXterm ( 類似 pietty 但功能更強大 可以複製貼上 )

2.

Centos 7.0 安裝

Bootstrap 快速製作 UI 的好幫手

Bootstrap 是 快速製作 UI 的好幫手
在無美術的其況下,工程師可利用現成的網頁元素套件
但使用之必定牽入相對應搭配的CSS , 若不妥善使用 , 反而會使
網頁架構代碼 越來越混亂

Laravel 基礎介紹



1.為什麼選擇 Laravel 當 php 框架 ?
(1).開發者定期發怖新版
(2).框架元件表示上較簡潔
(3).官方文件齊,相關學習資源完整
(4).推廣者多,社群資源龐大
(5).套件多生態系完整



2.架構與組成






1.1.應用程式起始都在 start ,
包含 artisan.php套件註冊與使用(目前用不上)

Global.php 載入各重要元素視覺控制,錯誤與資訊紀錄等

Local.php當執行環境為local時才會被使用

1.2.app/routes.php 
設定路由,透過路由設定指定URL轉向特定頁面或控制頁面,
API
介面設計亦透過此來做參數傳入設計

1.3.app/config/
設定資料庫,cache,session , view ,queue 等讀取套件相關資訊

1.4.MVC
Controller , 所有經路由轉向後指定邏輯存放位置,或轉向某一個視圖連結
view ,
存放靜態網頁相關視覺資訊

Models , 將資料庫的資料表物件為類別使用,可在此新增

1.5.libraries
共用類別庫,自訂義類別可存放在此

為什麼要使用語言框架?




作者本身並非專業框架使用者, 但經過因工作專案開發需求,接觸一陣子
淺談其心得做為一個分享

許多語言都有框架,今天剛好作者專案用到php,又有時程壓力,又不精通的情況下
框架可以幫許多的忙,當然對其不熟,反之使用不當亦會有後續困擾

那麼為什麼要使用語言框架?



加速開發過程:
框架 內置了預建的模組,免去了冗長又令人厭煩的程式設計工作。這樣開發者就能夠把時間花在開發實際程式上,而不是每一次都要為每一個專案重建基礎模組。



成熟穩健性:
但是對於大多初級開發者而言,某些語言是如此的簡單以至於他們會完全沒有意識地寫出低品質的代碼。這樣的程式可能在大多數時間內仍正常工作,但你可能已在代碼中留下了巨大的安全性漏洞,使其易受攻擊。而框架 對一些基本的細節及安全性等做了處理,再次基礎上開發出來的代碼會更加安全可靠。



可擴展性:
框架 往往有著龐大的支援團隊,使用者眾多,它是不斷升級的,你可以直接享受別人升級代碼帶來的好處。框架 也方便的支援使用者根據實際業務需求擴展自己特有的模組。



框架 模糊了程式開發中的基本底層細節,使你可以專注於業務邏輯的開發,大大節約了專案開發時間與精力 , 框架 的開發規範讓大家在基於 PHP框架 開發程式時,所有的開發人員都遵循統一的編碼開發規範。如此一來,程式碼將變得容易被其他人理解,項目成員在彼此合作開發時彼此的協作將更加協調,也有利於日後的專案維護及後續開發。



 框架的決策

1.官方強有而有力技術領頭開發
   1.1.開發方向跟著大環境區勢
   1.2.定期更新,安全性升級
   1.3.官方背後有商業公司支援
2.傳教士多
3.社群大,生態系完整

以上引述自   給你一個使用 Laravel 的理由 by Shengyou Fan
https://speakerdeck.com/shengyou/gei-ni-ge-shi-yong-laravel-de-li-you







廣州- 番禹


時間 : 2014/10/18-25

其實回來後,對於當地民情與生活,透過聊天,一步一步的走在街道上,
觀察當地人的習慣,有些過的自然純樸,有的則是對生活的感慨與無奈



從台灣桃園中正機場飛過去 廣州白雲機場 大概約1小時50分
從白雲機場下機後 , 到 最近 全家 買張地鐵卡 70 RMB , 20RMB第一次卡費 , 裡面有 50RMB儲值,下次要儲值時記得也到 全家先儲值 , 它不能在服務中心儲 有點麻煩


從地理位置可以看到,白雲在廣洲最北邊 , 一路搭地鐵往南下到我們要前往的番禹
大概要 接近1小時的車程 , 非上下班時間 , 也可考慮搭公車





要回大陸的乘客真的很多,花了快30分鐘才登機完成
上飛機前叫某人趕緊安裝skype or 微信




















在上面看了一會"明日邊境" ,雖然我已看過,但動作片真的時間轉眼就到了
白雲機場

























到的第一晚時間已經蠻晚了, 又肚子太餓了, 就隨便找一家可以吃的店,
同事於是就推薦比較安全的店 ( 避免吃了不適應之類?! )
我們是搭地鐵到 [ 市橋站 ]下車 ,拖著行李走回飯店

[  味千拉麵 ]
番禺区大北路99号龙泉酒店1楼
020-84831571
























它外觀看起來就像一般連鎖拉麵店 , 但圖片上的拉麵都蠻吸引我
每個都想吃吃看,於是還是先從基本豚骨拉麵試試




















份量不算大 , 湯還算蠻濃的 , 麵條還可以,價位大概都25-35RMB
在番禹這小地方,已經算是不錯的東西了
























回到房間洗澡後 , 又二度探險
探險範圍 , 飯店週圍的 [ 7-11 ]

基本這裡的 7-11 把它當成 , 台灣一般雜貨店等級看待吧 ,
全家在這還正常一點 , 7-11沒有自動門,是傳統把手 ( 還以為是節能?!)





















架上的零食,站在前面,完全不知想買什麼
看起來都沒有吸引我的 , 也許是台灣進太多日本零食,包裝比較鮮明活潑 ,簡約
比較多樣化





















牧草鮮乳倒是有吸引了我的目光 ,
其他也是慘不忍睹 , 有關東煮也是蠻慘烈的 ,湯一鍋黑鴉鴉感覺像是魯味?
架上麵包蛋糕也蠻傳統


最後還是硬給它買了, 一瓶牛奶 跟 熱狗
, 熱狗真是慘 , 像是在架上連烤了四天,整個超硬 ...
完全跟台灣不能比 , 鮮嫩多汁的口感
牛奶喝起來倒是普通





















Flash Buidler - Air exe 發怖設定 , airSdk 相關


Flash Builder 發怖 exe  Air 時請由下列步驟操作  :


 1. 由 File ->  Export -> 開啟

 2.點擊  Release















 3.注意這裡選擇  Signed native installer




























4.注意這裡發怖  airsdk   在  .actionScriptProperties 描術檔裡
   useFlashSDK="true"  設為 true 的狀態



可能會發生的錯誤 找不到相關的 airsdk 版本
請參考以下修正:

1.點擊 windows -> Preferences











2.注意這裡,可以查看版本 AIR SDK 版本 , 如果過舊 像是3.4 , 3.5 編譯時有可能出現問題
手動更新它的版本方法如下:

2.1 下載最新的 airsdk
http://www.adobe.com/devnet/air/air-sdk-download.html

2.2
至您安裝 Flash Builder 目錄下
Adobe Flash Builder 4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722
找到 AIR SDK 取代它( 目錄名稱 都叫 AIRSDK )

2.3
這裡要注意 否則Flash Builder 會造成異常 :
1.取代時 Flash Builder 要先關閉
2.使用複蓋的方式取代 , 非砍掉重建方式 


另外要注意如果你的Flash builder 沒有原因突然找不到 airsdk 版本
怎樣也修復不了時,請照下列作法做 :


1. useFlashSDK="true"  設為 false 的狀態
2. src 下的 檔案 - app.xml 開啟
3. 找到底下這行 將它改為 3.1
<application xmlns="http://ns.adobe.com/air/application/3.1">

AS3 - Regular Expression 移除字串空白

var rex:RegExp = /[\s\r\n]*/gim; 
var str:String = "This is a string."; 
str = str.replace(rex,'');


Regular Expression 詳細介紹
 http://blog.roodo.com/rocksaying/archives/2670695.html

Actionscript3 - 編譯 問題 集合

此篇為工作上備忘錄
也同時供網友查詢之使用

1. 編譯時出現  definition mx.utils could not be found    - Flex problem
   
    在 fla , 重新設定 framework 在本機路逕即可

2. 編譯時 設定 sdk 4.6 4.7時 , 無法在builder 上設定 

    在 Compiler 設定裡  Adobe Flash Player options 裡設定版本
    為 11 .1 . 0 


3. 在 flash builder 4.7 編譯 fla 專案時 , 會不停產生 sdk 錯誤找不到問題
  
    在專案裡找到  actionScriptProperties 裡面 修改 useFlashSDK="false"

Blogger 樹狀結構 安裝 超easy(2013)


自從無名搬來這後 , 許多blog 設定東西要去調整 ,
而google內建的blog系統沒有樹狀結構的分類,
網路上的文章更是對此方面技術介紹些許模糊,
因此來寫一篇以備日後參考



1.首先先到 範本 - > 編輯 HTML















2.這時候就會顯示 該 blog 會使用到所有 javascript 語法 ,
   我們只需要做的是 找到 原分類的 語法段落 ,
   利用Ctrl+ F (搜尋)   <b:widget id="Label

   你會找到許多這樣的標籤 一直按ENTER 找到 你blog新增分類的賦予它

   的中文名稱 例如像我的是 
   <b:widget id='Label1' locked='false' title='分類' type='Label'>

  找到之後 我們需要將它
<b:widget > </b:widget>語法的整段
  段落 取代為下列

<b:widget id='Label3' locked='false' title='文章分類(v2)' type='Label'>
<b:includable id='main'>
  <b:if cond='data:title'>
    <h2><data:title/></h2>
  </b:if>
  <div expr:class='&quot;widget-content &quot; + data:display + &quot;-label-widget-content&quot;'>
<script>
var label_tree= new Object();

function tn(tag)
{
    return tag.substring(1,tag.length-1);
}

function build_node(tree,idx,cnt)
{
    if(!tree[idx[0]]){
        tree[idx[0]]=new Object();
        tree[idx[0]]['_cnt']=0;
        tree[idx[0]]['_item']=new Array();
    }
    tree[idx[0]]['_cnt'] = parseInt(tree[idx[0]]['_cnt']) + parseInt(cnt);        
    if(idx.length==1){
        return tree[idx[0]];        
    }
    return build_node(tree[idx[0]],idx.slice(1),cnt);
}
function add_label(_name,_cnt,_url,_dir)
{
    var e1 = new RegExp("\\[(.+?)\\]","g");
    var e = new RegExp("\\[(.+)\\]","g");
    var m = _name.match(e);
    var tag = _name;
    
    var obj=new Object();
    obj['tag']=_name;
    obj['cnt']=_cnt;
    obj['dir']=_dir;
    obj['url']=_url;
    if(m){
        obj['tag']= _name.substring(m[0].length,_name.length);                
        var m1 = _name.match(e1);
        if(m1){
            node=build_node(label_tree,m1,_cnt);
            if(node){            
                node['_item'].push(obj);
            }
        }        
    }
    else{
        if(!label_tree['_item']){
            label_tree['_item']=new Array();
        }
        label_tree['_item'].push(obj);
    }
}
function menu_exp(id)
{
        var ul=document.getElementById("ul_"+id);
        var li=document.getElementById("li_"+id);
        if (ul.style.display=="none"){
            ul.style.display="block"
            li.style.backgroundImage="url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfhRceZWKvia_DhwyWyI1pS6R2Amb7nBOV-e2KIsCyIapBa1_bcJdALoYzQXtkNsnrZ0xoHbmwAwbbSXX_8dpOVhbetYrvFCxDne4BeHt_fFboKsjRyX3jBCV5euTpyQRwdS07ITc6a4o/)"
        }
        else {
            ul.style.display="none"
            li.style.backgroundImage="url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNSe0IhiSQQa9GCDxUVzCqJSKcTyolCvlGmZilPE0DRx0rQD-kxRkr279TWCLuczd7vffcIhvlh3sFGkImCT9moirtWGg4HTy8fvhE3QmeswkSHgkEc3wBeCGPKwAGofiKDaOhxWNCtDA/)"
        }        
}
function draw_obj(obj)
{
    document.write("&lt;li style='padding-left: 0px&gt;'");
    document.write("&lt;img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNDRl3Qj0TSPHuLHs1CtAk09XBA4HcpSWpzuwqWD3PaKFLXvEYcxP3fRLvBfIW-I11q5rfv0Qvw8m0S267l88GsyxVLKWMVzX1HP9iZ87txb7lmxhNqlSRK5aNSCmxQQ_ZOCdmCEscmdU/s1600/icon-yellow-bullet.png' /&gt;&lt;a dir='"+obj['dir']+"' href='"+obj['url']+"'&gt;"+obj['tag']+"&lt;/a&gt;");
    document.write("&lt;span dir='"+obj['dir']+"'&gt;("+obj['cnt']+")&lt;/span&gt;");
    document.write("&lt;/li&gt;\n");
}
function draw_tree(tree)
{
    for(var tag in tree){
        if(tag!='_item'&amp;&amp; tag!='_cnt'){
            var rid = Math.random();
            document.write("&lt;li class=submenu id=li_"+rid+" onclick=menu_exp('"+rid+"'); style='font-weight:bold;padding-left: 20px;background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNSe0IhiSQQa9GCDxUVzCqJSKcTyolCvlGmZilPE0DRx0rQD-kxRkr279TWCLuczd7vffcIhvlh3sFGkImCT9moirtWGg4HTy8fvhE3QmeswkSHgkEc3wBeCGPKwAGofiKDaOhxWNCtDA/) no-repeat left 0px;cursor: pointer'&gt;");
            document.write(tn(tag));
            document.write("("+tree[tag]['_cnt']+")");
            document.write("&lt;/li&gt;");
            document.write("&lt;ul id=ul_"+rid+" style='display:none;padding-left: 20px'&gt;");
            draw_tree(tree[tag]);
            document.write("&lt;/ul&gt;\n");
        }
    }
    if(tree['_item']){
        for(var i=0;i &lt; tree['_item'].length;i++){
            draw_obj(tree['_item'][i]);
        }
    }
        
}
</script>
<b:loop values='data:labels' var='label'>
<script>
    add_label('<data:label.name/>','<data:label.count/>','<data:label.url/>','<data:blog.languageDirection/>');
</script>
</b:loop>
      <ul>
      <script>
          draw_tree(label_tree);
      </script>
      </ul>
    <b:include name='quickedit'/>
  </div>
</b:includable>
</b:widget>


原出處為 http://gormit-gk.blogspot.tw/2010/01/blog-post_24.html

3.取代後幾乎就等於完成了,接下來是重覆機器式的繁瑣工作
   請看圖













 重新定義後的標籤結構 需遵照 下列格式 :
 假設你想要的樹狀結構是
 a1 - 
   b1 -
     (abc)你的文章
 就要填寫為這樣 ->  [a1][b1]abc 

 像我只有一層樹狀 所以只有 [a1]abc





 4.改完後應該像下圖這樣













5.趕快試一下 檢視你的blog是不是變成這樣了呢?