2021年12月30日 星期四

(Xampp) 預安裝後的安全設定

XAMPP默認安裝之後是很不安全的,普通用戶不用任何密碼就可以訪問其Web管理頁面,修改資料庫。我們只需要點擊左方菜單的 "安全"選項,按照嚮導操作即可完成安全設置。
 
在默認狀態下,phpmyadmin有兩個用戶名,分別是 pmaroot。其中,root是管理員身份,而pma則是普通用戶身份,但二者在預設狀態下均無密碼
 
這裡的兩個默認用戶的密碼務必要設置,設置方法:
-

(Xampp) XAMPP下重置mysql密碼

安裝XAMPP後,mysql默認是沒有密碼的,安全起見一般我們都會修改密碼。
 
密碼太多,經常會忘記密碼,那麼,我們可以通過通過以下步驟可以重置mysql密碼。
 
步驟如下:
 
1. 停止mysql
2. 打開cmd,切換目錄到 /xampp/mysql/bin, 運行:
>mysqld --skip-grant-tables
 
該命令是跳過權限檢查,直接啟動mysql服務,之後保持這個窗口別關閉 ,另開一個命令窗口
 
3. 打開cmd,同樣切換目錄到 /xampp/mysql/bin,運行
>mysql –u root
 
該命令是用root登錄到mysql資料庫
 
4. 修改root的密碼
>use mysql
>update user set password=PASSWORD("新密碼") where user="root";
>flush privileges
 
完成
 

2021年12月29日 星期三

(CSS) DIV 三欄式網頁排版設計

CSS DIV 三欄式網頁排版設計

本文就以這個範例示意圖的原始碼來介紹如何使用 CSS DIV 設計出三欄式網頁,首先要看的是比較簡單的 HTML 部分,接著就是稍微複雜的 CSS 語法部分,但整體而言還算是 CSS 排版的基礎。



以下範例語法將告訴您如何設計出這樣的網頁版型。

HTML 語法架構
<div id="sitebody">
 <div id="header">header</div>
 <div id="sidebar_left">sidebar_left</div>
 <div id="sidebar_right">sidebar_right</div>
 <div id="content">content</div>
 <div id="footer">footer</div>
</div>
在 HTML 的部分相當簡單,最外圍使用區塊 sitebody 將所有的元素都包起來,裡面就依序建立 header、sidebar_left、sidebar_right、content 以及 footer 等 DIV 區塊,有了這樣的架構,就可以使用 CSS 將每個區塊的位置設計好。

CSS 語法
<style type="text/css">
#sitebody{
 width:600px;
 margin:0 auto;
 font-size:13px;
}
#header{
 background-color:#FFD4D4;
 height:80px;
 text-align:center;
 line-height:80px;
}
#sidebar_left{
 background-color:#FFECC9;
 width:120px;
 height:400px;
 text-align:center;
 line-height:400px;
 float:left;
}
#sidebar_right{
 background-color:#FFECC9;
 width:120px;
 height:400px;
 text-align:center;
 line-height:400px;
 float:right;
}
#content{
 margin-left:120px;
 margin-right:120px;
 height:400px;
 background-color:#F2FFF2;
 text-align:center;
 line-height:400px;
}
#footer{
 clear:both;
 background-color:#FFD4D4;
 height:80px;
 text-align:center;
 line-height:80px;
}
</style>
這段 CSS 語法中的幾個重點還是要提一下,首先每個 # 開頭接著的英文就是 DIV 的 id 名,代表的就是要替該 DIV 區塊做樣式設計,由最上方開始,先對整個網頁主體的大區塊 sitebody 做規劃,依序接著對 header、sidebar_left、sidebar_right、content、footer 做設計,要做出三欄式的網頁重點就在於 DIV 的浮動技巧,也就是 float,範例在左邊欄 sidebar_left 使用 float:left 代表向左浮動,右邊欄使用 float:right 代表要向右浮動,兩個邊欄向兩邊浮動,那網頁內文區 content 區塊自然就在中間呈現囉!以下為範例用到的各種語法說明。
這裡稍微提示一下,為了範例呈現清楚,所以我們在左邊欄 sidebar_left、右邊欄 sidebar_right 以及內文區 content 的 DIV 區塊內使用了高度 height,實際應用時並不一定要使用 DIV 高度,通常都是讓內文的長度去決定網頁所呈現的長度。

只要開一個空白的文件檔,將 CSS 語法貼進去,然後接著貼上 HTML 語法架構內的內容,順序是先 CSS 然後再 HTML,接存成 test.html 的檔案,用瀏覽器開起來就可以看到本文一開始的那個三欄式網頁範例示意圖,原則上 Chrome、FireFox、IE、Safari、Opera 等主流的瀏覽器都可以順利顯示。這只是透過 CSS DIV 設計出三欄式網頁的一種方法,網頁設計師當然有自己的一套設計方式,但大原則通常都是使用類似的手法,DIV 區塊的配置、DIV 寬度、marginfloatbackground ... 等,只要掌握這些基本的 CSS 概念,就可以靈活運用的設計出各種三欄式網頁。最後,想知道如何設計出單欄式網頁或兩欄式網頁嗎?還有兩篇詳細的介紹,可以比較與三欄式設計有什麼差異。

2021年12月27日 星期一

(RH9) SSL憑證載卸的相關指引

找 Apache 的 ssl.conf 設定檔路徑:
$ grep -i -r "SSLCertificateFile" /etc/httpd/
 
 
依找到的設定檔路徑,編輯設定 ssl.conf

修改下列標色設定,依據指定檔案填入相關路徑及網域
<VirtualHost _default_:443>
    DocumentRoot "/var/www/html"(網站目錄)
    ServerName www.example.com:443(你的網域)
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
    SSLCertificateFile /etc/pki/tls/certs/certificate.crt (伺服器憑證路徑)
    SSLCertificateKeyFile /etc/pki/tls/certs/private.key (憑證私鑰路徑)
    SSLCertificateChainFile /etc/pki/tls/certs/ca_bundle.crt (中繼憑證路徑,非必要)
</VirtualHost>  

6. 重新啟動 Apache,即可完成

$ systemctl restart httpd.service
 

(YouTube)【2022】實測可用,下載 YouTube 影片的 6 個工具網站

 
 
 
4) YouTubemy:
直接在 YouTube 網址的「youtube」字樣後方加上「my」,變成「youtubemy」後,按下 Enter 就可以直接進入下載畫面
 
 
 
PS. 摘文取自 果仁  (詳細介紹. 請見連結網頁)

(Chrome) 校時

1) 將下列寫入 aaa.reg, 點選兩下. 寫入註冊表:
代碼:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"AnnounceFlags"=dword:00000005

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"NtpServer"="tock.stdtime.gov.tw,0x1"
"Type"="NTP"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient]
"Enabled"=dword:00000001
"SpecialPollInterval"=dword:00000e10


_"NtpServer" 是設定要向哪一台主機對時,下面是中華電信研究所之時間與頻率國家標準實驗室,提供的數台 NTP Server的主機:

tick.stdtime.gov.tw
tock.stdtime.gov.tw
watch.stdtime.gov.tw

_"SpecialPollInterval" 指的是隔多久對時一下,單位是秒,但是要用十六進制的表示法,預設是一個星期(00093a80) 對一次,前面的設定中是一個小時對一次(00000e10)。
因為 Windows 預設是要求在時間誤差在正(負) 54000 秒,也就是 15 小時之內,才可以進行對時,超過這個時間,就會出現錯誤訊息而無法對時。所以如果電腦時鐘真的慢得離譜,就在底下這行的下面:

"AnnounceFlags"=dword:00000005
再加入兩行:

代碼:
"MaxNegPhaseCorrection"=dword:ffffffff
"MaxPosPhaseCorrection"=dword:ffffffff


這兩行是將誤差值設到最大,也就不無論如何都要進行對時。

2) 如果 aaa.reg 方式寫入註測表方式發生錯誤. 那就只好執行 regedit. 首動方式來修改註冊表了...

=====================
接著,
要讓設定可以馬上生效,就執行底下的指令:
net stop w32time && net start w32time
w32tm /resync /rediscover

第一行: 讓 w32time 這個服務重新啟動,以讀取我們匯入的設定。
第二行: 則是進行對時

2021年12月26日 星期日

(RH9) 決定取消網站的 SSL

我的網站沒有太多機密. 不怕別人看!
我的網站沒做金額的交易. 還用不著汲汲營營地維護金鑰系統!
犯不著因為 Google 推尚 https. 為了跟風. 搞自己像狗累般地隨時注意憑證過期時間. 還得被逼得非要買付費憑證似的....!
 

2021年12月25日 星期六

(RH9) 可惡的 FreeSSL !!

幹!! 他媽的. 無非就是商人. 賺錢是唯一考量罷了!!~
-
什麼 [免費 SSL] !? 現在使用新憑證. 居然需要驗證 xxx.no-ip.org 和 www.xxx.no-ip.org 兩個網頁才會給新憑證!?.... 你他媽的. 我假如有兩個註冊主機. 幹嘛還要你的 SSL ?...
 
面對鴨霸. 強迫付費昇級的 [免費憑證], 決定不用了!! 準備把站台改回 http 就好!!~
 
ps. 未來規劃: 因為主機 dyhms.no-ip.org 的網站名稱. 及網站內的資料已有相當歷史, 改變名稱恐導致網站掛點...; 所以. 打算 https 的主頁需求就掛在雲端免費伺服器上(也許會用別的域名). 再以 http 模式連接到 dyhms.no-ip.org 的主機上就好!!

(RH9) 新加了域名 [ www.dyhms.no-ip.org ]

不是騷包愛搞 virtual host... (予豈好辯哉? 予不得已也!... )
-
是因為本站主機的 FreeSSL 免費憑證即將屆期. 所以又得每三個月. 糊里糊塗地再重新申請. 和設定一次...; 不幸的是. 這回居然行不通了..., 它居然改成需要兩個域名做驗證!?... 那安泥???...
 
不得不. 只好搬出存檔之鳥哥教科書. 依樣畫葫加了個 www.dyhms.no-ip.org 的虛擬主機了!!~
接著. 再回去試試重新申請新憑證吧...
 

2021年12月22日 星期三

(PHP 與 MySQL 的互動) 2_新增資料

新增資料 (文末有完整版程式碼)

add.php:

  • insert into users(username) values("apple") 這就是一個 SQL query
  • 要放入的 values 會是一個字串,所以要用單引號或是雙引號包起來
<?php    require_once('conn.php');    $result = $conn->query('insert into users(username) values("apple")');    if (!$result) {      die($conn->error);    }      print_r($result);    ?>  

print_r($result); 的 output 會是 1,
1 就代表 true (有成功)的意思

會發現,當我在 add.php 的頁面第二次重新整理後,回到 phpMyAdmin 看,就會出現第二個 apple

優化上方的程式碼

add.php:

  • 把要放入的 values 用變數 $username 取代

在 debug 時,可以先把 $sql 印出來,看是不是正確的 SQL query

把 SQL query 獨立出來變成一個變數 $sql,這樣程式碼的可讀性比較高。在 debug 時,也可以先把 $sql 印出來 echo $sql;,看是不是正確的 SQL query

debug 完之後,記得要把 echo $sql; 拿掉

sprintf() 函式來寫 SQL query,提高程式碼可讀性

在 PHP 有一個叫做 sprintf() 的函式,建議是把 SQL query 用 sprintf() 來寫,讓整個 SQL query 字串更好寫也更好看懂:

  • 第一個參數是字串,把「動態要塞值進去的地方」變成 %d"%s",類似於 placeholder 的感覺
    • %d 代表:我要放入的是一個 number (這裡的 d 是 decimal 十進位的意思)
    • "%s" 代表:我要放入的是一個 string
  • 從第二個參數開始依序放「我要塞進去的值」

會按照順序,把 15 帶到 %d 的位置,把 $username 帶到 "%s" 的位置

<?php    require_once('conn.php');    $username = 'apple';    $sql = sprintf(      'insert into users(id, username) values(%d, "%s")',      15,      $username    );    echo $sql;    exit();    $result = $conn->query($sql);    if (!$result) {      die($conn->error);    }      print_r($result);    ?>  

組出來的 SQL query 會長這樣:

動態新增 username 到資料庫的表單

index.php:

<?php    require_once('conn.php');    $result = $conn->query('select * from users;');    if (!$result) {      die($conn->error);    }      while ($row = $result->fetch_assoc()) {      echo 'id: '. $row['id'] . '<br>';      echo 'username: ' . $row['username'] . '<br>';    }  ?>    <h2>新增 user</h2>  <form method="POST" action="add.php">    username: <input name="username">    <input type="submit">  </form>  

加上「自動跳轉的 response Header」

header('Location: index.php'); 意思就是:我要回傳一個 response Header 叫做 Location: index.php。瀏覽器接收到這個 response Header 後,就知道我的目的是要跳轉到 index.php,因此就會自動幫我跳轉回到 index.php 這個檔案去 (因為跳轉的太快了,甚至不會看到中間的 add.php 的畫面,就直接跳轉到 index.php 去了)

add.php:

<?php    require_once('conn.php');      if (empty($_POST['username'])) {      die('請輸入 username');    }    $username = $_POST['username'];    $sql = sprintf(      'insert into users(username) values("%s")',      $username    );    echo 'sql: ' . $sql. '<br>';    $result = $conn->query($sql);    if (!$result) {      die($conn->error);    }      // 如果有新增成功    echo '新增成功!';    header('Location: index.php');  ?>  

錯誤處理

上面 add.php 的程式碼,做錯誤處理的地方有兩個:

  1. 檢查 $_POST['username'] 是否為空值
  2. 檢查 SQL query 是否有執行成功,也就是 $conn->query($sql); 這段

如果 SQL query 沒有執行成功,也就是 $result 是 false,那就會執行 die($conn->error);


現在,我把 username 欄位設為 unique (代表:不能有重複的 username)
然後我到 index.php 輸入一個重複的 username 叫做 aaa,按下 submit 後就會出現一行錯誤訊息「Duplicate entry 'aaa' for key 'username'」,就是因為在執行到 $conn->query($sql); 時發生錯誤($result 會是 false),因此這行錯誤訊息就是從 die($conn->error); 這行印出來的

排序「資料庫的讀取結果」

「資料庫的讀取結果」的排序不一定會按照 id 順序,如果想要按照 id 排序的話,就在 index.php 的 SQL query 加上 order by id asc 或是 order by id desc

  • asc 是「由小到大」排列
    ascending 就是 increasing 的意思
<?php    require_once('conn.php');    $result = $conn->query('select * from users order by id asc;');    if (!$result) {      die($conn->error);    }      while ($row = $result->fetch_assoc()) {      echo 'id: '. $row['id'] . '<br>';      echo 'username: ' . $row['username'] . '<br>';    }  ?>    <h2>新增 user</h2>  <form method="POST" action="add.php">    username: <input name="username">    <input type="submit">  </form>  
  • desc 是「由大到小」排列
    descending 就是下降的意思
<?php    require_once('conn.php');    $result = $conn->query('select * from users order by id desc;');    if (!$result) {      die($conn->error);    }      while ($row = $result->fetch_assoc()) {      echo 'id: '. $row['id'] . '<br>';      echo 'username: ' . $row['username'] . '<br>';    }  ?>    <h2>新增 user</h2>  <form method="POST" action="add.php">    username: <input name="username">    <input type="submit">  </form>  

新增資料的程式碼,完整版如下:

conn.php:

<?php    $server_name = 'localhost';    $username = 'saffran';    $password = 'rox';    $db_name = 'saffran_db';      $conn = new mysqli($server_name, $username, $password, $db_name);      if ($conn->connect_error) {      die('資料庫連線錯誤:' . $conn->connect_error);    }      $conn->query('SET NAMES UTF8');    $conn->query('SET time_zone = "+8:00"');  ?>  

index.php:

<?php    require_once('conn.php');    $result = $conn->query('select * from users order by id desc;');    if (!$result) {      die($conn->error);    }      while ($row = $result->fetch_assoc()) {      echo 'id: '. $row['id'] . '<br>';      echo 'username: ' . $row['username'] . '<br>';    }  ?>    <h2>新增 user</h2>  <form method="POST" action="add.php">    username: <input name="username">    <input type="submit">  </form>  

add.php:

<?php    require_once('conn.php');      if (empty($_POST['username'])) {      die('請輸入 username');    }    $username = $_POST['username'];    $sql = sprintf(      'insert into users(username) values("%s")',      $username    );    $result = $conn->query($sql);    if (!$result) {      die($conn->error);    }      // 如果有新增成功    header('Location: index.php');  ?>  

2021年12月21日 星期二

(RH9 心得) 終結外面主機亂七八糟的拜訪 - hosts.deny

長期觀察 access.log, 和修正設定嚐試的一些努力後. 目前主機的施行策略如下:
 
1) hosts.denyhosts.allow 的設定 (有此正確設定. 問題就可解決一大半了!! 原來之前的 hosts.deny設定和語法都錯了. 難怪沒什麼效果... )
 
hosts.deny 的設定:
in.telnetd: ALL : Deny
hosts.allow 的設定:
ssh: 192.168.1.xx : allow
in.ftpd: 192.168.1.xx : allow
2) iptables.deny保留對惡意 ip軟體自動外連的阻擋設定
 
~ 就這樣. 局域內用戶的上網操做. 用起來就很舒服了~
 

2021年12月14日 星期二

(PHP) 以程式碼 [插入資料] 卻變成亂碼

糊里糊塗地參考網路資料處理後. 反正問題就是解決了!!~
 
編輯 mysql 的 my.in 檔案裡:
1)
(如果沒有該行設定. 就自己加上去)
 
2) 找到這 utf8 區的預設內容:
(把這些設定句前面的 # 都取消掉)
 
3) 關閉 mysql. 重啟 -> ok

2021年12月9日 星期四

(RH9) LinuxMtrr表不正確的解決方法

http://www.unixlinux.online/unixlinux/linuxjc/linuxjc/201702/1259.html

這個會導致nvidia的驅動不能加速2d,解決方案一般就是重寫mtrr表

echo "disable=2″ >| /proc/mtrr
echo "disable=1″ >| /proc/mtrr
echo "disable=3″ >| /proc/mtrr
echo "disable=4″ >| /proc/mtrr
echo "disable=0″ >| /proc/mtrr
echo "base=0×00000000 size=0×80000000 type=write-back" >| /proc/mtrr
echo "base=0×80000000 size=0×40000000 type=write-back" >| /proc/mtrr
echo "base=0xC0000000 size=0×10000000 type=write-back" >| /proc/mtrr
echo "base=0×100000000 size=0×20000000 type=write-back" >| /proc/mtrr
echo "base=0×120000000 size=0×10000000 type=write-back" >| /proc/mtrr

(Centos-7s) 更新: 網卡名稱改回 eth0 的方法

將 CentOS 7 網卡名稱修改, 用回 Eth0 的方法:   1) # vi /etc/sysconfig/grub 內容大概是這樣:   GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release...