課題で提出されたファイル(Word,Excel)を開くと文字化けする

課題で提出されたファイル(Word,Excel)を開くと文字化けする

- 保昌 伊東 の投稿
返信数: 5
はじめて、投稿いたします。
課題で提出されたファイル(Word,Excel)を見ようとして開くとワード(エクセル)は立ち上がるのですがファイル変換のウインドウが開き、文字化けしていて見る(読む)ことができません。
課題で提出してもらったパスカルのソースプログラムは、読むことが出来ました。課題提出の際に一行目に学番・氏名をコメントで入れるように指示していますが、コメントが2行目になっていました。、また、最後の文字(改行あるいはピリオド)が削除されていました。テキストファイルもメモ帳で見ているとわからなかったのですが、TeraPad等のエディタで表示すると同様に1行めが空いて表示されます。
また提出された課題を「全ての課題をダウンロードする」でダウンロードすると、解凍できません。”圧縮(zip 形式)フォルダは無効であるか、または壊れています。” とエラーが表示されます。
課題の「ファイルの高度なアップロード」,「単一ファイルのアップロード」,「オンラインテキスト」すべて同じ症状です。
環境は、Moodle1.9.5+です。
保昌 伊東 への返信

Re: 課題で提出されたファイル(Word,Excel)を開くと文字化けする

- Tatsuya Shirai の投稿

 伊東さんが利用しているMoodleのパッケージはどこから入手したものでしょうか.三重大学版でしょうか,fs_moodleでしょうか.「全ての課題をダウンロードする」機能は標準のMoodleには無い機能です.サーバのOSの種類も分かりません.

 発生している症状から思い当たる症状は(近頃はパッと一番に思い浮かびます),config.phpの頭か末尾に余計な空行が入っていることです.ほぼこれが原因と見て間違いないでしょう.config.phpをエディタで開いてみて下さい.<?phpで始まるファイルの上に空行は無いでしょうか.?>で終わるファイルの末尾に空行は無いでしょうか? もし,余分な空行がある場合は削除して下さい.

評点平均: お役立ち度: ★★★★★★★ (1)
Tatsuya Shirai への返信

Re: 課題で提出されたファイル(Word,Excel)を開くと文字化けする

- 保昌 伊東 の投稿
白井先生
済みませんでした。初めてで、何を書けばよいかわからず。投稿してしまいました。
OSは、CentOS5.3です。Moodleのパッケージは、三重大学から入手いたしました。

白井先生のご指摘通り、config.phpの末尾に空行が入っていましたので空行を削除いたしました。削除後は、正常に稼動しております。
ありがとうございました。
保昌 伊東 への返信

Re: 課題で提出されたファイル(Word,Excel)を開くと文字化けする

- Tatsuya Shirai の投稿

 一見,まともに動くからこの問題は発見が遅れます.

 本家の方でも,config.phpのチェックをするようにしてくれると良いですね.

Tatsuya Shirai への返信

Re: 課題で提出されたファイル(Word,Excel)を開くと文字化けする

- Haruhiko Okumura の投稿
なるほど。三重大学版もチェックを考えたほうがいいですね。
Haruhiko Okumura への返信

Re: 課題で提出されたファイル(Word,Excel)を開くと文字化けする

- Tatsuya Shirai の投稿

 1年ほど前に,fs_moodle用に以下のようなconfig.php(とfsconfig.php)のチェックをする関数を作りました.$configpathはサーバ上でのフルパス名(ファイル名含む)です.これで一応,6種類のチェックが...できていると思います.

// config.php, fs_config.phpの頭とお尻のチェック(2008/10/23)
// 戻り値
//  1 : OK
//  0 : ファイルが存在しない
// -1 : ファイルの中身が空
// -2 : BOMが頭にある
// -3 : 余計な文字が頭にある(BOM以外)
// -4 : 余計な文字がお尻にある
// -5 : 文字コードがASCII/UTF-8以外である
function check_config_head_and_tail($configpath)
{
    if (!file_exists($configpath))       return 0;
    if (!($farray = file($configpath)))  return -1;
    // チェック1(BOM)
    $c1 = ord(substr($farray[0], 0, 1));
    $c2 = ord(substr($farray[0], 1, 1));
    $c3 = ord(substr($farray[0], 2, 1));
    if (($c1 == 0xef) && ($c2 == 0xbb) && ($c3 == 0xbf)) return -2;
    if (($c1 == 0xfe) && ($c2 == 0xff)) return -2; // UTF-16
    if (($c1 == 0xff) && ($c2 == 0xfe)) return -2; // UTF-16
    // チェック2
    if (strncmp($farray[0], "<?php", 5) != 0) return -3;
    $tail = rtrim($farray[count($farray) - 1], "\n");
    $tail = rtrim($tail, "\r");
    $tail = rtrim($tail, "\n");
    if ($tail != "?>") return -4;
    // チェック3(文字コード)
    $encname = mb_detect_encoding(file_get_contents($configpath));
    if (($encname != 'ASCII') && ($encname != 'UTF-8')) return -5;
    return 1;
}