設定 MediaWiki 可以上傳 zip 檔

MediaWiki 預設只能上傳 png、gif、jpg、jpeg 這些圖檔,我們可以在 LocalSettings.php 編輯:

$wgEnableUploads  = false;
$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg' );

加入你額外想要上傳的檔案類型 (找不到這兩行的話就自己加上去):

$wgEnableUploads  = true;
$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'zip', 'pdf', 'rar' );

上面的目的是為了可以額外再上傳 zip、pdf、rar 類型的檔案。可惜事與願違,上傳 pdf 與 rar 檔都沒問是,但要上傳 zip 檔卻給我出現:

MIME 類別 "application/zip" 不是容許的檔案格式。

原來是因為 MediaWiki 有設一些副檔名的「黑名單」,剛好 zip 就在其中,設定檔在: includes/DefaultSettings.php

找到內容:

$wgMimeTypeBlacklist= array(
        # HTML may contain cookie-stealing JavaScript and web bugs
        'text/html', 'text/javascript', 'text/x-javascript',  'application/x-shellscript',
        # PHP scripts may execute arbitrary code on the server
        'application/x-php', 'text/x-php',
        # Other types that may be interpreted by some servers
        'text/x-python', 'text/x-perl', 'text/x-bash', 'text/x-sh', 'text/x-csh',
        # Client-side hazards on Internet Explorer
        'text/scriptlet', 'application/x-msdownload',
        # Windows metafile, client-side vulnerability on some systems
        'application/x-msmetafile',
        # A ZIP file may be a valid Java archive containing an applet which exploits the
        # same-origin policy to steal cookies
        'application/zip',
);

將「'application/zip',」刪除即可。

至於上傳 zip 檔未來的後果會是如何...這我就不能預料了。

解決 Windows 10 自動開機的問題

查看系統的電源設定

1. 查詢最近一次電腦被喚醒的原因

C:\>powercfg /lastwake

喚醒記錄計數 - 1
 喚醒記錄 [0]
 喚醒來源計數 - 1
 喚醒來源 [0]
  類型: 喚醒計時器
  擁有者: [SERVICE] \Device\HarddiskVolume2\Windows\System32\svchost.exe (SystemEventsBroker)
  擁有者提供的原因: Windows 將執行 'NT TASK\2BrightSparks\SyncBackFree\ASUS-User\DailyBackup' 排定要求喚醒電腦的工作。

2. 查詢系統中已設定用來喚醒電腦的程序

C:\>powercfg /waketimers

沒有的話會顯示:

系統沒有使用中的喚醒計時器。

有的話會顯示:

[SERVICE] \Device\HarddiskVolume2\Windows\System32\svchost.exe (SystemEventsBroker) 設定的計時器在 下午 10:59:29 的 2017/2/11 到期。
 原因: Windows 將執行 'NT TASK\2BrightSparks\SyncBackFree\ASUS-User\DailyBackup' 排定要求喚醒電腦的工作。

你得依查詢的狀況去找出程式來關閉喚醒電腦功能。

例如,根據上面於我的電腦執行 powercfg 所得到的結果,我必須去執行 SyncBack 程式,將 Profile: DailyBackup 於排程設定中的「Wake the computer to run this task」選項給關閉。

自動維護

Windows 的「自動維護」功能也會喚醒電腦。

關閉喚醒的步驟:

  1. 進到 控制台 \ 系統及安全性 \ 安全性與維護 \ 自動維護。
  2. 將「允許排定的維護在排定的時間喚醒我的電腦」給取消勾選:

 

解決 Chrome 遺失 chrome_elf.dll 的問題

最近我的 Google Chrome 瀏覽器常出問題,不知道從哪一版開始,當要從外部的程式開啟網頁時,就會出現遺失「chrome_elf.dll」的問題:

除了出現這個錯誤之外,經常還會有網頁打不開,或是網頁停止回應的狀況!!

一開始以為是裝了哪個擴充套件造成,但問題一直解決不了!!

Read more

如何防止自己的網站被別人以 iframe 蓋台嵌入 (與反制辦法)

「iframe (內置框架)」是用來在網頁中的特定位置嵌入另一個網頁。目前 Facebook、Google+、Twitter...等用來在網頁上顯示社群內容的社群元件,幾乎都是以 iframe 實作出來的。

原本框架是一種很好的應用,但如果是自己辛苦製作的網頁被別人的網站以 iframe 嵌入,因而出現在別人的網站裡,成為別人網站的一部份!!這種感覺就像是自己的心血被別人整碗捧走一樣!!

兩個解決方法

方法 1

於網頁的原始碼加入以下 Script:

<script type="text/javascript">
if( top.location != document.location ){
	top.location.href = document.location.href;
}
</script>

以上的 Script 會檢查瀏覽器最上層視窗的網址是否與目前網頁的網址一致,如果不一致,則把最上層視窗的網址改為目前網頁的網址,就醬。

方法 2 (反制辦法)

於網頁的原始碼加入以下 Script:

<script type="text/javascript">
if( top.location != document.location ){
	document.write("<h1 style='color:#FF0000'>未經授權嵌入別人的網頁是可恥的行為!!</h1>(<a href='"+document.location+"' target='_blank'>原站網址</a>)");
}
</script>

以上的 Script 會檢查瀏覽器最上層視窗的網址是否與目前網頁的網址一致,如果不一致,就顯示:

未經授權嵌入別人的網頁是可恥的行為!!
(原站網址)

我比較不喜歡與人家互嗆,所以我通常是用「方法 1」啦!

MySQL 資料庫的備份與還原

資料庫匯出/備份

1. 備份單一資料庫:

$ mysqldump -u Username -p --opt DatabaseName > Backup.sql

2. 僅備份特定資料庫下的資料表:

$ mysqldump -u Username -p --opt DatabaseName Table1 Table2... > Backup.sql

3. 僅匯出資料表結構:

$ mysqldump -u Username -p --opt --no-data DatabaseName > Backup.sql

4. 備份全部的資料庫:

$ mysqldump -u Username -p -A --opt > AllBackup.sql

mysql/mysqldump/mysqladmin 與「登入」有關的參數說明:

  • -u Username: 用來存取 mysql 資料表的用戶名稱。此參數可省略,若省略,則表示為目前登入 linux 的用戶名稱。
  • -p: 於執行時再詢問密碼。
  • -pPassword: 用來存取 mysql 資料表的密碼,-p 與 Password 的中間不可有空格。

資料庫匯入/還原

1. 建立資料庫,再從備份檔匯入單一資料庫:

$ mysqladmin -u Username -p create DatabaseName
$ mysql -u Username -p DatabaseName < Backup.sql

2. 從備份檔匯入全部的資料庫 (不需先建立資料庫):

$ mysql -u Username -p < AllBackup.sql

狀況處理:

狀況 1. 匯入資料庫時出現錯誤訊息: Unknown collation: 'utf8mb4_unicode_ci' Unknown collation: 'utf8mb4_unicode_520_ci'

說明:

MySQL 於 v5.5.3 版之後才有「utf8mb4」的編碼格式。原本 utf8 的最大編碼長度為 3bytes,而 utf8mb4 的最大編碼長度為 4bytes,因此它比 utf8 可以儲存更多的字元。但是以常用的文字來講,utf8 已經完全足夠使用了。若不升級 MySQL Server,則只須將匯入的字元編碼格式改為原本的 utf8。

解決方法:

先將備份檔中的 utf8mb4 字串替換成 utf8: (以下的三行指令需依照順序執行)

$ sed -i 's/utf8mb4_unicode_ci/utf8_general_ci/g' Backup.sql
$ sed -i 's/utf8mb4_unicode_520_ci/utf8_general_ci/g' Backup.sql
$ sed -i 's/utf8mb4/utf8/g' Backup.sql

全部替換完再進行匯入:

$ mysql -u Username -p DatabaseName < Backup.sql

狀況 2. 從 cpanel 下載的 MySQL 檔案格式為 *.gz,可以用 gunzip 解壓縮:

$ gunzip Backup.sql.gz

注意: 使用 gunzip 解壓縮後,原本的 *.gz 會被刪除!!若要保留舊檔,須改用下列指令:

 $ gunzip -c Backup.sql.gz > Backup.sql

資料庫離線備份/還原

MySQL 的資料庫放在 /var/lib/mysql 下,以資料庫的名稱做為目錄的名稱。直接將 /var/lib/mysql 下的資料庫目錄用 tar 指令個別壓縮起來即可做為備份。要還原再把檔案解壓縮回去。

要以這種方式執行備份與還原都必須先停止 MySQL 的服務:

$ service mysqld stop

參考網頁

處理 DNS 的 CNAME 造成收件者錯誤的問題

第一次遇到客戶因為自己 Server 的 DNS 問題,造成我方要寄信給客戶時,收件者的 EMail Address 會於 SMTP Server 端被自動變更 (寄給 user@example.com 會變成寄給 user@other.example.com),以致於客戶收不到 EMail 的問題!! (客戶可能以為是我方的問題)

我自己測試的結果是與 DNS 的 CNAME 有關:

C:\>nslookup -type=cname example.com
  Server:  dns.hinet.net
  Address: 168.95.1.1
  example.com canonical name = other.example.com

同時我在網路上找到一篇微軟的 KB 文件,已經寫得很清楚了,我就直接把內容放上來。

Read more

免跑銀行,直接線上領取 Google AdSense 廣告收入 (西聯匯款)

Google AdSense

約莫等了半年,終於又收到了一筆 Google AdSense 的廣告收入了,算是農曆過年前的一個小小小紅包。

在台灣,AdSense 的用戶可以使用「西聯匯款」來進行收款,目前台灣有支援西聯匯款的銀行有京城銀行大眾銀行元大銀行

我是使用「京城銀行」,這個有點陌生的銀行。它的「網路西聯匯款」服務可以直接將我的 AdSense 廣告收益從美金轉為台幣存入我的銀行帳戶,並且不收取任何手續費、不用等待,但是會有匯損的問題

不過我今天要操作收款時,發現做為「匯款人」的 Google 的身份又改變了! 原本的身份「Google Ireland Ltd. (愛爾蘭)」,更早之前是「Google Inc. (美國)」,現在的匯款人身份則為「Google Asia Pacific Pte. Ltd. (新加坡)」!

這個付款人的資訊會影響我們能否正常收款,不過沒關係,下面會教你如何識別付款者的身份。

Read more

簡易網頁下拉選單,可支援 MouseOver 與 Click 事件

在網頁界已經有很多的「下拉選單」程式了,不過似乎都搞得太過複雜或太華麗了。

其實下拉選單的原理很簡單,一開始只是先讓「子選單」隱藏,當滑鼠移至「主選單」時再讓子選單顯示。因此,只要能控制網頁元件的 display 樣式屬性就已經成功一半了。

因為本人喜歡重新發明輪子,所以也寫了一個簡易的網頁下拉選單的程式,可以做為初學者入門的參考。

在範例的原始碼中,我儘量讓程式碼看起來淺顯易懂,並且只用 JavaScript,不使用 jQuery 或其它 Framework。我也儘量多寫一些註解,希望 JavaScript 的初學者能看得懂。

Read more

加入 Spotify Premium 會員 3 個月只要 NT$19

歡慶聖誕節,Spotify 從現在起至 12/31 止,加入 Premium 會員 3 個月只需要 NT$19 元,其中包括了收聽音樂時不會突然有廣告的插播、沒有網路也可以收聽清單中的音樂...等。

  • 活動介紹與線上訂購: Click Me
  • 限非 Premium 會員申請

三個月後就會調整回原價 NT$149 元,記得要在第三個月去停止信用卡繼續付款喲!

中文的 jQuery 教學資源

如果想學 jQuery 的話,可以從下列的教學資源開始,讀者應具有 HTML、JavaScript、CSS 的基礎。

網站

上官林傑 - ericsk (2007)

  1. jQuery 學習心得筆記 (1) – 前言
  2. jQuery 學習心得筆記 (2) – 怎麼使用 jQuery 來寫 JavaScript
  3. jQuery 學習心得筆記 (3) – jQuery 的事件(Event)處理
  4. jQuery 學習心得筆記 (4) – Ajax (上)
  5. jQuery 學習心得筆記 (5) – Ajax (下)
  6. jQuery 學習筆記 (6) - 操作 DOM 物件
  7. jQuery 學習筆記 (7) - 擴充 jQuery

以上這幾篇是我的 jQuery 啟蒙文章。
Read more

return top