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四個檔案的部份程式碼)
- 在 config.php 增加一行設定值,讓moodle可以正常上傳中文檔名
$CFG->unicodecleanfilename = true; - file.php 不用修改(之前在「讓moodle可以上傳、下載中文檔名 」這篇文章有紀錄要修改,若有修改者,記得改回來)
- 修改 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);
}
- 修改 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); - 修改 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
沒有留言:
張貼留言