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);
    }
}

就大功告成拉!

這一篇將介紹如何讓Silverlight在事件觸發之後傳輸資料給PHP的SOAP web service.

STEP1: 在VS2010的Silverlight專案按右鍵 > Add Service Reference

step3

STEP2: 確認你的wsdl 已經上傳到web server上之後, 將他的路徑輸入在 “Address”的欄位之中. 並按下 “Go”, 就可以看到ageService的SOAP出現在Services的欄位中.

此外, 為了方便起見, 我們也將Namespace命名程成 “AgeService” (這名字將會在xaml.cs中再度用到)

step4

Step3 : 按下OK之後就會發現專案檔中出現兩個新的檔案, 一個是AgeService, 另一個是config檔. 雙擊config檔.

step5

Step4: 你會發現剛剛設定的東西已經被記錄到Config檔裡面去了.

step6

STEP5: 接下來是處理XAML.CS中的事件, 其中包含了兩個function的CODE:

namespace SilverlightApplication2
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {

            AgeService.ageServicePortTypeClient client = new AgeService.ageServicePortTypeClient();
            client.getAgeCompleted += new EventHandler(client_getAgeCompleted);
            client.getAgeAsync(txtName.Text);
            HtmlPage.Window.Alert(txtName.Text);
        }

        void client_getAgeCompleted(object sender, SilverlightApplication2.AgeService.getAgeCompletedEventArgs e)
        {
            HtmlPage.Window.Alert(e.Result.ToString());
        }
    }
}

STEP6: 將Silverlight Application再BUILD一次, 並將新的XAP檔上傳到遠端主機上.

STEP7: 再RUN一次index.php, 並輸入關鍵字 “alfie” 則輸出”27″, 這樣就大功告成了!
last

檔案之間的對照表:
comparison

1. 在linux輸入指令: crontab -e 進行系統排程編輯模式

2. 格式大概如下, 前面5個欄位分別是是執行的日期時間(分 時 日 月 年), 後面的路徑是要執行的程式, 以下的意思是指每天的凌晨12點會執行一次此程式:

 0 0 * * * /usr/local/www/awstats/cgi-bin/awstats.sh

3. 現在我們要排程執行PHP網頁, 因此需要用LINUX的PHP程式來執行PHP網頁, 指令如下:

30 23 * * * /usr/local/bin/php /home/xxx/public_html/mytesting.php >> /host/cron.log 2>&2

以上的指令含意是, 每天的晚上11點30分會使用PHP程式(路徑在/usr/local/bin/)來執行PHP網頁(路徑在/home/xxx/public_html/), 而後面的意思是執行完畢後的紀錄檔會延伸儲存在 /host/cron.log 裡面, 讓你知道執行的結果, 否則執行的狀況你是沒辦法直接看到的.(使用 * 的意思是不管何年何月何日, 若指定日期, 那就表示只會在該日期執行一次) 所以若要系統每天固定時間內替你執行程式, 就要把格式寫清楚囉, crontab的時間格式如下:

field              allowed values
—–             ————–
minute            0-59
hour               0-23
day of month   1-31
month            1-12 (or names, see below)
day of week    0-7 (0 or 7 is Sun, or use names)

 若想知道更詳細的資料, 可以輸入 man 5 crontab, 參考詳細的說明. 除此之外, 要例行執行程式, 寫法也可以如下:

string            meaning
——           ——-
@reboot        Run once, at startup.
@yearly         Run once a year, “0 0 1 1 *”.
@annually      (same as @yearly)
@monthly       Run once a month, “0 0 1 * *”.
@weekly        Run once a week, “0 0 * * 0”.
@daily           Run once a day, “0 0 * * *”.
@midnight      (same as @daily)
@hourly         Run once an hour, “0 * * * *”.

如果我想要每分鐘執行一次, 要怎麼寫?

*/1 * * * * /usr/local/bin/php /home/xxx/public_html/mytesting.php >> /host/cron.log 2>&2

*/1 就是讓你連續每分鐘執行一次的關鍵寫法.