2020年4月21日 星期二

網站摸索筆記:MySQL 插入中文問題

MySQL 可能因為語系導致寫入資料錯誤,因此需要變更語系設定為UTF-8。

以下列出可能導致中文寫入失敗的部分:
1) 欄位設定
- 一執行insert 指令就會出現某個欄位寫入失敗,建議可以先試試變更欄位語系
- 指令:alter table [資料表名稱] change [原欄位名稱] [新欄位名稱] [資料型態] [語系設定]- 例:alter table product change content content varchar(500) character set utf8;

2) MySQL 設定
- 也許變更資料欄位後問題就解決了,但建議還是檢查一下MySQL設定

-進入後改這一段
[mysqld]
character-set-server=utf8

3) 資料庫設定
- 進入mysql後,可使用以下指令檢查是否有設定不是utf-8
- show variables where Variable_name like '%character_set%';


4) 資料表設定
- 可以透過以下指令查看資料表語系設定
- show create table [資料表名稱]
例:show create table product;

- 變更資料庫語系指令:alter database [資料庫名稱] character set utf8
例:alter database mydb character set utf8

- 變更資料表語系指令:alter table [資料表名稱] character set utf8
例:alter table product character set utf8




2020年4月17日 星期五

網站摸索筆記:MySQL 入門常用指令

整理幾個基本指令

進入MySQL:mysql -r [username] ip [password]; 
- 進入後會看到

離開MySQL:mysql>exit;

查看目前版本:mysql>select version();

顯示目前資料庫:show databases;
- 會列出目前的資料庫

建立資料庫:create database [資料庫名稱],例:create database mydb;
-建立後可再用show databases; 查詢

使用資料庫:use [資料庫名稱],例:use mydb;
- 選擇資料庫後就可使用針對資料庫的資料表操作

顯示目前資料庫:show tables;
- 會列出資料庫mydb中的資料表

建立資料表:create table [資料表名稱](欄位名 屬性 資料型態, 欄位名 資料型態... ),
例:create table test_tb(id integer auto_increment primary key, description varchar(256), po_time datetime);
- 欄位id: integer- 資料型態為整數, auto_increment- 自動增加(整數+1),primary key(資料表索引)
- 欄位description: varchar(256)資料型態為字串,最大長度為256bytes
- 欄位po_time: 資料型態為日期(yyyy-mm-dd hh:mm:ss)

顯示資料表欄位:describe [資料表名稱]
- 列出資料表中的欄位定義


修改欄位名稱、定義:alter table [資料表名稱] change [原欄位名稱] [新欄位名稱] [資料型態]
例:alter table test_tb change po_time post_date date

新增欄位:alter table [資料表名稱] add column ([新欄位名稱] [資料型態])
例:alter table test_tb add column(ps varchar(10));

移除欄位:alter table [資料表名稱] drop column [欄位名稱]
例:alter table test_tb drop column ps;

清空資料表:truncate table [資料表名稱]
- 刪除資料表中的資料內容,資料表欄位不變

刪除資料表:drop table [資料表名稱]

插入欄位資料:insert [資料表名稱] ([欄位名稱], [欄位名稱]...) value('欄位值', '欄位值'..)
例:insert test_tb (name) value('insert from sql');

查詢欄位資料:select  [欄位名稱], [欄位名稱]... from [資料表名稱]]
例:select name,id from test_tb;

查詢所有欄位資料:select * from [資料表名稱]]
例:select * from test_tb;

條件式查詢:select * from [資料表名稱] where (條件1 and/or 條件2)
例1:select * from test_tb where id>1 and id<5  (兩個條件取交集)
例2:select * from test_tb where id<3 or id>5; (兩個條件取聯集)
例3:select * from test_tb where id=3; (等於單一條件)
例4:select * from test_tb where id between 3 and 5; (介於兩個數值之間)

查詢結果資料排序:select * from [資料表名稱] order by  [欄位名稱]
例1:select * from test_tb order by name; (由小->大)
例2:select * from test_tb order by name desc; (由大->大)

以字串查詢欄位內容:select [欄位名稱] from [資料表名稱] where [欄位名稱] like [字串]
例1:select name from test_tb where name like '33'; (字串完全相等於33才會查出)
例2:select name from test_tb where name like '%33%'; (字串包含33就會查出)

刪除欄位資料:delete from [資料表名] where (條件1 and/or 條件2)
例1:delete from test_tb where id=3;
例2:delete from test_tb where id=2 or name like '%33%';

編輯欄位資料:update [資料表名] set [欄位名稱]='欄位值' where(條件1 and/or 條件2)
例:update product set product_content='產品內容文字' where product_id= 4;


2020年4月14日 星期二

網站摸索筆記:PHP讀取網站設定.ini檔

網站在本機開發後,要部屬到伺服器上,
不同環境的DB連線資訊有些不同,因此想將網站設定檔獨立為本機、伺服器兩份,
這樣就不用再因環境不同而修改程式。

新增一個.ini檔案紀錄DB,內容如下:
[database]
db_name'mydb'
db_user'root'
db_password'[root帳號的密碼]'
db_url='localhost:3306'
- [database]: 這是sction,區分ini檔中的各區塊
- 其下的db_name、db_user、db_password、db_url都是參數
- 儲存檔名為 "webconfig.ini"

新增一個php檔案,內容如下:
<?php
//使用parse_ini_file來讀取.ini檔案,會以陣列的方式來存放內容
$ini = parse_ini_file('webconfig.ini',true);

//ini中的sction與參數名會變成陣列的索引 $ini[secion][參數名]
$db=$ini["database"]["db_name"];
$dbhost=$ini["database"]["db_url"];
$dbuser=$ini["database"]["db_user"];
$dbpass=$ini["database"]["db_password"];

//分行列印讀取的陣列資料
echo '<pre>',print_r($ini);'</pre>';

//使用mysqli_connect()來進行DB連線
$link=mysqli_connect($dbhost,$dbuser,$dbpass);
if(! $link) {
    die ('DB連線失敗'mysqli_error($link));
}
echo 'DB連線成功';
?>
- 使用函式 parse_ini_file(),詳見手冊https://www.php.net/manual/en/function.parse-ini-file.php
- 使用print_r()來顯示陣列資料,參閱手冊https://www.php.net/manual/en/function.print-r.php

從瀏覽器看會看到如下畫面

* 透過webconfig.ini區分兩個環境所存取的DB位置
- 對在Google Cloud Platfom上的VM程式來說就是存Localhost的資料庫
- 本機開發則是透過IP連到遠端的DB


2020年4月13日 星期一

網站摸索筆記:從windonws傳輸檔案到GCP

從本機傳輸多個檔案到Google Cloud Platform,
可以透過SCP FTP來傳輸,步驟如下:

1) 建立Key:
     - 可以使用Putty來建立Private Key、Public Key(Putty下載https://www.putty.org/)
     - Private Key用於傳輸時進行驗證
     - Public Key則要加在GCP的VM SSH設定中

2) 透過winSCP進行連線
    - 安裝winSCP (winSCP下載https://winscp.net/download/WinSCP-5.17.3-Setup.exe)
    - 連線時選擇Private Key


下載Putty建立Key
https://www.putty.org/
-安裝後到目錄中,執行puttygen.exe


儲存Private Key
- 在如下畫面中,在key comment中輸入用戶名稱(這個名稱會在FTP連線時使用)
- 然後按儲存Private Key(這個Key也會在FTP連線時使用)


複製Public Key 如下Public Key文字


進入GCP的中繼資料SSH設定頁面
- 按下編輯,並貼上複製的Public Key到金鑰欄位


- 按下儲存就新增完成了


開啟winSCP輸入連線資料
- 檔案協定選擇SCP
- 輸入主機名稱
- 輸入使用者名稱(這使用者名稱要與建立Key時相同)
- 然後點擊進階

- SCP/Shell 中選擇sudo su,使用最高權限才可直接上傳檔案到想要的目錄中

- 身分核對中選擇資料的檔案


- 完成設定後回到連線畫面,按下登入,就可以連線到GCP的VM中了





網站摸索筆記:windows啟動Apache錯誤- 找不到VCRUNTIME140.dll

啟動apache時出現 "找不到VCRUNTIME140.dll"的錯誤訊息。

Apache下載時會需要安裝Visual C++ Redistributable for Visual Studio 2015-2019
- 在Apache下載官網上還附上下載連結了。
    vc_redist_x64下載

- 安裝後再重應該就可以正常啟動了


2020年4月12日 星期日

網站摸索筆記:GCP 安裝MySQL與設定

GCP VM安裝php, Apache後,再來安裝MySQL;
並讓開發的遠端可以連到MySQL中,這樣開發完成後再把網頁放到VM就上線了。

安裝MySQL
-輸入指令:sudo apt-get install mysql-server 

設定MySQL連線
-輸入指令:mysql_secure_installation 
- 會開始設定mysql的帳號root的密碼
- 以及密碼安全性的相關設定

啟動MySQL
-輸入指令:sudo systemctl start mySQL

確認MySQL服務
- 輸入指令:systemctl status mysql.service
- 出現如下Active 的資訊就表示服務啟動了


修改MySQL設定
- 預設MySQL是只允許本機存取,因此要修改成允許遠端存取
-  sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
- 將blind-address這一行的IP改成自己要遠端的IP,若不限制可以加上#註解掉



重新啟動MySQL
-輸入指令:sudo systemctl restart mySQL

嘗試登入SQL
- 輸入指令:mysql -u root -p
- 再輸入root帳號的密碼,看到以下畫面表示登入成功
- 輸入exit; 離開SQL


安裝php-MySQL套件
- 輸入指令:sudo apt install php-mysql
- 這動作安裝後php存取mysql的程式才能正常運作


接著設定VM的防火牆連線3306
- 因為會在本機開發,連到GCP上的資料庫,所以要調整VM設定
- 點擊GCP選單中的VPC網路>防火牆規則


-新增防火牆規則


-防火牆設定
 輸入名稱、說明,流量方向要選輸入

- 設定目標標記來建立VM跟防火牆規則的關連
  如下在VM中的網路標記就要加上dbserver,VM就會套用這個防火牆規則

測試telnet 
- 完成設定後可以從本機命令提示字元telnet [IP] 3306來測試
- 看到以下畫面就表示可以從本機連線到GCP的資料庫了


測試PHP 存取資料庫
- 以下PHP範例可測試資料庫連線
- sudo vi /var/www/html/dbconnect.php
<?php
$dbhost='localhost:3306';
$dbuser='root';
$dbpass='[root帳號的密碼]';
$link=mysqli_connect($dbhost,$dbuser,$dbpass);
if(! $link) {
    die ('DB連線失敗'. mysqli_error($link));
}
echo 'DB連線成功';
?>
- 出現DB連線成功就表示完成PHP與MySQL的環境設定


接下來就可以在不同電腦上開發程式,然後都連GCP的資料庫了。

2020年4月11日 星期六

網站摸索筆記:win10 安裝Apache、PHP

想在本機建立網站開發環境,需要安裝php、Apache;

下載Apache
-可以根據作業系統下載對應版本(我是下載64bit)
-下載時要根據支援性再去下載對應的php版本,如下圖就要下載或VC15/14的php
-另外記得還要下載對應的 vc_redist_x64


下載PHP
-https://windows.php.net/download/
-版本很多不確定差異在哪,所以就下載了vc15 x64 Thread Safe的版本




安裝Apache------------------------------------------
將解壓縮Apache檔案放到預計的路徑中
- 這個路徑會影響httpd.conf檔案中的對應設定(我是放到F:\中)

設定httpd.conf檔案
Define SRVROOT "F:\Apache24" (存放解壓縮Apache檔案夾的路徑)
- 預設會將此路徑套用到以下資料參數 "ServerRoot"、"DocumentRoot "、"Directory "、"ScriptAlias"

安裝Apache服務
- 以管理者權限進入命令提示字元
- 輸入指令:[資料夾路徑]\bin\httpd.exe -k install -n apache 
(例:>F:\Apache24\bin\httpd.exe -k install -n apache)

以下是安裝成功的訊息,雖然有個我不知道是什麼的error;若有高手知道也請不吝告知。

這是第一次安裝出現的錯誤訊息,原因是SRVROOT <=這個參數設定錯誤,導致路徑不對。


啟動Apache服務
- 輸入指令:[資料夾路徑]\bin\httpd.exe -k start -n apache 
  (例:F:\Apache24\bin\httpd.exe -k start -n apache)
-在瀏覽器中輸入測試網址:http://localhost:8080, 或http://127.0.0.1:8080
若成功就會開啟原本在Apache安裝包中的測試頁,顯示It works!
(網址後的:8080<- 這個Port號設定可自訂)


*(補充) Port的設定在httpd.cong檔案中,有一個Listen 的參數
預設是80,但若本機有安裝IIS,80port就會被占用,所以要換成8080。

*(補充) 網站位置的設定預設為<Directory "${SRVROOT}/htdocs">
  根據所設定的SRVROOT參數而定,也可以自行變更。
  開發網站時也要將網頁檔放到此路徑中才能運作。


安裝PHP------------------------------------------
將解壓縮php檔案放到預計的路徑中
- 這個路徑會影響php的對應設定(我是放到c:\中)
- 解壓縮的目錄中會有php.ini-production, php.ini-development兩個檔案
- 先複製一個並變更檔名為php.ini (Apache中要設定 php.ini的對應路徑)

修改php.ini設定
- 修改以下extension_dir的參數為,php資料夾中的ext路徑
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
extension_dir = "C:\php-7.4.4-Win32-vc15-x64\ext"
; On windows:
extension_dir = "C:\php-7.4.4-Win32-vc15-x64\ext"

*Dynamic Extensions區塊中有很多extension,根據需要將#去掉

設定Apache取得PHP資料------------------------------------------
修改httpd.conf檔案
- 在檔案中加入php.ini檔案路徑資訊
#php.ini檔案路徑
PHPIniDir "C:/php-7.4.4-Win32-vc15-x64"

-在Dynamic Shared Object中載入php DLL
#載入php7
LoadModule php7_module C:/php-7.4.4-Win32-vc15-x64/php7apache2_4.dll

-在IfModule mime_module區塊中加入檔案php副檔名
<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php .phps
</IfModule mime_module>

新增一個測試檔案:index.php,程式內容如下:
<?php  phpinfo(); ?>
-將檔案放到Apahche網站路徑中 \htdocs\

-在<IfModule dir_module>區塊中加入php測試路徑
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

重新啟動Apache
- 輸入指令:[資料夾路徑]\bin\httpd.exe -k restart -n apache 

安裝完成
- 在瀏覽器中輸入:http://localhost:8080/,看到以下頁面表示完成了


PHP.ini檔案上傳設定
file_uploads = On (表示允許上傳檔案)
- upload_tmp_dir =php_tmp_dir (設定檔案上傳暫存資料夾)
- upload_max_filesize = 20M (上傳檔案的尺寸上限)
- max_file_uploads = 20  (上傳檔案的數量上限)
- post_max_size = 20M(POST上傳檔案的尺寸上限,與upload_max_filesize配合,會以最小的為限制)
- max_input_time = 60 (POST上傳時的最大上傳時間為60秒)

2020年4月6日 星期一

網站摸索筆記:GCP VM安裝 Apache、php服務,網頁檔案上傳

建立GCP VM完成後,再來繼續安裝網站VM應有的服務。

VM執行個體頁:
點擊VM個體的名稱。

點擊SSH,開啟SSH連線視窗:


點擊SSH,開啟SSH連線視窗:
接下來要在這視窗輸入安裝服務的指令,
指令來自Google的教學,也有其他作業系統的設定方式。



安裝Apache, PHP:
sudo apt-get update
sudo apt-get install apache2 php libapache2-mod-php

測試安裝結果
可以從VM清單中直接用瀏覽器開啟IP位置,
就會顯示已安裝的Apache預設頁面



(上傳方法1)使用SSH上傳網站檔案:
SSH視窗有一個上傳檔案的功能,上傳後檔案會在路徑Home之下,
但是Apache的服務站台路徑為 /var/www/html/,所以就要再將檔案搬到對的路徑中。



輸入移動檔案的指令:
sudo mv GCP_test1.html /var/www/html/
IP位置後加上檔案名稱,就可以開啟網頁了。



(上傳方法2)
從選單中找使用 Storage功能

Storage設定頁:
建立值區(英文是Bucket明明很清楚 )

Storage建立頁:
設定的內容就先用預設的。
Storage管理頁:
設定完後,就可以上傳檔案了。


從VM中下載Storage的檔案
sudo gsutil cp -r gs://web1_storage/ /var/www/html/
複製整個目錄檔案的指令 sudo gsutil cp -r gs://[bucket_name] [目標路徑]
如果只要複製一個檔案指令為 sudo gsutil cp gs://[bucket_name]/[檔名] [目標路徑]
可參考gsutil/commands

測試網站
從IP路徑下/bucket_name/page_name.html,就可以測試網站了




2020年4月5日 星期日

網站摸索筆記:建立Google Cloud Platform VM

聽說Google Cloud Platform的服務有VM、Firewall、DB,還有很多API可以使用,
只是對於初心者來說,從基本的建立VM開始吧。

只要有Google 帳號的都可以使用Google Cloud Platform,


進入GCP顯示如下畫面:
由於使用專案方式來管理各項服務,所以要先建立一個專案


選擇專案視窗:
可以從選擇專案的地方來新增專案


新增專案畫面:
輸入專案名稱,位置的部分我不清楚有甚麼影響,所以就沒選擇了。

專案Dashboard畫面:
新增完成後會看到以下畫面。


功能選單:
建立專案後,在來就要建立專案下的VM;
Compute Engine中,點擊VM執行個體


因為還沒有VM執行個體,所以需要先建立。

建立執行個體畫面:
- 沒特別想設定的名稱,就用預設的
- VM區域選擇台灣,應該會快一點
- 機器類型 選擇f1-micro,這部分主要影響費用,所以先選一個便宜的。
- 開機磁碟 是選擇VM作業系統,我是選擇Ubuntu,這可以看個人需求來設定。
- 防火牆 通訊方式允許http來連線,因為預計要放個網站;若要綁定網域且設定SSL,則要勾選https
- 接這按下建立,就完成囉。


VM執行個體頁 (完成):
建立後在VM執行個體中就可以看到剛新增的VM了。



*開機磁碟可以選擇以下作業系統: