2007年12月25日 星期二

木工油漆完成囉

我家木作工程從12月12日開始施作,二名師父加三名油漆師父。歷時12天,終於在12月25日晚上6點30分宣告完工。


一樓樓梯下改成收納空間的儲藏室,隱藏式把手,兩片門可以全開也可固定右邊小的那片,從左邊大片的門進出。兩個門的下方另外開了個通氣孔,方便散熱或通風用。




兩片門全開後,往一樓樓梯下儲藏室內看,裏面釘了三個層板。另一邊還有佷大的儲藏空間



二樓客廳矮牆上造形,玻璃還沒有上去。



由餐廳往客廳看過去,做了個簡單的層板,主要要跑音響線...




廚房的拉門牆及餐廳的木樁天花板造形,拉門是用油性油漆,然後用噴的... 有點光滑亮亮的感覺...



由客廳往餐廳、廚房看過去



四樓木製樓梯全景圖



往四樓樓頂木製樓梯展開圖,一層一層的往上爬。




以後要爬上去應該會變簡單點了吧...



拋棄式信箱跟申請試用KEY

spambox http://spambox.us/


trashmail http://ssl.trashmail.net/


申請小紅帽3個月試用key http://www1.avira.com/de/evaluate/chip.php


申請小紅帽6個月試用key http://www1.avira.com/en/evaluate/pcworld_poland.php


2007年12月23日 星期日

中正大學nopam安裝筆記

Nopam 無痛式垃圾郵件過濾系統


這是中正大學所開發出來的


2.3版下載網址:http://nopam.ccu.edu.tw/agreement.htm


中文手冊:http://nopam.ccu.edu.tw/download/v2/nopam2_user_manual.doc


整個安裝只有一個地方要特別注意


就是裝了 curl 後,要


cd /usr/local/lib


cp -r curl.so.4 curl.so.3


不能用 mv 喔, 因為有其它的軟體還是要用 curl.so.4


IE hungapp

提高XP的回應速度


 


運行→regedit→找到HKEY_ CURRENT_ USERControl PanelDesktop子鍵,修改Hung App Timeout值。Hung App Timeout值表示系統要求用戶手工結束被掛起任務的時間極限,預設值5000,類型是REG_SZ,減小該值可以降低系統在某些特殊情形下的回應延遲,例如,可以把該值設置為1000。調整該鍵值時應當注意:如果在你的系統上,某些軟體的運行速度本來就很慢,把該鍵值設置得太小可能使XP誤認為正在運行的軟體已經被掛起。如果出現這種情況,你可以逐步增加Hung App Timeout值,每次增加1000,直到XP不再把正在運行的軟體誤認為停止回應


2007年12月20日 星期四

解除BIOS密碼方式

使用萬用密碼:

   萬用密碼,通常廠商用來方便自己的工程人員使用,所以萬用密碼可以無論你設什麼密碼,都能進入BIOS重新設定。


 


   因各廠商的萬用密碼皆不同,必須做許多嘗試才會成功,而且輸入時須留意大小寫。


 


  AWARD    aLLy      j322


  j256     Syxz      589721


  AWARD-SW  HLT     BIOSTAR


  CONCAT   589589     SER


  LKWPETER  AMI     ALFAROME


  SKY_FOX   AWARD_SW  awkward


Moodle 1.8.2 升級與安裝 參考文件

由1.6.4版升級到1.8.2版,將布景主題改成Autumn,中文化部分到Moodle 中文加油站去下載。


moodle升級, 其實很容易,因為程式檔案與課程內容放在不同的目錄下,所以只要取得最新程式,把原本的config.php(設定檔)放進來,再用瀏覽器去執行,moodle就會自動進行升級了。 


 


升級後,每當要進入編輯模式時,畫面上就只剩下一些區塊,課程內容完全看不到,原以為是不能這樣大幅度升級。所以先1.6升到1.7,沒這問題,再由1.7升級到1.8,還是一樣的問題出現。


後來才想到去打開「除錯」功能,選擇「ALL:...」 ,果然看到了一些錯誤訊息

Warning: require_once(D:\xampp\htdocs\moodle/mod/feedback/lib.php)...
Warning: require_once(D:\xampp\htdocs\moodle/mod/questionnaire/lib.php)...

原來是之前有安裝一些額外的模組(feedback、questionnaire),而全新的moodle1.8.2裡沒有這些模組的關係,所以去Moodle: Modules and plugins下載需要的模組放到mod下,就沒問題了。 


更新過程



1.備份資料:




  • 將moodle改名為moodlebak
  • 備份資料庫


2.取得檔案:




  • 下載目前最新版的moodle1.8.2版並解壓縮,目錄名稱為原本的moodle
  • 取回原本的config.php
  • Moodle: Themes下載新的布景主題Autumn,並放在theme下面。
  • 下載缺少的模組


3.以瀏覽器執行moodle



瀏覽器連到moodle,畫面上就會出現一些訊息,系統會開始進行一連串的更新。


 


使用pop3認證
需安裝 PHP 的 IMAP 模組 -->yum install php-imap


關閉修改密碼的功能

有時候學生會把自己的密碼改掉,然後跟你說忘記了...。

我的作法是在  login/change_password.php 這個檔案最前面加上


<SCRIPT LANGUAGE="JavaScript">
<!--
alert("很抱歉!目前不提供密碼修改功能!\n請按「確定」回上一頁!") ;
history.back() ;
//-->
</SCRIPT>

這樣所有的使用者就不能修改密碼了。

[維護]你的 moodle 變慢了嗎?


這學期上課使用 moodle 時,一個班的學生同時使用線上測驗時,就會發生大部份同學遇到 MySQL OverLoad 的問題,進主機用 top 觀察一下,記憶體用量沒問題,但是 mysqld 卻使用了 99.9% 的 CPU 。


檢查了一下 moodle 的 db 使用量,發覺有一個資料表 mdl_cache_text 就用掉了 400MB 以上。這個表應該是前端網頁文字的快取用途,看了一下內容,裡面的條目重複情形還蠻多的。


既然是 cache ,那代表即使刪掉了,也會自己重建吧?!另外,猜測每次執行時,可能會大量 qurey 這個表,所以大膽猜一下,這個表可能是造成系統瓶頸的原因。所以,動手將這個表的內容清掉了。重新進入 moodle 後,感覺反應確實有變快了。


再來就是等星期三上課時的實測效果,看看是不是真的能有效的解決問題了。


[update 2007-09-26]


今天上課時,完全沒有再發生 MySQL OverLoad 問題了,所有學生 ( 44 人 ) 都很順利在同一段時間裡進入隨堂測驗。看來之前的猜測沒錯。有空再來看看 moodle 這個 text_cache 機制到底是怎麼回事?! 



freebsd下用unixodbc連sqlserver

FreeBSD環境下設定odbc



  • 安裝unixODBC
                cd  /usr/ports/database/unixODBC; make install clean


  • 安裝MySQL ODBC Driver
                cd  /usr/ports/database/mysql-connector-odbc; make install clean

  • 安裝MS SQLServer ODBC Driver

                cd  /usr/ports/database/freetds-msdblib; make install clean


 



  • /usr/local/etc/odbcinst.ini 指定安裝的odbc library位置,例如

==================================================
[MySQL]
Description             = ODBC Driver for MySQL
Driver          = /usr/local/lib/libmyodbc3.so
Setup           = /usr/local/lib/libodbcmyS.so
FileUsage               = 1
CPTimeout               =
CPReuse         =

[FreeTDS]
Description             = ODBC Driver for MS SQL server /Sybase v0.63
Driver          = /usr/local/lib/libtdsodbc.so
Setup           = /usr/local/lib/libtdsS.so
UsageCount              = 2

=======================================


 



  •  /usr/local/etc/odbc.ini 整定DSN (Data Source Name),例如

================================================


[MySQL-test]
Description     = MySQL database test
Driver          = MySQL
Server          = localhost
Database        = databasename
Port            = 3306
Socket          =
Option          =
Stmt            =

[MS-SQLServer-test]
Description     = MS SQLServer(OR Sybase) database test
Driver          = FreeTDS
Server          = IP Address
Port            = PortNumber(1433)
Database        = databasename
Trace           = No
========================================================

 


測試程式:isql


***


NOTE:


亦可以由/usr/ports/databases/freetds編譯**,但是注意TDS Version內定為5.0,版本適用範圍請參閱下列網址 http://www.freetds.org/userguide/choosingtdsprotocol.htm


 測試以8.0連接SQL EXPRESS( SQL Server 2005),能順利連接但無法下SQL指令,改用7.0則正常運作。


 **


make   TDS_VER=7.0 -DWITH_MSDBLIB install clean 


freebsd下用unixodbc連sqlserver

FreeBSD環境下設定odbc



  • 安裝unixODBC
                cd  /usr/ports/database/unixODBC; make install clean


  • 安裝MySQL ODBC Driver
                cd  /usr/ports/database/mysql-connector-odbc; make install clean

  • 安裝MS SQLServer ODBC Driver

                cd  /usr/ports/database/freetds-msdblib; make install clean


 



  • /usr/local/etc/odbcinst.ini 指定安裝的odbc library位置,例如

==================================================
[MySQL]
Description             = ODBC Driver for MySQL
Driver          = /usr/local/lib/libmyodbc3.so
Setup           = /usr/local/lib/libodbcmyS.so
FileUsage               = 1
CPTimeout               =
CPReuse         =

[FreeTDS]
Description             = ODBC Driver for MS SQL server /Sybase v0.63
Driver          = /usr/local/lib/libtdsodbc.so
Setup           = /usr/local/lib/libtdsS.so
UsageCount              = 2

=======================================


 



  •  /usr/local/etc/odbc.ini 整定DSN (Data Source Name),例如

================================================


[MySQL-test]
Description     = MySQL database test
Driver          = MySQL
Server          = localhost
Database        = databasename
Port            = 3306
Socket          =
Option          =
Stmt            =

[MS-SQLServer-test]
Description     = MS SQLServer(OR Sybase) database test
Driver          = FreeTDS
Server          = IP Address
Port            = PortNumber(1433)
Database        = databasename
Trace           = No
========================================================

 


測試程式:isql


***


NOTE:


亦可以由/usr/ports/databases/freetds編譯**,但是注意TDS Version內定為5.0,版本適用範圍請參閱下列網址 http://www.freetds.org/userguide/choosingtdsprotocol.htm


 測試以8.0連接SQL EXPRESS( SQL Server 2005),能順利連接但無法下SQL指令,改用7.0則正常運作。


 **


make   TDS_VER=7.0 -DWITH_MSDBLIB install clean 


moodle htmlarea中文檔名問題


1.同前一篇 basename問題,修改lib/editor/htmlarea/coursefiles.php: basename()->file_basename()


2.插入圖片中文檔名無法預覽,lib/weblib.php之clean_text() function中cleanAttributes作用為Clean up embedded scripts把這程式碼註解掉雖可正常顯示,但卻可能隱含安全漏洞。 



Moodle中文檔名上傳與下載與ZIP壓縮解壓縮問題




安裝moodle 1.8.2(OS and Web Server: FreeBSD 6.2 and Apache22, PHP5.1.6)上傳中文檔名的檔案後無法正確顯示中文名問題,先到網路搜尋解決方法,在這幾篇看到修正方法:


1.http://moodle.club.tw/moodle/mod/forum/discuss.php?d=66&parent=163 


2.http://plog.hlps.tcc.edu.tw/plog/post/1/2945


以下是個人的說明與提出一些修正的看法


於config.php加入


$CFG->unicodecleanfilename = true;

即可正常上傳中文檔名


在lib/moodlelib.php下亦有這段說明


/**
 * Cleans a given filename by removing suspicious or troublesome characters
 * Only these are allowed: alphanumeric _ - .
 * Unicode characters can be enabled by setting $CFG->unicodecleanfilename = true in config.php
 *
 * WARNING: unicode characters may not be compatible with zip compression in backup/restore,
 *          because native zip binaries do weird character conversions. Use PHP zipping instead.
 *
 * @param string $string  file name
 * @return string cleaned file name
 */


因此似乎雖解決上傳中文檔名問題但zip壓縮卻無法使用中文檔名,以moodle 內建pclzip也許可解決???


 以下有兩個問題待解決:



  1. 下載中文檔名於IE下有問題,會轉成英文檔名,Firefox可正常下載
  2. 無論在firefox或IE均無法壓縮與解壓縮中文檔名(備份亦然)

產生此問題原因分析:



  1. IE6對於UTF-8中文檔名無法正常下載,IE7則只對zip的中文檔會產生問題其餘對office或wmv,gif,jpg不會產生問題,所以對於若是IE瀏覽器下載時將檔名轉成Big5應可解決。
  2. 壓縮與解壓縮問題,原因在於php的basename() function對於UTF-8對中文檔名會回傳成無中文檔名或不正確之檔名(IE6與IE7不一樣,IE7較接近Frefox),改寫basename function應可解決。不知道其他php版本會不會這樣???沒試過。

文章最底下有一小段程式碼支持上述說法。


==================================


詳細改寫程式碼,請參閱以下說明: 


 1. 下載中文檔名於IE下有問題,Firefox可正常下載


 雖然註解lib/file.php下的這一行
//$filename = $args[count($args)-1];
send_file($pathname, $filename, $lifetime, $CFG->filteruploadedfiles, false, $forcedownload);
 


可解決下載問題,但使用 //$filename = $args[count($args)-1];


則造成下一行程式call send_file(....)的filename參數為null。


trace send_file function(在lib/filelib.php檔案中)以filename無法正確取得mimetype,不知會不會造成隱含的問題?


經過簡化後測試(參閱最下面程式碼)發現應該是以@header('Content-Disposition: attachment; filename='.$filename);
送出UTF-8中文檔名造成IE錯誤(與IE是否設定以UTF-8傳送URL無關)


因此做了以下修改


1. file.php不註解 $filename = $args[count($args)-1];


2. lib/filelib.php加入一小段程式碼: 


header('Last-Modified: '. gmdate('D, d M Y H:i:s', $lastmodified) .' GMT');

if (check_browser_version()){
        $filename=iconv("UTF-8","Big5",$filename);
}


if ($forcedownload) {
       @header('Content-Disposition: attachment; filename='.$filename);
} else {
       @header('Content-Disposition: inline; filename='.$filename);   
 }


 紅色部份是加入的程式碼,check_browser_version()是在lib/moodlelib.php內的function用來檢查用戶端使用何種瀏覽器


 


2. php之basename() 內建function無法正確傳回中文檔名,造成壓縮與解壓縮問題
於lib/moodlelib.php加一function 來取代原來的basename


function file_basename($file= null) {
    if($file=== null || strlen($file)<= 0) {
        return null;
    }
  
    $file= explode('?', $file);
    $file= explode('/', $file[0]);
    $basename= $file[count($file)-1];

    return $basename;  
}


因此需修改的程式碼部份說明如下:


A. files/index.php修改如下


在case "paste": 修改
$shortfile = basename($file);->$shortfile = file_basename($file);


在case "unzip": 修改
$file = basename($file);->$file = file_basename($file);


 在case "listzip": 修改
$file = file_basename($file);->$file = file_basename($file);



 約825行處$fileurl改成$filesafe(fileurl為未編碼的檔名,filesafe為編碼的檔名), 則不管IE6或 IE7均能正常取得正確的檔名


else if ($icon == "zip.gif") {
                $edittext .= "<a href=\"index.php?id=$id&wdir=$wdir&file=
$filesafe&action=unzip&sesskey=$USER->sesskey&choose=$choose\">$strunzip</a> ";
                //
                $edittext .= "<a href=\"index.php?id=$id&wdir=$wdir&file=
$filesafe&action=listzip&sesskey=$USER->sesskey&choose=$choose\">$strlist</a> ";


B. 修改lib/moodlelib.php


在lib/moodlelib.php


修改function zip_files(..)


//$destfilename = $path_parts["basename"];  //The name of the zip file
    $destfilename = file_basename($destination);


//$filestozip .= escapeshellarg(basename($filetozip));
$filestozip .= escapeshellarg(file_basename($filetozip)); 


修改 function unzip_file(...)


//$zipfilename = $path_parts["basename"];  //The name of the zip file
    $zipfilename = file_basename($zipfile);



經過以上修改無論在Firefox, IE6 or IE7均能正常使用中文檔名了。 



簡化測試程式碼
--------------------------------------------


<?
//echo basename("/usr/local/test/中文測試檔.zip");


$filename=iconv("UTF-8","Big5","中文測試檔.zip");
//$filename="中文測試檔.zip";
@header('Content-Disposition: attachment; filename='.$filename);
@header('Content-Type: application/zip');
readfile_chunked("中文測試檔.zip");



//readfile_chunked 為lib/filelib.php內的function
function readfile_chunked($filename, $retbytes=true) {
    $chunksize = 1*(1024*1024); // 1MB chunks - must be less than 2MB!
    $buffer = '';
    $cnt =0;// $handle = fopen($filename, 'rb');
    $handle = fopen($filename, 'rb');
    if ($handle === false) {
        return false;
    }

    while (!feof($handle)) {
        @set_time_limit(60*60); //reset time limit to 60 min - should be enough for 1 MB chunk
        $buffer = fread($handle, $chunksize);
        echo $buffer;
        flush();
        if ($retbytes) {
            $cnt += strlen($buffer);
        }
    }
    $status = fclose($handle);
    if ($retbytes && $status) {
        return $cnt; // return num. bytes delivered like readfile() does.
    }
    return $status;
}
?>



Moodle中文日期顯示問題


Moodle日期顯示格式較國際化,常常為日-月-年,欲修改為我們常用的格式可修改moddle資料夾下lang/en_utf8/langconfig.php


首先看看php日期顯示格式化的函式strftime():


傳回的字串可以依下列的格式而定:


 



  • %a 星期幾的縮寫。
  • %A 星期幾的全名。
  • %b 月份名稱的縮寫。
  • %B 月份名稱的全名。
  • %c 本地端日期時間較佳表示字串。
  • %d 用數字表示本月的第幾天 (範圍為 00 至 31)。
  • %H 用 24 小時制數字表示小時數 (範圍為 00 至 23)。
  • %I 用 12 小時制數字表示小時數 (範圍為 01 至 12)。
  • %j 以數字表示當年度的第幾天 (範圍為 001 至 366)。
  • %m 月份的數字 (範圍由 1 至 12)。
  • %M 分鐘。
  • %p 以 'AM' 或 'PM' 表示本地端時間。
  • %S 秒數。
  • %U 數字表示為本年度的第幾周,第一個星期由第一個周日開始。
  • %W 數字表示為本年度的第幾周,第一個星期由第一個周一開始。
  • %w 用數字表示本周的第幾天 ( 0 為周日)。
  • %x 不含時間的日期表示法。
  • %X 不含日期的時間表示法。
  • %y 二位數字表示年份 (範圍由 00 至 99)。
  • %Y 完整的年份數字表示,即四位數。
  • %Z 時區或名稱縮寫。
  • %% % 字元。

 moodle原始的langconfig.php如下:


$string['alphabet'] = 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z';
$string['backupnameformat'] = '%%Y%%m%%d-%%H%%M';
$string['firstdayofweek'] = '0';
$string['locale'] = 'en_AU.UTF-8';
$string['localewin'] = 'English_Australia.1252';
$string['localewincharset'] = '';
$string['oldcharset'] = 'ISO-8859-1';
$string['strftimedate'] = '%%d %%B %%Y';
$string['strftimedateshort'] = '%%d %%B';
$string['strftimedatetime'] = '%%d %%B %%Y, %%I:%%M %%p';
$string['strftimedaydate'] = '%%A, %%d %%B %%Y';
$string['strftimedaydatetime'] = '%%A, %%d %%B %%Y, %%I:%%M %%p';
$string['strftimedayshort'] = '%%A, %%d %%B';
$string['strftimedaytime'] = '%%a, %%H:%%M';
$string['strftimemonthyear'] = '%%B %%Y';
$string['strftimerecent'] = '%%d %%b, %%H:%%M';
$string['strftimerecentfull'] = '%%a, %%d %%b %%Y, %%I:%%M %%p';
$string['strftimetime'] = '%%I:%%M %%p';
$string['thischarset'] = 'UTF-8';
$string['thisdirection'] = 'ltr';
$string['thislanguage'] = 'English';


 


我們可依我們的需要修改如下:


原來:   $string['strftimedate'] = '%%d %%B %%Y';


修改為:$string['strftimedate'] = '%%Y年 %%m月 %%d日';
則日期原為  6 July 2007 --> 2007年 7月 6日



線上資源連結到中文網頁問題

是新增線上資源中連結到檔案或網站直接連結中文檔名會造成IE6無法找到檔案問題。

原因描述:
此問題只會出現在IE6,IE7或Firefox並不會出現此問題,原因仍發生在IE6送網址仍以BIG5送出,前篇文章於下載檔案時將檔名轉成BIG5即可,但是本文問題出現在線上資源存取方式為先呼叫mod/resource/view.php判斷是何種資源再呼叫相關的程式(例如file.php),而中文檔名經IE6變成BIG5碼再呼叫file.php則造成 //check that file exists下一行檢查檔名找不到檔案


修正方法:
修改mod/resource/type/file/resource.class.php將中文檔名經urlencode則能正常


原來:
}else { //Normal Uploaded file
  if ($CFG->slasharguments) {


$relativeurl="/file.php/{$course->id}/{$resource->reference}";


上一行改成


if (check_browser_version()) {
        if (!check_browser_version("MSIE","7")) {

            $str=$resource->reference;
            $en="";
            while ($str<>".")
            {
                $en=urlencode(basename($str)).$en;
               //注意!若系統為PHP5.1.6則上一行需改成
   
               //$en=urlencode(file_basename($str)).$en;  
               //PHP5.2.4測試後basename已可正常處理中文,因此可不用改成file_basename
  
                $str=dirname($str);
                if ($str<> ".")
                    $en="/".$en;
            }
            $relativeurl = "/file.php/{$course->id}/$en";

        }
        else
            $relativeurl = "/file.php/{$course->id}/{$resource->reference}";
    }
    else
       $relativeurl = "/file.php/{$course->id}/{$resource->reference}";


 紅色部份為檢查IE6,藍色部份因資料夾也可能是中文


附記:php5.1.6 basename對UTF-8中文處理會有問題,但php5.2.4則能正常處理。 


Moodle中文檔名上傳與下載與ZIP壓縮解壓縮問題

post by Rong-Fang Wu @ 22 九月, 2007 10:52








安裝moodle 1.8.2(OS and Web Server: FreeBSD 6.2 and Apache22, PHP5.1.6)上傳中文檔名的檔案後無法正確顯示中文名問題,先到網路搜尋解決方法,在這幾篇看到修正方法:


1.http://moodle.club.tw/moodle/mod/forum/discuss.php?d=66&parent=163 


2.http://plog.hlps.tcc.edu.tw/plog/post/1/2945


以下是個人的說明與提出一些修正的看法


於config.php加入


$CFG->unicodecleanfilename = true;

即可正常上傳中文檔名


在lib/moodlelib.php下亦有這段說明


/**
 * Cleans a given filename by removing suspicious or troublesome characters
 * Only these are allowed: alphanumeric _ - .
 * Unicode characters can be enabled by setting $CFG->unicodecleanfilename = true in config.php
 *
 * WARNING: unicode characters may not be compatible with zip compression in backup/restore,
 *          because native zip binaries do weird character conversions. Use PHP zipping instead.
 *
 * @param string $string  file name
 * @return string cleaned file name
 */


因此似乎雖解決上傳中文檔名問題但zip壓縮卻無法使用中文檔名,以moodle 內建pclzip也許可解決???


 以下有兩個問題待解決:



  1. 下載中文檔名於IE下有問題,會轉成英文檔名,Firefox可正常下載
  2. 無論在firefox或IE均無法壓縮與解壓縮中文檔名(備份亦然)

產生此問題原因分析:



  1. IE6對於UTF-8中文檔名無法正常下載,IE7則只對zip的中文檔會產生問題其餘對office或wmv,gif,jpg不會產生問題,所以對於若是IE瀏覽器下載時將檔名轉成Big5應可解決。
  2. 壓縮與解壓縮問題,原因在於php的basename() function對於UTF-8對中文檔名會回傳成無中文檔名或不正確之檔名(IE6與IE7不一樣,IE7較接近Frefox),改寫basename function應可解決。不知道其他php版本會不會這樣???沒試過。

文章最底下有一小段程式碼支持上述說法。


==================================


詳細改寫程式碼,請參閱以下說明: 


 1. 下載中文檔名於IE下有問題,Firefox可正常下載


 雖然註解lib/file.php下的這一行
//$filename = $args[count($args)-1];
send_file($pathname, $filename, $lifetime, $CFG->filteruploadedfiles, false, $forcedownload);
 


可解決下載問題,但使用 //$filename = $args[count($args)-1];


則造成下一行程式call send_file(....)的filename參數為null。


trace send_file function(在lib/filelib.php檔案中)以filename無法正確取得mimetype,不知會不會造成隱含的問題?


經過簡化後測試(參閱最下面程式碼)發現應該是以@header('Content-Disposition: attachment; filename='.$filename);
送出UTF-8中文檔名造成IE錯誤(與IE是否設定以UTF-8傳送URL無關)


因此做了以下修改


1. file.php不註解 $filename = $args[count($args)-1];


2. lib/filelib.php加入一小段程式碼: 


header('Last-Modified: '. gmdate('D, d M Y H:i:s', $lastmodified) .' GMT');

if (check_browser_version()){
        $filename=iconv("UTF-8","Big5",$filename);
}


if ($forcedownload) {
       @header('Content-Disposition: attachment; filename='.$filename);
} else {
       @header('Content-Disposition: inline; filename='.$filename);   
 }


 紅色部份是加入的程式碼,check_browser_version()是在lib/moodlelib.php內的function用來檢查用戶端使用何種瀏覽器


 


2. php之basename() 內建function無法正確傳回中文檔名,造成壓縮與解壓縮問題
於lib/moodlelib.php加一function 來取代原來的basename


function file_basename($file= null) {
    if($file=== null || strlen($file)<= 0) {
        return null;
    }
  
    $file= explode('?', $file);
    $file= explode('/', $file[0]);
    $basename= $file[count($file)-1];

    return $basename;  
}


因此需修改的程式碼部份說明如下:


A. files/index.php修改如下


在case "paste": 修改
$shortfile = basename($file);->$shortfile = file_basename($file);


在case "unzip": 修改
$file = basename($file);->$file = file_basename($file);


 在case "listzip": 修改
$file = file_basename($file);->$file = file_basename($file);



 約825行處$fileurl改成$filesafe(fileurl為未編碼的檔名,filesafe為編碼的檔名), 則不管IE6或 IE7均能正常取得正確的檔名


else if ($icon == "zip.gif") {
                $edittext .= "<a href=\"index.php?id=$id&wdir=$wdir&file=
$filesafe&action=unzip&sesskey=$USER->sesskey&choose=$choose\">$strunzip</a> ";
                //
                $edittext .= "<a href=\"index.php?id=$id&wdir=$wdir&file=
$filesafe&action=listzip&sesskey=$USER->sesskey&choose=$choose\">$strlist</a> ";


B. 修改lib/moodlelib.php


在lib/moodlelib.php


修改function zip_files(..)


//$destfilename = $path_parts["basename"];  //The name of the zip file
    $destfilename = file_basename($destination);


//$filestozip .= escapeshellarg(basename($filetozip));
$filestozip .= escapeshellarg(file_basename($filetozip)); 


修改 function unzip_file(...)


//$zipfilename = $path_parts["basename"];  //The name of the zip file
    $zipfilename = file_basename($zipfile);



經過以上修改無論在Firefox, IE6 or IE7均能正常使用中文檔名了。 



簡化測試程式碼
--------------------------------------------


<?
//echo basename("/usr/local/test/中文測試檔.zip");


$filename=iconv("UTF-8","Big5","中文測試檔.zip");
//$filename="中文測試檔.zip";
@header('Content-Disposition: attachment; filename='.$filename);
@header('Content-Type: application/zip');
readfile_chunked("中文測試檔.zip");



//readfile_chunked 為lib/filelib.php內的function
function readfile_chunked($filename, $retbytes=true) {
    $chunksize = 1*(1024*1024); // 1MB chunks - must be less than 2MB!
    $buffer = '';
    $cnt =0;// $handle = fopen($filename, 'rb');
    $handle = fopen($filename, 'rb');
    if ($handle === false) {
        return false;
    }

    while (!feof($handle)) {
        @set_time_limit(60*60); //reset time limit to 60 min - should be enough for 1 MB chunk
        $buffer = fread($handle, $chunksize);
        echo $buffer;
        flush();
        if ($retbytes) {
            $cnt += strlen($buffer);
        }
    }
    $status = fclose($handle);
    if ($retbytes && $status) {
        return $cnt; // return num. bytes delivered like readfile() does.
    }
    return $status;
}
?>



moodle大量使用者上傳/修改


  1. 使用者→帳號→上傳使用者
  2. 利用Excel或筆記本建立一個文字檔
    必要欄位
    username,password,firstname,lastname,email
  3. 存檔時編碼改成UTF-8
  4. 點選下方的「上傳使用者」。


  • 此方式也適用於僅修改密碼。(在「更新現有帳號」勾選【是】)

moodle上傳檔案的限制


Apache 的設定 (可以再改大一些)



LimitRequestBody 10485760



PHP 的設定 (可以再改大一些)



post_max_size = 16M


upload_max_filesize = 32M



Moodle 自身特殊的連結


開課申請



http://moodle網址/course/request.php


須先啟用「課程→課程申請→啟用課程請求」才可以使用



審核開課



http://moodle網址/course/pending.php



我的課程



http://moodle網址/my/



moodle 中文檔名可以正常上傳、下載及壓縮下載

http://plog.yejh.tc.edu.tw/post/2/2089



之前有參考文章讓moodle可以使用中文檔名(讓moodle可以上傳、下載中文檔名 ),但實際使用時,中文檔名或中文目錄可顯示,卻會無法正常下載或檔案連結的問題。後來在Moodle 中文加油站看到有人張貼一篇文章:「Moodle中文檔名上傳與下載與zip壓縮解壓縮問題」,同意他所說檔名big5與utf-8互轉的想法,所以在實際修改程式及測試後,證實上述文章的方法可行。


重新整理這文章及自己moodle修改的過程與方法,紀錄如下:(修改 config.php 設定; 以及 file.php、lib/filelib.php、lib/moodlelib.php、files/index.php四個檔案的部份程式碼)





  1. 在 config.php 增加一行設定值,讓moodle可以正常上傳中文檔名

    $CFG->unicodecleanfilename = true;



  2. file.php 不用修改(之前在「讓moodle可以上傳、下載中文檔名 」這篇文章有紀錄要修改,若有修改者,記得改回來)
     


  3. 修改 lib/filelib.php  ,大約在 307 行,增加 check_browser_version() 檢查瀏覽器類型的一小段程式碼(紅色部份)
     
        //do not put '@' before the next header to detect incorrect moodle configurations,      
        //error should be better than "weird" empty lines for admins/users          
        //TODO: should we remove all those @ before the header()? Are all of the values supported on all servers?
        header('Last-Modified: '. gmdate('D, d M Y H:i:s', $lastmodified) .' GMT';);

        if (check_browser_version()){
            $filename=iconv("UTF-8","Big5",$filename);
        }

        if ($forcedownload) {
            @header('Content-Disposition: attachment; filename='.$filename);
        } else {
            @header('Content-Disposition: inline; filename='.$filename);
        }
     


  4. 修改 lib/moodlelib.php

    4-1. 增加一個 function file_basename ,以取代原來 basename 函數。直接加在程式第一個 function 前就好。
     
    function file_basename($file= null) {
        if($file=== null || strlen($file)<= 0) {
                return null;
        }
        $file= explode('?', $file);
        $file= explode('/', $file[0]);
        $basename= $file[count($file)-1];
        return $basename;
    }



    4-2. 修改 lib/moodlelib.php 中,function zip_files 及 function unzip_file 二個函數庫裡的程式

    第6144行:
        原來的  //$destfilename = $path_parts["basename"];  //The name of the zip file
        改為    $destfilename = file_basename($destination);

    第6232行:
        原來的  // $filestozip .= escapeshellarg(basename($filetozip));
        改為    $filestozip .= escapeshellarg(file_basename($filetozip));
      
    第6261行:
      原來的    //$zipfilename = $path_parts["basename"];  //The name of the zip file
      改為      $zipfilename = file_basename($zipfile);


  5. 修改 files/index.php,修改三段程式碼,把原來的basename改為file_basename

    5-1. 在 case "paste": 修改第288 行,把$shortfile = basename($file); 改為 $shortfile = file_basename($file);

            case "paste":
                html_header($course, $wdir);
                if (isset($USER->fileop) and ($USER->fileop == "move";) and confirm_sesskey()) {
                    foreach ($USER->filelist as $file) {
                        $shortfile = file_basename($file);
                        $oldfile = $basedir.'/'.$file;
                        $newfile = $basedir.$wdir."/".$shortfile;
                        if (!rename($oldfile, $newfile)) {
                            echo "<p>Error: $shortfile not moved</p>";
                        }
                    }
                }
     
    5-2.  在 case "unzip": 修改第519行,把$shortfile = basename($file); 改為 $shortfile = file_basename($file);,方法如5-1。
     
    5-3.  在 case "listzip": 修改第551行,把$shortfile = basename($file); 改為 $shortfile = file_basename($file);,方法如5-1。

在經過上傳、下載、課程備份壓縮、壓縮下載等測試,目前均可以正常運作。RFWU真是厲害!!


http://plog.ptes.tp.edu.tw/post/97/549



2007年12月15日 星期六

樓梯大改造工程

建商在我家四樓要去四樓頂的地方竟然開了個白鐵蓋門,要上去四樓頂得爬上這個白鐵樓梯。由於曾經在攀爬的過程中,整個白鐵樓梯差點完全脫離牆壁,嚇死我了..... 也促使了我家想要大改造這個樓梯的意圖,終於我們聘請了一位資深設計師來幫我們改造............



首先,先把 白鐵樓梯及扶手全部拆除..... 再見了,爛透了的白鐵樓梯.......




木工師父就依設計師的圖面開始施作....












今天12月15日,把整個樓梯的雛形架上去囉.... 還沒固定.... 故敬請期待大作完工....



 


最後,公佈我家聘請的樓梯資深設計師就是.......................


旻媽


2007年12月3日 星期一

終於有免費版了Web-based SSL VPN Server

原廠網站:http://3sp.com/showSslExplorerCommunity.do

SSL-Explorer is the world's first open-source, browser-based SSL VPN solution. This unique remote access control solution provides you with a means of securely accessing intranet applications and resources using a standard web browser.



只要透過網頁就可以從遠端VPN連線回來,讚喔。


安裝說明請參考:http://www.mw.net.tw/user/lindahu/blog/2006/11/10/1502/42268/



目前是推出 SSL-Explorer Community Edition 免費版,另有推出 Enterprise Edition。 企業無限人數版的售價是 USD 2,560.00

冰箱訂了...

我家冰箱確定了...

TOSHIBA 東芝422公升 變頻-獨立製冰六門冰箱 ( GR-L42FTT )



  • 容量422公升、冷凍室81公升、冷藏室233公升、保濕蔬果室77公升
  • 外型尺寸:寬685cm x 深658cm x 高1818cm

  • 日本原裝進口、高級鏡面鋼板
  • 原裝進口變頻壓縮機5年保固
  • 主要零件3年保固
  • DSP超級變頻
  • 奈米光等離子活氧抗菌
  • -40℃急速冷凍
  • 獨立製冰室
  • 鮮藏上冷凍室






詳細介紹請看:http://dashi.pchome.com.tw/?m=ditPage&f=Page2_Item&dasid=DB00021403&itno=ACAH03-A13269269&dctid=022&SRNO=ACAH03


到等到12月底貨從日本進來才能確定可以供貨.... 期待中...


97/1/15 備註;一波三折的冰箱,原本還很高興終於貨運船從日本港口出港了,結果過了快一個星期後,廠商竟然告知沒貨...太神奇了,現在轉向另一個管道詢問中...希望會有貨,這台是旻媽大人想要的機型,古人說,工欲善其事,事先利其器.


為了要有好的早餐,為了要有好的午餐,為了要有好的晚餐....什麼關係都動用下去了...再度期待中


97/1/15最新消息:1/17星期四下午送冰箱... 希望不要又被放羊了...


2007年12月1日 星期六

湖內創浩傢俱~成家專案傢俱敗下去了

96年12月1日傢俱敲定大部份.... 湖內創浩傢俱....


首先,介紹一下白鋼琴烤漆電視櫃牆。



再來,原本已經選好的茶几又被翻盤了..... 最後,旻媽選中了這一組的茶几。



脄後,這是上次就選定了的可折合式餐桌。下圖是半展開的樣示。



另外,也選了八張餐椅。



加上一張 6x6.2 及一張 5x6.2 的超級古董型的樟木床床組,不含衣櫥及化妝枱。兩個公主在樟木床上玩,還請小姐幫忙帶。



全部以成家專案在台南傢俱展成交了.....

漏拍了一個,就是L型沙發。哈..... 等弄好了再來拍....

天啊,木工都還沒做.... 我就已經花了多少錢去了.... 還款達人請教教我如何還貸? ....