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

2013年10月9日 星期三

XAMPP - 設定MySQL管理帳號密碼

安裝XAMPP後,MySQL預設管理帳號為root,但未加密碼。我們可以透過以下網址變更MySQL管理帳號密碼
http://localhost/security/index.php

變更MySQL root密碼後,必須一併更新PHPMyAdmin的設定檔,否則將無法登入PHPMyAdmin管理頁面。
PHPMyAdmin的設定檔在xampp之phpmyadmin子目錄,檔名config.inc.php

/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'new_password';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Lang'] = '';

2013年6月26日 星期三

XAMPP - 變更Apache網站目錄

XAMPP網站預設安裝目錄為C:\xampp\htdocs\,我們可修改C:\xampp\apache\conf\httpd.conf檔案內容,變更網站目錄。假設要將網站目錄變更到D:\projects\wwwroot,步驟如下:

首先找到DocumentRoot設定,在原來設定項前插入#,使該項設定變為註解
# DocumentRoot "C:/xampp/htdocs"
之後加入下列設定項
DocumentRoot "D:/projects/wwwroot"

接著尋找<Directory>設定,同樣在設定項前插入#,使該項設定變為註解
#<Directory "C:/xampp/htdocs">
之後加入下列設定項
<Directory "d:/projects/wwwroot">


PHP變數

PHP變數命名時須符合以下規則:

  • 使用$符號開頭
  • 變數名稱起始字元:_或英文字母
  • 變數名稱後續字元:_或英文字母或數字
  • 區分大小寫
  • 不能使用保留字

宣告時不需要設定資料型別,例如:
$username
$_passswd

程式中使用=來指派變數值,例如:
$user1 = "Mike";

我們也可以使用參照指派方式,讓不同變數使用用一空間,彼此連動。例如下面程式變數$user2指向變數$user1,之後只要更改其中一個變數值,另一個變數就一起連動。
$user1 = "Mike";
$user2 = &$user1; //$user2指向$user1變數
echo $user1.'';
echo $user2.'';
$user1 = "Tina";
echo $user1.'';
echo $user2.'';

PHP還允許使用可變動變數,也就是變數名稱本身為動態。例如
$school = "nkut";
$nkut = "nankai university of technology";
echo $school.'';
echo $$school;

設定Eclipse檔案存檔編碼

使用Eclipse開發PHP應用程式,PHP存檔時建議使用utf-8編碼。
我們可由功能表命令Window/Preferences,設定工作區檔案預設使用utf-8編碼存檔:

另外也可以由功能表命令File/Properties,設定個別檔案的存檔編碼方式:

2013年6月14日 星期五

Android程式設計 - HTTP資料傳遞(2)使用POST

假設伺服端httppost.php網頁如下,:
<?php
//宣告使用utf-8編碼
header("Content-Type:text/html; charset=utf-8");
$user=$_POST['login_user'];
$pass=$_POST['login_pw'];
echo "login_user=".$user.";login_pw=".$pass;
?>

我們可以先使用以下表單來驗證網頁功能
<html>
<body>
測試POST資料傳送:
<form method="POST" action="http://163.22.249.40/myPHP/httppost.php">
帳號:
<input type="text" name="login_user" size="20"value="sswu" /><br />
密碼:
<input type="text" name="login_pw" size="20" value="1234" /><br />
<input type="submit" name="btnSend" value="送出" /><br />
</form>
</body>
</html>

HTTP POST與HTTP GET主要差異在於參數資料傳遞方式,使用POST方式時必須使用setEntity()設定POST參數,程式如下:

String Url = "http://my_webserver/httppost.php";
//設定POST參數
List postData = new ArrayList();
postData.add(new BasicNameValuePair("login_user", "sswu"));
postData.add(new BasicNameValuePair("login_pw", "0123"));
String result = httpGET(Url, postData);
if (result == null) {
//顯示錯誤訊息
}
        ...

    /**
     * Issue a POST request to the server.
     * @param url POST address.
     * @param params request parameters.
     */
    private String httpPOST(String url, List params){ 
        HttpPost post = new HttpPost(url);
        try {
            //送出HTTP request
            post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            //取得HTTP response
            HttpResponse httpResponse = new DefaultHttpClient().execute(post);
            //檢查狀態碼,200表示OK
            if (httpResponse.getStatusLine().getStatusCode()==200){
                //取出回應字串
                String strResult = EntityUtils.toString(httpResponse.getEntity());
                return strResult;
            }
        catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

Android程式設計 - HTTP資料傳遞(1)使用GET

假設伺服端httpget.php網頁如下,:
<?php
//宣告使用utf-8編碼
header("Content-Type:text/html; charset=utf-8");
$user=$_GET['login_user'];
$pass=$_GET['login_pw'];
echo "login_user=".$user.";login_pw=".$pass;
?>

我們可以先使用以下表單來驗證網頁功能
<html>
<body>
測試GET資料傳送:
<form method="GET" action="http://163.22.249.40/myPHP/httpget.php">
帳號:
<input type="text" name="login_user" size="20"value="sswu" /><br />
密碼:
<input type="text" name="login_pw" size="20" value="1234" /><br />
<input type="submit" name="btnSend" value="送出" /><br />
</form>
</body>
</html>

HTTP GET是將參數附加在URL之後,例如:http://my_webserver/httpget.php?login_user=sswu&login_pw=1234,Android中可使用HttpGet 物件進行HTTP GET資料傳遞,程式如下:

String Url = "http://my_webserver/httpget.php";
//設定GET參數
List getData = new ArrayList();
getData.add(new BasicNameValuePair("login_user", "sswu"));
getData.add(new BasicNameValuePair("login_pw", "0123"));
String result = httpGET(Url, getData);
if (result == null) {
//顯示錯誤訊息
}
        ...

    /**
     * Issue a GET request to the server.
     * @param url GET address.
     * @param params request parameters.
     */
    private String httpGET(String url, List params){
        //組合成http get格式
        StringBuilder sb = new StringBuilder();
        sb.append(url).append("?");
        for (NameValuePair nvp : params) {
            try{
                sb.append(nvp.getName()).append("=").append(URLEncoder.encode(nvp.getValue(), "utf-8"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            sb.append('&');
        }
        sb.deleteCharAt(sb.length()-1);
        HttpGet get = new HttpGet(sb.toString());
        try {    
            //送出HTTP request並取得HTTP response
            HttpResponse httpResponse = new DefaultHttpClient().execute(get);
            //檢查狀態碼,200表示OK
            if (httpResponse.getStatusLine().getStatusCode()==200){
                //取出回應字串
                String strResult = EntityUtils.toString(httpResponse.getEntity());
                return strResult;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

2013年3月5日 星期二

PHP陣列資料(2)


建立二維陣列

直接賦值
$score['學生1']['國文']=78;
$score['學生1']['英文']=95;
$score['學生1']['數學']=83;

使用array()函式
$score = array (array(78, 95, 83),
array(80, 78, 91),
array(72, 65, 76));

使用array()函式嵌套
$score1 = array(78, 95, 83);
$score2 = array(80, 78, 91);
$score3 = array(72, 65, 76);
$score = array($score1, $score2, $score3);

2013年3月3日 星期日

PHP陣列資料(1)


一維陣列
陣列名稱[索引鍵] = 元素值;

沒有指定索引鍵值時,自動由0開始做為索引鍵值
$myArray[]='a'; //相當於$myArray[0] = 'a';
$myArray[]='b'; //相當於$myArray[1] = 'b';
$myArray[]='c'; //相當於$myArray[2] = 'c';

若指定某個索引值,其後陣列項目之索引鍵值會自動接續
$myArray[5] = 'a';
$myArray[] = 'b'; //相當於$myArray[6] = 'b';
$myArray[] = 'c'; //相當於$myArray[7] = 'c';

也可使用字串做為索引鍵
$myProfile['name'] = 'Wu, ShyiShiou';
$myProfile['affiliation'] = 'Nankai University of Technology';
echo $myProfile['name'].'<br />";
echo $myProfile['affiliation']."<br />";

陣列變數在雙引號字串中要在前後加上大括弧({、})才能正確解譯變數值
echo "Hello, my name is {$myProfile['name']}";

使用array()函式建立一維陣列
陣列名稱 = array(索引鍵1=>元素值1,索引鍵2=>元素值2, …索引鍵n=>元素值n );
如果沒有指定索引鍵值,自動由0開始做為索引鍵值
$myArray = array('a', 'b', 'c');
也可使用字串做為索引鍵,稱為結合式陣列
$myProfile = array('name'=>'Wu, ShyiShiou', 'affiliation' =>'NKUT, Dept. of E.E.');



2013年2月3日 星期日

使用GCM服務(四) 訊息推播伺服器(2)

Plain text的POST請求封包由於只支援單點推播,HTTP body內必須改用registration_id,而data欄位值須改為data.<key>=value,例如:data.title=Android Apps初學必修課&data.isbn=978-986-276-704-7&registration_id=reg_id。另外,中文字編碼時可能與「&」符號衝突,因此最好使用urlencode()函式處理。
以下PHP程式碼使用plain text格式送出GCM請求封包。
  define("GOOGLE_API_KEY", "your_api_key");
  $reg_id = 'device_reg_id';
  //payload data
  $payload = 'data.contentTitle='.urlencode('耕雲智慧').
'&data.contentText='.urlencode('
測試訊息推播');
  //http header
  $headers = array('Authorization: key=' . GOOGLE_API_KEY,
'Content-Type:application/x-www-form-urlencoded;charset=UTF-8');
  $fields = $payload.'&registration_id='.$reg_id;
  //curl connection
  $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'https://android.googleapis.com/gcm/send');
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
  $result = curl_exec($ch);
   curl_close($ch);
  echo $result;
?>

使用GCM服務(三) 訊息推播伺服器(1)


負責與用戶端裝置對談,記錄API key及用戶行動裝置之registration ID,並向GCM伺服器(https://android.googleapis.com/gcm/send.)送出POST請求封包。
POST請求封包可以是明碼(plain text)或JSON格式,但多點廣播時只能使用JSON格式。
JSON格式POST請求封包 header中必須內含以下資料:
l  Authorization: key = YOUR_API_KEY
l  Content-Type: application/jsontext)。
JSON格式POST請求封包 body必須是JSON物件格式字串,可包含以下欄位內容:
l  registration_ids  必要欄位。由戶行動裝置之registration Id所組成之字串陣列,最多1000個。
l  data  選用欄位。JSON物件格式字串,用來表示所要推播的訊息資料,例如:"data":{"title":"Android Apps初學必修課","isbn": "978-986-276-704-7"},總資料量不可超過4kb
l  dry_run  選用欄位,預設為false。當設定此項,表示測試POST請求封包,但GCM Server並不會真正送出推播訊息。
以下PHP程式碼使用JSON格式送出GCM多點訊息推播請求封包。
  define("GOOGLE_API_KEY", "your_api_key");
  $registrationIDs = array( 'reg_id1', 'reg_id2', ...);
   //payload data
  $payload = array('title' => '耕雲智慧', 'subtitle' => '測試訊息推播');
  //http header
  $headers = array('Authorization: key=' . GOOGLE_API_KEY,
                 'Content-Type: application/json');
  $fields = array('registration_ids' => $registrationIDs,
          'data' => $payload);
  //curl connection
  $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'https://android.googleapis.com/gcm/send');
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
  $result = curl_exec($ch);
  curl_close($ch);
  echo $result;
?>


2013年1月24日 星期四

XAMPP與Skype Port衝突問題

Microsoft已決定停止MSN服務,全面改用Skype,但Skype預設會使用80及443這二個ports,使得開啟Skype時就不能使用Apache。
要解決這個問題,可由Skype功能表「Tools/Options...」,從「Advanced/Connection」設定中,取消勾選「Use port 80 and 443 as alternatives for incoming connections」項目即可。


2013年1月7日 星期一

使用CKEditor

CKEditor是一款非常方便好用的線上網頁編輯模組,可讓用戶自行線上修改網頁內容

1. http://ckeditor.com/下載CKEditor,可直接下載「Basic Package」、「Standard Package」或「Full Package」,或下載自訂項目。

2. CKEditor解壓到Web Server
3. 開啟ckeditor/samples/index.html,有完整的使用範例及教學。
4. 參考範例編輯測試網頁
ckeditor.html

post_edit.php
5. 測試網頁
ckeditor.html頁面執行結果,直接在CKEditor編輯頁面內容
按下Submit按鈕之結果

2012年6月23日 星期六

PHP 字串資料

引號表示法
· 可使用單引號或雙引號
· 字串中反斜線\被稱為跳脫字元(escapes),如果字串中要顯示反斜線時,就必須以二個反斜線來表示

echo 'XAMPP安裝路徑在d:\\xampp\\中';

· 單引號表示法字串中的變數合視為一般字串,而雙引號表示法字串中的變數視為變數編譯

<?php
$language = "PHP";
echo '$language 網頁設計<br />';    //結果為$language 網頁設計
echo "$language 網頁設計";      //結果為PHP 網頁設計
?>

heredoc表示法
$變數名稱 = <<<自訂名稱
字串內容

自訂名稱;

· 字串內容可以是使用任何字元,變數會被編譯

<?php
$language = 'PHP';
$slogan = <<<msg
$language, I'm lovin' it.
msg;
echo $slogan;
?>
· 開頭的自訂名稱之後不可放置任何字元,結尾的自訂名稱一定要放在行首
執行結果:
PHP, I'm lovin' it.

nowdoc表示法
$變數名稱 = <<<'自訂名稱'字串內容

自訂名稱;

· 跳脫字元會視為一般字元,變數也不會被編譯

<?php
$language = "PHP";
$slogan =  <<<'msg'
$language, I'm lovin' it.
msg;
echo $slogan;
?>
執行結果:
$language, I'm lovin' it.

2012年6月20日 星期三

Symphony+XAMPP快速建置網站

Symphony是一款架構在MySQL+XSLT+PHP技術上的開放源碼內容管理系統;XAMPP是一個相當容易安裝的Apache擴充版本,而且已經包括了MySQL、PHP及Perl等軟體,二者混搭可快速建構網站專案。安裝程序如下:

1.安裝XAMPP
2.啟用啟用PHP LibXML模組
3.建立提供Symphony專案使用之MySQL資料庫
4.設定Symphony專案


詳細內容請參考XAMPP+Symphony說明文件

建立Eclipse PHP開發環境

要使用Eclipse開發PHP程式,需安裝PHP Development Tools,程序如下:
1. Eclipse功能表『Help/Install New Software』。
2. 選擇從「Indigo - http://download.eclipse.org/releases/indigo」網站更新。
3. 展開「Programming Languages」節點,勾選「PHP Development Tools」及「JavaScript Development Tools」。
4. 按下「Next>」按鈕開始安裝。



2012年5月10日 星期四

XAMPP安裝

XAMPP是一款非常方便的Apache+PHP+MySQL開發工具,可以到網站免費下載,網址:http://www.apachefriends.org/zh_tw/xampp.html
安裝後執行XAMPP Control Panel,由面板中點選Start按鈕啟用所需的服務。

Apache服務需要使用80port,如果電腦80 port被佔用,可使用netstat -ano指令觀察是那一個程式行程(記下PID號碼)佔用了80 port。像IIS、SQL Server Reporting Services、Skype預設都會使用80 port。

之後由Windows工作管理員(按CTRL+SHIFT+ESC開啟),根據所查到的PID,結束掉該程序,再重新啟用Apache。