以一份說明文件通告 Web Station 所有使用者

緣起

使用 Synology NAS 多年,一直沒有真正開放 Web Station 給其他使用者,雖然預設值在勾選了「啟動個人網站」後,所有使用者都能在 home/www 資料夾中,自由設計個人首頁,但賦予權限的親友們卻不懂怎麼使用,便一直拖延著沒動。

初始

因緣際會,由於某些原由,有幾個使用者正好有幾個會用到 NAS 某些功能,如 Video Station、Photo station,於是編輯了一個使用說明文件,定名為 index.html 貼到他們的 www 資料夾中,告訴他們進到個人網站去看。一個 domainname.com/~username 的網址也很好記不是嗎?

然而,問題來了,隨著用途需求越來越廣,原本的簡易說明文件不夠用了,持續補充,經常修改 index.html 文件(1)、一一貼進 www 資料夾(2)、再修改擁有者(3)(否則給你 404 警告),這些 (1)(2)(3) 的小工作也越來越煩人了。

懶人這時候就勤快了:有沒有辦法簡化呢?

思索

想過幾個方法:

  • 反正沒幾個人,手動改一改就好,不過就 (1)、(2)、(3) 嘛。(最懶的方法,也是最爛的方法)
  • 寫一個 shell script,負責處理 (2) 和 (3) 這兩件事。(必須從 NAS 端著手,有點麻煩)
  • 由 www 內固定內容不變動的 index 文件,呼叫 www 外可自由變動的說明文件,只要做 (1) 便可。(這個在本地端動手即可,似乎比較可行)

經過懶性與理性一再折衝,決定用最後一種,畢竟,每回都要做三件事,和每回只要做一件事,達成一樣結果,很好抉擇。

設計

網頁程式設計,我只會 PHP 這一種,它有 header 轉址和 include 兩個我比較熟知的控制方法,這麼做應當可行。那就用 PHP 吧!

header

home/www/index.php >>> header(“說明文件網路位址”);

但是這種有個致命缺點,在 header 轉址之後,網址也同時變動了,變成 domainname.com/other,不再是 domainname.com/~username,這樣我不能藉由判斷 username 來進行後續工作,有可行性,但沒有適用彈性。

include

home/www/index.php >>> include(“說明文件實體位置”);

這種方法,網址維持 domainname.com/~username,可以由網址判斷 username,必要時可在通告同時針對特定人有不同宣告,可行性及適用性較高,就決定用這個了。只是經過進一步查詢,用 include_once 似乎用  include 更好。

編程

◆ index.php

這個 PHP 索引文件最簡單,就一行 include(“說明文件實體位置”); 解決,如:

include_once("/webDIR/helpDIR/helpFILE.php");

◆ helpFILE.php

使用者個人網站網址通常是這樣結構:http://domainname.com/~username/
用 $_SERVER[‘REQUEST_URI’] 可以取得 ~username,搭配 str_replace 函數即可得 username

$URL=$_SERVER['REQUEST_URI']; //取得當前網址參數(Domain Name 後面那一串)
$URL=str_replace("/","","$URL"); //去除前後”/”符號
$USR=str_replace("~","","$URL"); //去除”~”符號,並代入變數,設為使用者名稱

若需要網域名稱,用 $_SERVER[‘HTTP_HOST’] (含 port)或 $_SERVER[‘SERVER_NAME’] (不含 port)可以取得 domainname.com

這樣就能在 PHP 程式碼中使用 $USR 變數控制要做什麼。如底下一行就能依不同使用者的 home/www/index.php 呼叫,而呈現不同連結 :

<a href="http://domainname.com/~<?php echo $USR; ?>/photo">你的雲端電子相簿</a>

<?php
echo '
你的網址:
<a href="http://domainname.com/~'.$USR.'">domainname.com/~'.$USR.'</a>
';
?>

◆ alert.php

若有額外通告,或針對特定使用者告示,也能在取得 username 之後,加一行:

include("/webDIR/helpDIR/alert.php");  //提示一般額外通告

if ("$USR"=="指定名稱"){
    echo "某人你還欠我一杯珍珠波霸什麼時候還?";
}  //提示特定告示

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *