pecl_http is required for the php function: http_build_url()
in order to use this function, we need to install the package manually,
below is the steps that required to install on your centOS server.

1. Install PHP Pear if not installed yet:
yum install php-pear

2. Install GCC if not installed yet:
yum install gcc

3. Install cURL if not installed yet:
yum install curl-devel

4. Install following library if not installed yet:
yum install php-devel
yum install zlib-devel
yum install pcre-devel

5. Start the main installation (use default value for answering installation)
As version 1.* is largely different with version 2.*, so we suggest install 1.7.6
/usr/bin/pecl install pecl_http-1.7.6

6. Add the following line to /etc/php.ini file
extension=http.so

7. restart apache server so the extension can be loaded
service httpd restart

——

遇到磁碟空間不足時, 我們常常需要找出罪魁禍首, 所以需要知道哪個目錄快滿了(或已經滿了).
1. 磁碟空間的百分比
df -h
可以看到每個磁碟空間的百分比

2. 找出指定目錄下10大檔案 (這樣我們才知道要從何刪起)
du -a /var | sort -n -r | head -n 10
參考: http://www.cyberciti.biz/faq/how-do-i-find-the-largest-filesdirectories-on-a-linuxunixbsd-filesystem/

3. 其他du的用法:
參考: http://www.tecmint.com/check-linux-disk-usage-of-files-and-directories/

當在開發專案時, 遇到一些問題需要上到正式機才能測試,
就需要不停的做專案UPDATE的動作,
而這時GAE就會不停的問你帳號密碼,
輸入之後才會將你的程式DEPLOY到雲端上.
要如何避免一直輸入帳號密碼呢?
其實很簡單, 就是要使用COMMAND PROMPT來做DEPLOY的動作 (不要用SDK GUI的一鍵功能)
指令如下:

C:\Program Files (x86)\Google\google_appengine>appcfg.py --oauth2 update C:\我的專案路徑/
這時你的瀏覽器會跳出要求你輸入帳號密碼或授權, 你只要同意後, 以後都可以直接DEPLOY了

所以, 不需要再輸入帳號密碼的指令如下:
C:\Program Files (x86)\Google\google_appengine>appcfg.py update C:\我的專案路徑/

我們有時候需要在專案中提供一個檔案上傳的功能,
讓所有的文件都可以以公開的方式讓使用者下載,
這時就需要依賴Google提供的gsutil 來處理

GSUTIL下載連結: https://developers.google.com/storage/docs/gsutil

按照以上網頁的安裝方式:
確認你的本機已經有 Python 與 Gsutil
這裡的範例是 Python 在 C:\Python27, GSUtil在 C:\gsutil

使用Google Cloud Storage, 將指定的Bucket 設定於設為公開的指令如下:
c:\Python27>python C:\gsutil\gsutil.py -m setdefacl public-read gs://mybucket_name

這樣未來透過程式上傳的的OBJECT都會是PUBLIC-READ的狀態喔

1) 安裝 AppServ
2) 安裝成功後你會在AppServ的bin資料夾中照到openssl.exe
3) 在cmd執行以下指令:

openssl req -config C:\AppServ\Apache2.2\conf\openssl.cnf -new -out C:\AppServ\Apache2.2\conf\server.csr -keyout C:\AppServ\Apache2.2\conf\server.pem

openssl rsa -in C:\AppServ\Apache2.2\conf\server.pem -out C:\AppServ\Apache2.2\conf\server.key
openssl x509 -in C:\AppServ\Apache2.2\conf\server.csr -out C:\AppServ\Apache2.2\conf\server.crt -req -signkey C:\AppServ\Apache2.2\conf\server.key -days 365

4) 在 C:\AppServ\Apache2.2\conf\httpd.conf 將
#LoadModule ssl_module modules/mod_ssl.so 的註解去掉
#Include conf/extra/httpd-ssl.conf 的註解去掉

5) 在 C:\AppServ\Apache2.2\conf\extra\httpd-ssl.conf 設定如下:
SSLCertificateFile “C:\AppServ\Apache2.2\conf\server.crt”
SSLCertificateKeyFile “C:\AppServ\Apache2.2\conf\server.key”

6) Window 鍵 + R
7) 輸入 services.msc
8) 重新啟動 Apache Server
9) 在瀏覽器輸入 https://localhost, 成功!

註: 如果PORT 443, 剛好被別的應用程式所使用, APACHE SERVER會重開失敗喔! 要怎麼知道伺服器PORT443 是否被使用? 請參考本篇文章 Windows 如何知道哪個應用程式正在使用哪個PORT?

Google Cloud Platform 開始支援PHP了!
雖然還是在BETA階段, 但還是讓人忍不住要測試一下呀~
這次的測試是使用CodeIgnitor來使用,
結合Google Cloud SQL,
在本機連資料庫MYSQL是沒問題,
但DEPLOY之後發現正式機一直沒辦法連上.
錯誤資訊如下:

A Database Error Occurred
Unable to connect to your database server using the provided settings.
Filename: core/Loader.php
Line Number: 346

查了stackoverflow之後才發現 /application/config/database.php的設定需要微調才能連到資料庫:

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '密碼';
$db['default']['database'] = '資料庫名稱';
$db['default']['dbdriver'] = 'mysqli';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = FALSE;
$db['default']['stricton'] = FALSE;
$db['default']['socket'] = '/cloudsql/PROJECT-ID:INSTANCEID';

最後一行的SOCKET是codeignitor預設沒有的參數,
要記得加上才能成功連線

連線之後, 你會發現網站雖然可以啟動了,
但都沒有資料!怎麼回事呢?
原來是因為他會一直預設連到localhost,
這時必須要修改mysqli的drivers.

到 application/system/database/drivers/mysqli/mysqli_driver.php 將 db_connect 取代成以下的函數:

function db_connect()
{
    if(isset($this->socket)){
        return mysqli_connect(null, $this->username, null, $this->database, null, $this->socket);
    }
    elseif ($this->port != ”)
    {
        return mysqli_connect($this->hostname, $this->username, $this->password, $this->database, $this->port);
    }
    else
    {
        return mysqli_connect($this->hostname, $this->username, $this->password, $this->database);
    }
}

就大功告成拉!

1. 先將UI透過Builder拉好

2. 將控制項都對應到CODE(按住CTRL直到CODE中)

3. 輸入相對應的CODE。


#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self initView];
}

- (void) initView {
//Field init

//Behavior Binding
self.webView.delegate = self;

//Other init logic
NSString * filePath = [[NSBundle mainBundle] pathForResource:@"home" ofType:@"html"];

NSURL * url = [NSURL fileURLWithPath:filePath];
NSURLRequest * req = [NSURLRequest requestWithURL:url];

[self.webView loadRequest:req];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)dealloc {
[_webView release];
[super dealloc];
}
@end

4. 此時需要調整Build Phase的一些設定,把Jquery.js從Compile Sources移到下方的Copy Bundle Resources

5. 這時JavaScript就可以Works了

6. 最後再處理下方的BUTTON對應Js的CODE(剛好都有overview的div)

(home.html 相對應的HTML)