- 程式名稱:RedSnow Utility - DLCounter2 (Download Counter CGI)
- 版本編號:1.31 (Freeware 1.31)
- 最初設計:1.00 版:1997/11/29
- 改版記錄:
1.11 版:1998/01/08 | 改為不同程式的下載資料記錄在同一個檔內。 |
1.20 版:1998/01/09 | 如果 DLFile.cnt 檔內無下載檔的名稱時自動加上。 |
1.21 版:1998/01/11 | 無法取得參數時顯示錯誤訊息。 |
1.22 版:1998/01/11 | 以$ARGV[0]無法取得參數時改用QUERY_STRING變數擷取。 |
1.23 版:1998/11/07 | 加上檔案大小的顯示。 |
1.24 版:1999/01/08 | 加上自動作成以日期為名的備份檔,比對資料時改用 split 函數拆解字串。 |
1.30 版:1999/10/17 | 改成使用檔案代名對照檔來取得檔案實際下載的位址,以便於管理及設定。 |
- 最後修改:
1.31 版:1999/11/26 | 增加可以將下載次數寫至指定檔案的特定標籤處的功能。 |
- 作者姓名:RedSnow WorkRoom - 傅鴻銘
- 版權宣告:
本程式為傅鴻銘個人作品,按照中華民國法律於程式完成並公開發表之時,即擁有著作權等相關權利,他人不得侵犯。
- 作者聲明:
本 (1.31) 版 DLCounter2 為免費共享軟體,任何人均可在不違反法律及不損害本人權益之前提下免費合法的使用,本聲明可視為作者對使用者合法免費使用的保障與授權聲明,但如有違犯下列事項者將不受本聲明之保障,作者並保留所有法律追訴權利:
- 不得利用本程式進行商業行為,包含灌錄至儲存媒體上販售或隨商品附贈給客戶,如有商業用途須取得作者授權。
- 不得修改程式內部表頭部分之字樣與本程式說明文件的內容。
- 傳播本程式者有義務讓被傳播對象瞭解作者聲明,以免被傳播者侵犯作者權益。
- 安裝 DLCounter2:
本程式的安裝很簡單,只要將 DLCounter2.zip 解壓縮到任何一個目錄內,然後利用文書處理程式對 DLCounter2.pl、download.map 及部分的 HTML 檔作一些適當的修改,然後 FTP 到網頁所屬的 cgi-bin 及適當目錄內就可以了,細部說明請閱讀下一段。
- 使用 DLCounter2 的方法:
- 檢查 DLCounter2.pl 程式的第一行 Perl 解譯程式的路徑及名稱是否符合您網頁所屬站台的規定,若不符合站台規定請修改該行設定,如果您是 TacoMax 的居民,設定應該如下:
#!/usr/local/bin/perl
附註:
紅雪網頁 "FAQ 問答集" 中的 "CGI Perl" 項目中,整理有部分站台的相關設定資訊,您可以逕自前往參考。
- 修改 download.map 檔案內的相關設定:
- 設定欲放置計次檔(DLFile.cnt)、記錄檔(DLFile.log)以及 $dl_dir 變數所設定目錄的基本路徑名稱,此處以 TacoMax 為例 (建議設定為您的根目錄):
$realdir = "/home/city1/urid/www";
$urlpath = "http://www.tacocity.com.tw/urid";
附註:
- urid 字樣請改為您在 TacoMax 使用的帳號。
- 紅雪網頁 "FAQ 問答集" 中的 "CGI Perl" 項目中,整理有部分站台的相關設定資訊,您可以逕自前往參考。
- 設定 $dl_dir 變數的值:
這個變數是設定放置下載檔案所在的目錄名稱,本項會與前項所設的 $realdir 及 $urlpath 這兩個變數結合起來使用,
如果您放置下載的目錄名稱為 download,那就設定本項如下:
$dl_dir = "download";
本項設定與前項設定組合後即變為:
絕對路徑 = /home/city1/urid/www/download
網頁路徑 = http://www.tacocity.com.tw/urid/download
- 設定 $wantlog 變數的值:
DLFile.log 這個檔案是記錄下載檔案者 IP Address、日期、時間....等資料的。
要啟用這個記錄資料就設成 $wantlog = 1;
不想用這個記錄資料就設成 $wantlog = 0;
- 設定 $bakSize 變數的值:
這個變數所設定的值是字元數量,當 DLFile.log 這個檔案的大小超過本變數所設定的值時,即會自動作成一個備份檔,以免 DLFile.log 這個檔案過大,備份時檔案的主名稱仍為 DLFile,而副檔名則由備份時的年、月、日來組成,下例所設定的是 51200 Bytes 也就是 52KB。
$bakSize = 51200;
- 設定 @referers 陣列變數的值:
這個陣列變數所設定的值是允許合法呼叫本程式的來源位址,如果呼叫本程式的網頁位址不在這個陣列變數之中,就會被拒絕執行,設定時可設定完整或部分的路徑,甚至設定成完整的網頁名稱都可以,您可以視自己的需求來設定,例如:
@referers = ('tacocity.com.tw/您的帳號','您其它的網址一','您其它的網址二','....');
注意:
如果您發現您的站台無法正常的送出 $ENV{'HTTP_REFERER'} 這個環境變數給程式,那麼就請找到 &check_referer; 這個敘述,然後刪除該行或在該行的行首處插入一個 # 符號,設定該行為不執行即可。
- 設定下載頁面使用的檔案代名與相對應實際要下載的檔案名稱,也就是在下載頁面可以無須設定完整或正確的檔案名稱,只要在此處設定對應資料即可,例如:
$fMap{'CGI_ENV'} = 'cgi-env.zip';
$fMap{'CloudsPic7'} = 'Clouds7.zip';
$fMap{'Clouds8'} = 'Clouds8.zip';
注意:
紅色字樣為檔案代名,綠色字樣為檔案實際的完整名稱。
- 設定下載頁面使用的檔案代名與相對應實際寫入下載次數的網頁檔案名稱,也就是欲在下載頁面顯示檔案被下載的次數時,只要在此處設定對應資料即可,例如:
$pMap{'CGI_ENV'} = '$realdir/cgi-env.htm';
$pMap{'CloudsPic7'} = '$realdir/Clouds7.htm';
$pMap{'Clouds8'} = '$realdir/Clouds8.htm';
注意:
- 紅色字樣為檔案代名,綠色字樣為網頁檔案實際的完整路徑與名稱。
- 欲使用本項所述將下載次數寫入下載頁面的功能,必須在欲寫入下載次數的頁面內插入 <!--rsd%檔案代名--> 的隱藏標籤,同時在設定下載敘述時必須加上 &d2 的後續參數,關於這個後續參數請參看後續的相關說明。
- 在理論上 DLCounter2.pl 可以自動建立 DLFile.cnt 這個下載次數紀錄檔,但是若您在測試時發現您的狀況很特殊,無法自動建立該檔的話,就請您自行建立一個名為 DLFile.cnt 的文字檔,內容先填入一個阿拉伯字 0 接著加上兩個冒號,然後再輸入欲記錄下載檔案的代名(不是檔案真正的名稱),以作為記錄下載次數之用。
例如:下載檔案的代名為 Example10 及 MyFile,那麼內容就填入:
0 :: Example10
0 :: MyFile
- 在理論上 DLCounter2.pl 可以自動建立 DLFile.log 這個紀錄檔,但是若您在測試時發現您的狀況很特殊,無法自動建立該檔的話,就請您自行建立一個名為 DLFile.log 的文字檔,內容可以不必填任何資料,以作為記錄下載資訊之用(IP, 日期, 時間)。
(如果 $wantlog 的值設為 0,那就可以省略這一個步驟)
- 修改提供下載檔案敘述的 HTML 檔,在原先的 <A HREF="MyFile.zip"> 或 <A HREF="http://www.yourdomain.com/.../MyFile.zip"> 之處,改成:
超聯結形式:
<A HREF="http://tacocity.com.tw/cgi-bin/cgiwrap/urid/DLCounter2.pl?MyFile">
或是按鈕形式:
<FORM ACTION="http://tacocity.com.tw/cgi-bin/cgiwrap/urid/DLCounter2.pl?MyFile" METHOD="POST">
<INPUT TYPE=submit VALUE="下載 MyFile"></FORM>
注意:
- urid 字樣請改為您在 TacoCity 使用的代碼。
- MyFile 字樣請改為您供網友下載程式的對照名稱,這個名稱是要給 DLCounter2.pl 由 download.map 檔案內所讀取的 $fMap{'...'} 變數作比對之用的,因此不一定要跟真正的檔案名稱一樣,如果您要下載的檔案是 WinMidiFile.zip 而在 download.map 檔內設定的是 $fMap{'WMF'} = 'WinMidiFile.zip'; 的話,那您就應該將 MyFile 字樣改為 WMF,而不是設為 WinMidiFile.zip 或是 WinMidiFile。
- 您可以在上述的下載敘述之後加上 d1 或 d2 的後續參數,這個後續參數是要選擇執行下載的模式:
- 這裡所提到的後續參數必須以 "&" 符號來連結至下載檔案代名的後方,例如:DLCounter2.pl?MyFile&d2。
- 設定 d1 的後續參數或者是不設定本處所述的後續參數,程式會在檢查並記錄下載次數等資料後顯示一個提示畫面,就像 1.30 版以前的運作方式一樣,再由訪客自行點選該畫面上的連結來下載檔案。
- 設定 d2 的後續參數,程式會在檢查並記錄下載次數等資料後,會載入 download.map 檔案內 $pMap{'...'} 變數所設定的網頁檔,然後搜尋對應的 <!--rsd%檔案代名--> 隱藏標籤,找到後即將下載次數寫入該處,做完前述處理後,程式會自動轉向觸發程式的下載動作,如果您希望在前述動作完成時,能重新載入下載檔案的頁面,以便顯示出更新過下載次數的頁面,或者是轉向到另一個頁面去 (例如是顯示特定訊息的頁面),那麼就請參考 DL-Demo.htm 檔案內 JavaScript 的處理方式。
- 將程式(DLCounter2.pl)、下載檔案對照檔(download.map)、計次檔(DLFile.cnt)、記錄檔(DLFile.log)、更改過的 HTML 檔,以 FTP 程式上載到網站上:
DLCounter2.pl → 您的帳號目錄內的 cgi-bin 次目錄
download.map → 您的帳號目錄內的 cgi-bin 次目錄
DLFile.cnt → 您的帳號目錄內的根目錄
DLFile.log → 您的帳號目錄內的根目錄
注意:
上傳上述檔案時均應使用 ASCII 模式。
- 更改相關檔案的屬性:
DLCounter2.pl 屬性設為 700。
download.map 屬性設為 644。
DLFile.cnt 及 DLFile.log 屬性設為 644。
注意:
- 某些站台的屬性要求有不一樣,若發現上述設定無法正確運作的話,請向網頁所屬的站台管理員詢問後,按照各站台的規定來設定。
- 紅雪網頁 "FAQ 問答集" 中的 "CGI Perl" 項目中,整理有部分站台的相關設定資訊,您可以逕自前往參考。
- 特別說明:
本程式為了方便網頁管理者防止他人擅自連結您的檔案,使您的辛苦變成他人網頁上的成果,因此而特別設計了 download.map 這個對照檔,您如果發現了有未經允許的外來連結下載您的檔案,您可以很輕鬆的更改掉放置下載檔案的目錄名稱,而且不必變更您網頁上的各個下載敘述,您只需完成兩個步驟即可:
- 更改放置下載檔案的目錄名稱。
- 更改 download.map 檔內 $dl_dir 變數的設定值為新的目錄名稱。
例如您原先放置下載檔案的目錄名稱為 download,您欲更改目錄名稱為 xyz123,那麼您就利用 FTP 程式接通您的網站目錄,然後用 FTP 程式的 Rename 功能將 download 目錄名稱改為 xyz123,然後將 download.map 檔案內 $dl_dir = "download"; 的設定改為 $dl_dir = "xyz123";,再將修改過的 download.map 上傳到網站上就完成了,不過在此仍要提醒您必須實際的作一下測試,以確定更改後的名稱是正確並且吻合的。
為了確保他人不會再次擅自連結到您更改過名稱的目錄去,您可以每隔一段時間就重複前述的動作,再次更改目錄及設定為其它的名稱。
- 其它事項:
- 使用本程式需在 Web Server 的 CGI 能提供正常服務時,才能發揮適切的作用,如果 CGI 不能運作,則您指定的網頁也將無法顯示出來,請您使用前要慎思。
- 如果您想讓本程式有更多的網友們能享用,請連結至紅雪網頁的首頁,以便讓網友們獲得的是完整及最新的相關資訊。
- 如果您對本程式有任何意見或想給作者一點鼓勵,歡迎您到作者網頁留言或來信指教。
聯絡作者:redsnow@pmail.net
作者網頁:http://www.tacocity.com.tw/redsnow/index.htm
本文撰寫於中華民國87年01月09日 修改於中華民國88年12月03日