
分類:程式語言及主機安裝
sublime 技術
快速生成html版
1.文件類別設為 html
2.輸入 !
3.按下tab鍵

簡易的防火牆 – UFW & GUFW
從 2008 年開始 Ubuntu 8.04 LTS 多了個簡單的防火牆「UFW (Uncomplicated Firewall)」,它簡化了 iptable 複雜的指令及參數,讓人們能快速上手,之後更出現了圖形介面的 GUFW (甚至連指令都免了)。原先為了 Ubuntu 而誕生的 UFW 現在也成功移植到基於 Debian 發展的 GNU/Linux (ezgo, Linux Mint) 以及 Arch Linux。 來源
UFW
若系統尚未預載 UFW,請手動安裝。
# Debian, Ubuntu
$ sudo aptitude install ufw
# Arch Linux
$ sudo pacman -S ufw
基礎操作
狀態查詢,預設為閒置 (inactive)
$ sudo ufw status
Status: inactive
啟動 UFW 服務 (enable)
$ sudo ufw enable
預設 (default) 全部阻擋 (deny)
$ sudo ufw default deny
允許 (allow) 所有的 ssh 埠口連線
$ sudo ufw allow ssh
允許來自 127.0.0.1 (本機) 的 3389 埠口連線 (xrdp)
$ sudo ufw allow from 127.0.0.1 to any port 3389
狀態查詢,已成功啟動 (active) 並加入自訂規則
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
3389 ALLOW 127.0.0.1
進階使用
允許來自 192.168.1.2 上所有連線
$ sudo ufw allow from 192.168.1.2
允許來自 192.168.2.1 ~ 192.168.2.254 的所有 22 埠口連線
$ sudo ufw allow from 192.168.2.1/24 to any port 22
阻擋來自 110.88.4.5 的 22 埠口連線
$ sudo ufw deny from 110.88.4.5 to any port 22
阻擋來自 27.16.3.1 ~ 27.16.3.254 的所有連線。
$ sudo ufw deny from 27.16.3.0/24
Ubuntu 20.04 安裝 Laravel
Step1. install Apacher Server
sudo apt install apache2
執行apache2伺服器
sudo sytemctl start apache2
開機啟動apache2
sudo systemctl enable apache2
測試apach2執行情形
sudo systemctl status apache2
Step2. Installing PHP and its additional plugins
安裝PHP
sudo apt install php libapache2-mod-php php-mbstring php-cli php-bcmath php-json php-xml php-zip php-pdo php-common php-tokenizer php-mysql
測試安裝情形
php -v
Step3. creating a database
安裝MariaDB伺服器
sudo apt install mariadb-server
執行Mariadb
sudo mysql -u root -p
執行SQL語法
CREATE DATABASE laravel_db;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'secretpassword';
GRANT ALL ON laravel_db.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
QUIT;
Step 4: Install Composer
執行”連線到安裝網站,使用PHP安裝”
$ curl -sS https://getcomposer.org/installer | php
安裝完後設定
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
composer --version
Step 5: Install Laravel 8 on Ubuntu
cd /var/www/html
sudo composer create-project laravel/laravel laravelapp
sudo chown -R www-data:www-data /var/www/html/laravelapp
sudo chmod -R 775 /var/www/html/laravelapp/storage
cd laravelapp
php artisan
Step 6: Configure Apache to serve Laravel
建立laravel.conf檔案
<VirtualHost *:80>
ServerName example.com
ServerAdmin admin@example.com
DocumentRoot /var/www/html/laravelapp/public
<Directory /var/www/html/laravelapp>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
執行下列兩個指令,讓他們進入Apache rewiter 模組
sudo a2ensite laravel.conf
$ sudo a2enmod rewrite
重新啟動apache2
sudo systemctl restart apache2
Step 7: Run Laravel in a web browser
網站在 /var/www/html/laravelapp/public

PHP陣列
程式裡常常會出現陣列,不管是一維、二維、多維陣列,每每遇到陣列,我總是搞不清楚什麼是index,key,value。目前稍微懂一點,做一下筆記吧!
範例
$week=array(
'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');
我們可以利用索引值來取得值,$week[0]值就是Monday。
0就是索引(index) Monday就是值(value)

while迴圈去取值
while (list ($key,$value) = each ($week)){
print $value;
//印出Monday Tuesday Wednesday Thursday Friday Saturday Sunday
}
for 迴圈去取值
for ($i = 0 ; $i < count($week); $i++){
print $week[$i];
//印出Monday Tuesday Wednesday Thursday Friday Saturday Sunday
}
foreach陣列迴圈去取值
格式:
foreach($陣列名稱 as $陣列元素變數)
{
echo $陣列元素變數;
}
foreach ($week as $key => $value){
print $value;
}
//印出Monday Tuesday Wednesday Thursday Friday Saturday Sunda
<?php
$array0 = array($row0= array(1,2),
$row1=array(3,4),
$row2=array(5,6));
$array1 = array($row3=array(7,8),
$row4=array(9,10),
$row5=array(11,12));
$array2 = array($row6=array(13,14),
$row7=array(15,16),
$row8=array(17,18));
$cubical = array($array0, $array1, $array2);
foreach ($cubical as $array)
{
foreach ($array as $row)
{
foreach ($row as $element)
{
echo $element."\t";
}
echo "|\t";
}
echo "<br>";
}
?>
印出:

結合陣列
格式:
$變數名稱["指定名稱"] = 陣列元素的值;
範例:
<?php
$array["number1"] = 1;
$array["number2"] = 2;
$array[] = 3;
foreach ($array as $element)
{
echo $element."<br>";
}
?>
陣列相關函數
函數名稱 | 說明 |
print_r($array) | 輸出陣列中每個元素索引或鍵值與元素內的值。 |
array_keys($array) | 回傳陣列中所有的索引或鍵值。 |
array_values($array) | 回傳陣列中所有元素的值。 |
current($array) | 回傳目前指標所在陣列元素的值。 |
key($array) | 回傳目前指標所在陣列元素的索引或鍵值。 |
each($array) | 回傳目前陣列元素的索引或鍵值和元素內的值,並移動自下一個元素。 |
reset($array) | 陣列指標回到第一個陣列元素。 |
end($array) | 陣列指標指到最後一個陣列元素。 |
next($array) | 陣列指標指向下一個陣列元素。 |
prev($array) | 陣列指標指向前一個陣列元素。 |
<?php
$array["a"] = 1; //新增結合陣列元素
$array[] = 2; //新增陣列元素
$array["b"] = 3; //新增結合陣列元素
$arrat[] = 4; //新增陣列元素
echo "1.\t";
print_r($array); //輸入陣列中每個元素索引或鍵值與元素的值
echo "<br>2.\t";
print_r(array_keys($array)); //輸出陣列中所有的索引或鍵值
echo "<br>3.\t";
print_rarray_values($array)); //輸出陣列中所有元素的值
echo "<br>4.\t";
echo current($array); //回傳目前指標所在陣列元素的值
echo "<br>5.\t";
echo key($array); //回傳目前指標所在元素的索引或鍵值
echo "<br>6.\t";
print_r(each($array)); //回傳目前的陣列元素的索引或鍵值和元素內
//的值,並移動自下一個元素
echo "<br>7.\t";
echo reset($array); //陣列指標回到第一個元素
echo "<br>8.\t";
echo end($array); //陣列指標回到最後一個元素
echo "<br>9.\t";
echo prev($array); //陣列指標指向前一個元素
echo "<br>10.\t";
echo next($array); //陣列指標指向下一個元素

陣列元素排序
函數使用格式 | 說明 |
sort(陣列變數名稱) | 陣列元素的值從小到大排序。 |
rsort(陣列變數名稱) | 陣列元素的值從大到小排序。 |
asort(陣列變數名稱) | 結合陣列元素的值由小到大排序。 |
arsort(陣列變數名稱) | 結合陣列元素的值由大到小排序。 |
ksort(陣列變數名稱) | 結合陣列索引或鍵值由小到大排序。 |
krsort(陣列變數名稱) | 結合陣列索引或鍵值由大到小排序。 |
sort/rsort與asort/arsort 的差別,在於sort/rsort排序時,元素的索引或鍵值並不會留下來,並從0開始重新排序,而asort/arsort則會保留對應的索引或鍵值。
陣列元素搜尋
函數使用格式 | 說明 |
in_array(數值,陣列變數名稱) | 檢查值是否在陣列元素中,傳回布林值。 |
array_search(數值,陣列變數名稱) | 檢查數值是否在陣列中,如果是,傳回鍵值,若沒有則傳回false。 |


範例:


PHP 把資料寫入txt檔
把資料寫入txt檔有點複雜,學問有點大,而且發現換行的符號在不同系統是不一樣的,因此紀錄一下。
函式
file_exits()
檔案是否存在 傳回值1,0
file_open() 打開檔案
參數
“r” 開啟為可讀取,檔案指標位於檔案開頭
“r+” 開啟為可讀寫,檔案指標位於檔案開頭
“w” 開啟為可寫入,檔案指標位於檔案開頭。若檔案已存在,則刪除其內容,若不存在則建立該檔案。
“w+” 開啟為可讀寫,檔案指標位於檔案開頭。若檔案已存在,則刪除其內容,若不存在則建立該檔案。
“a” 開啟為可寫入,檔案指標位於檔案結尾。若檔案不存在,則建立。
“a+” 開啟為可讀寫,檔案指標位於檔案結尾。若檔案不存在,則建立。
fclose() 檔案關閉
Windows 系統換行符號是: \r\n
Mac 系統換行符號是: \r
Linux 系統換行符號是: \n

免費SSL
何謂SSL
為了讓使用者於瀏覽網頁時安全地傳輸資料,特別是具備後台管理或輸入個人機敏資料的網站,應該使用網站資料傳輸加密協定(如HTTPS),透過SSL憑證加密後讓資料傳輸更安全,並且若網站升級採用新一代的HTTP/2的網頁傳輸協定,其先決條件就是必須使用HTTPS加密。
一般而言要使用加密傳輸,若不是使用系統自發憑證(使用Chrome瀏覽器閱讀時會出現「不安全的憑證」),便需要向第三方以支付年費方式購買SSL憑證,本說明將提供於伺服器上安裝免費的憑證(以Let’s Encrypt為例)教學文件,為大家的網頁傳輸加密。 資料參考:師大資訊中心
申請及使用
Let’s Encrypt是由各大非營利團體為了推廣 HTTPS 而推出免費 SSL/TLS憑證服務,每次申請有效期為3個月,並可設定自動更新憑證。
我是主機的擁有者,所以選擇安裝Certbot軟體。
1.選擇 apache+Linux(snap)
2.ssh登入主機安裝snapd
sudo apt update
sudo snap install --class certbot
3.Prepare the Certbot command
sudo ln -s /snap/bin/certbot /usr/bin/certbot
4.Choose how you’d like to run Certbot
sudo certbot --apache
5.Test automatic renewal
sudo certbot renew --dry-run
後記:
安裝後運動程式會有問題,必須下判斷式去判斷。
發現網站加了SSL後,運動網站有點問題。
目前解決方式:
/include/config.php
加上判斷
//URL
if($_SERVER["HTTP_HOST"]=="wwesbake.idv.tw"){
define('ROOT_URL' , "https://". $_SERVER["HTTP_HOST"] ."/$web_name/") ;
}else{
define('ROOT_URL' , "http://". $_SERVER["HTTP_HOST"] ."/$web_name/") ;
}
除了要加判斷式之外,登入時轉址還會出現錯誤。檔案在:/var/log/apache2 的 error.log檔

造成網頁出不來,移除Certbot,卻出現無法執行apache2的情形。
重裝apache2連帶影響php5.5,到我的google網站去看教學。安裝了php5,只有裝部份的php5模組,真是糟糕!爬一爬文章,再加上自己的判斷,終於是在10/13晚上裝好了,可是自己的網站還是不行。不過,phpmyadmin竟然可以跑,心比較平靜一點,因為資料還在就好。抱著忐忑的心去睡覺吧!
早上(10/14)起床,突然想一想應該是php.ini設定的問題。果然是



設定好就可以執行了。
Pear 安裝 DB套件
主機 Ubutu 14.04.06 + PHP5.5
下 pear list 指令

先升級 pear
pear install PEAR-1.10.10
再安裝 DB套件
pear install DB

引入 DB
require “DB.php”;
連接mysql資料庫
$dsn = "mysql://{$mysql_user}:{$mysql_pass}@{$mysql_host}/{$db_name}";
$dbCon = DB::connect($dsn);
$sqlstr=" select * from gov ";
$sth = $dbCon->query($sqlstr);
三種取值方法
Method-1
$row = $sth->fetchRow(DB_FETCHMODE_ASSOC);
print "first".$row[gov_code]."-".$row[login_pass]."
";
Method-2
$row1 = $sth->fetchRow(DB_FETCHMODE_OBJECT);
print "second".$row1->gov_code."-".$row1->login_pass."
";
Method-3
$row2 = $sth->fetchRow();
print "third".show_array($row2)."
";
設定中文編碼UTF8
$dbCon->query('SET NAMES utf8');
PHP傳址呼叫、傳值呼叫、傳遞參考
常常看到函數前會加一個&符號,&到底是什麼意思?
例如
funcion &get_product_list ($department){
$product_list = array();
return $product_list;
}
$products = &get_product_list('rd')
這裡的加上&符號是什麼意思呢?查一下知道是用傳遞參考的方法呼叫函數。函數傳遞資料有三種方式:傳址呼叫(pass by adress)、傳值呼叫(pass by value)、傳遞參考(pass by reference)區別在哪裡呢?以下說明
& ->取址運算子
*->取值運算子
函數中資料的傳遞:傳值、傳址、傳參考
以下的說明是每種程式語言都通用的觀念,但不同程式語言有不同的語法,以及不同的程式語言不一定都支援全部的傳遞方式,要看你使用的是哪種程式語言。
Associative Array
關聯式陣列 結合陣列
在電腦科學中,關聯陣列(英語:Associative Array),又稱對映(Map)、字典(Dictionary)是一個抽象的資料結構,它包含著類似於(鍵,值)的有序對。一個關聯陣列中的有序對可以重複(如C++中的multimap)也可以不重複(如C++中的map)。
這種資料結構包含以下幾種常見的操作:
向關聯陣列添加配對
從關聯陣列內刪除配對
修改關聯陣列內的配對
根據已知的鍵尋找配對
- 陣列大小無須宣告。
- 各元素的資料型態,不一定要相同。
- 透過索引值或字串值來存取值。
向量陣列(Actor array)
傳統程式語言(如VB,C,C##,JAVA)的陣列屬於向量陣列
- 陣列大小事先宣告。
- 各元素型態都一樣。
- 透過索引值來存取值。