顯示具有 Moodle 標籤的文章。 顯示所有文章
顯示具有 Moodle 標籤的文章。 顯示所有文章

2007年12月20日 星期四

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 機制到底是怎麼回事?! 



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年7月5日 星期四

修復 moodle 的 log 功能

有時 moodle 的 log 會無法記錄..這時有可能時 log table 壞了..


repair table mdl_log


關於 repair 語法的參考: REPAIR TABLE Syntax