はじめまして。最近moodleを使いはじめたのですが、lessonモジュールでパワーポイントのインポートが次のエラー文が出てできません。
PCLZIP_ERR_BAD_FORMAT (-10) : Unable to find End of Central Dir Record signature
パワーポイントの上げかたを検索して調べたところ、ウェブページとして保存してzipで上げるとよいと書かれていたので試してみたところ、次のエラー文が出てきました。
could not get data
どなたか解決策を教えていただけませんでしょうか?
以下は自分の使用しているPCのスペックです。
OS: VineLinux 4.1
webサーバー: Apache2.0
DB: PostgreSQL
PHP: PHP5.0
よろしくおねがいします。
エラーの内容から考えると,unzipの失敗のように感じられます.
まずどのような手順で作業したのかを正確に記述して下さい.
問題のエラーは,lib/pclzip/pclzip.lib.php中の function privReadEndCentralDir(&$p_central_dir)で発生しています.
多少,憶測が混ざっていますので,その点は御容赦下さい.
この関数では,まずzip書庫の一番後ろまでfseek()でリードポイントを移動させます.そこからZIP書庫内のレコードをチェックしているようです.多分,書庫内のファイルのリストを調べているのだと思います.ここでエラーが発生しているということは,ZIP書庫が尻切れになっていたり,あるいは余分なデータが付いていることが予想されます.ZIP書庫が壊れている,互換性がない,あるいはアップロードに失敗している,という可能性も考えられます.
まずどのような手順で作業したのかを正確に記述して下さい.
- PowerPointをWebページとして作成したのはWindows上でしょうか,Linux上でしょうか.
- そのWebページをZIP書庫に作成したのはどのようなアーカイバーで,どのOS上で行ったのでしょうか.
- インポートとは,Moodleでいうところのインポート(あるコースから別のコースにコンテンツをインポートする機能)なのか,単にZIPファイルをコースファイルとしてアップロードし,それをMoodle上で展開した,という意味でしょうか.
問題のエラーは,lib/pclzip/pclzip.lib.php中の function privReadEndCentralDir(&$p_central_dir)で発生しています.
多少,憶測が混ざっていますので,その点は御容赦下さい.
この関数では,まずzip書庫の一番後ろまでfseek()でリードポイントを移動させます.そこからZIP書庫内のレコードをチェックしているようです.多分,書庫内のファイルのリストを調べているのだと思います.ここでエラーが発生しているということは,ZIP書庫が尻切れになっていたり,あるいは余分なデータが付いていることが予想されます.ZIP書庫が壊れている,互換性がない,あるいはアップロードに失敗している,という可能性も考えられます.
返信ありがとうございます。
詳細が少なかったですね、すみません。
OpenOfficeを使用してLinux上でwebページを作成する方法はあるのでしょうか?
詳細が少なかったですね、すみません。
- PowerPointをWebページとして作成したのはWindows上です。LinuxにはOpenOfficeしか入れてなくて、webページを作成することができなかったのでWindowsのMicrosoftOfficeを使いました。
- WebページをZIP書庫に作成したのはLinux上で、使用したアーカイバはFileRollerという初期から入っていたものを使いました。
- ここでいうインポートとは、単にZIPファイルをコースファイルとしてアップロードしようとしたことです。
OpenOfficeを使用してLinux上でwebページを作成する方法はあるのでしょうか?
Lessonモジュールを使用したことが無かったので,私の理解も中途半端でした.すみません.いま試しにLessonモジュールを追加し,大家さんと同じ作業を行ってみました.
”PowerPointをインポートする”,でコンテンツのアップロードを要求される.
ここで単にPowerPointのファイルを選択すると,PCLZIPのエラーが出る.再現しました.
続いて.
(?)マークをクリックしてヘルプを読んでみると大家さんの仰るとおり,ZIP形式でPowerPointのデータをアップロードするように,との指示がありましたので試してみました.ここでサンプルとして用いたPowerPointのファイル名をSamplePowerPoint.pptとします.まず,PowerPointでSamplePowerPoint.pptを開き,Web形式で保存する.すると,SamplePowerPoint.htmファイルと同時にSamplePowerPoint.filesというフォルダが出来上がる.このフォルダを(SamplePowerPoint.filesのフォルダごと)ZIP書庫化すると,SamplePowerPoint.files.zipが出来上がる.
このSamplePowerPoint.files.zipを”PowerPointをインポートする"でアップロードすると,エラーは一切表示されずにインポートできたようです.(ただし,コンテンツが正しく表示される訳ではありませんでした...何も表示されない)
さて,実は大家さんと同じCould not get dataのエラーを私も再現できました.
もしかして,大家さん,以下のどちらかの条件を満たしていませんか?
アップロードされたZIP書庫は,moodledata/temp/lessonフォルダ内にzip書庫(SamplePowerPoint.files.zip),その展開されたフォルダ(SamplePowerPoint.files)が残っているはずです.Could not get dataが発生するのは,UNZIPしたフォルダ内にoutline.htmが存在しない,かつ,ファイル名に”slide”の文字を含むファイルが一つも存在しなかった場合です."slide”を含むファイルを探索するフォルダは,ZIP書庫のベース名(ZIP書庫のファイル名から拡張子.zipを取り除いた残りのファイル名,つまりSamplePowerPoint.files)と同じ名前のフォルダです.Moodleとしては,アップロードしたZIP書庫を展開した結果,なんと言う名前のフォルダがmoodledata/temp/lessonフォルダ内に作成されるのかを知る手立てがありません(あるのかな?)ので,このような手段を用いているのでしょう.
”PowerPointをインポートする”,でコンテンツのアップロードを要求される.
ここで単にPowerPointのファイルを選択すると,PCLZIPのエラーが出る.再現しました.
続いて.
(?)マークをクリックしてヘルプを読んでみると大家さんの仰るとおり,ZIP形式でPowerPointのデータをアップロードするように,との指示がありましたので試してみました.ここでサンプルとして用いたPowerPointのファイル名をSamplePowerPoint.pptとします.まず,PowerPointでSamplePowerPoint.pptを開き,Web形式で保存する.すると,SamplePowerPoint.htmファイルと同時にSamplePowerPoint.filesというフォルダが出来上がる.このフォルダを(SamplePowerPoint.filesのフォルダごと)ZIP書庫化すると,SamplePowerPoint.files.zipが出来上がる.
このSamplePowerPoint.files.zipを”PowerPointをインポートする"でアップロードすると,エラーは一切表示されずにインポートできたようです.(ただし,コンテンツが正しく表示される訳ではありませんでした...何も表示されない)
さて,実は大家さんと同じCould not get dataのエラーを私も再現できました.
もしかして,大家さん,以下のどちらかの条件を満たしていませんか?
- ZIP書庫を作成する際に,.filesフォルダの中身だけ圧縮した.
- ZIP書庫の名前とZIP書庫内のフォルダの名前が異なる(SamplePowerPoint.filesというフォルダをZIP書庫にした場合,ZIP書庫の名前はSamplePowerPoint.files.zipでなくてはならない.勝手にZIP書庫の名前を変えるとNGです)
- PowerPointのファイル名,.filesフォルダのファイル名,ZIP書庫のファイル名が日本語(これは問題無いと思うのですが,mod/lesson/importppt.php内でstr系の関数やexplode()を用いてパスを分解されるとまずい場合が考えられる).
アップロードされたZIP書庫は,moodledata/temp/lessonフォルダ内にzip書庫(SamplePowerPoint.files.zip),その展開されたフォルダ(SamplePowerPoint.files)が残っているはずです.Could not get dataが発生するのは,UNZIPしたフォルダ内にoutline.htmが存在しない,かつ,ファイル名に”slide”の文字を含むファイルが一つも存在しなかった場合です."slide”を含むファイルを探索するフォルダは,ZIP書庫のベース名(ZIP書庫のファイル名から拡張子.zipを取り除いた残りのファイル名,つまりSamplePowerPoint.files)と同じ名前のフォルダです.Moodleとしては,アップロードしたZIP書庫を展開した結果,なんと言う名前のフォルダがmoodledata/temp/lessonフォルダ内に作成されるのかを知る手立てがありません(あるのかな?)ので,このような手段を用いているのでしょう.
何度も返信ありがとうございます。
Shiraiさんのアドバイス通りにしてみるとアップロードに成功しました。
自分は今までwebページとして保存したときに出てきた.htmと.filesの二つともをzipで圧縮してました。
.filesだけを圧縮することで解決できました。ありがとうございます。
ただ問題があるようで、Powerpoint内容に1文字でも日本語が入っていたらアップロードできたはずなのに、また最初の「問題をインポートする」、「Powerpointをアップロードする」などのページが表示されます。
内容の全てを英語で表記すればちゃんとPowerpointが表示されるのですが・・・これは今のところのMoodleの仕様なのでしょうか?
とりあえずは当初の目的であるPowerpointをアップロードできないことが解決できました。ありがとうございました。
Shiraiさんのアドバイス通りにしてみるとアップロードに成功しました。
自分は今までwebページとして保存したときに出てきた.htmと.filesの二つともをzipで圧縮してました。
.filesだけを圧縮することで解決できました。ありがとうございます。
ただ問題があるようで、Powerpoint内容に1文字でも日本語が入っていたらアップロードできたはずなのに、また最初の「問題をインポートする」、「Powerpointをアップロードする」などのページが表示されます。
内容の全てを英語で表記すればちゃんとPowerpointが表示されるのですが・・・これは今のところのMoodleの仕様なのでしょうか?
とりあえずは当初の目的であるPowerpointをアップロードできないことが解決できました。ありがとうございました。
そうですね,私もサンプルのPowerPointをインポートしてみて同じことが気になりました.
レッスンモジュールのコンテンツのマルチバイトに対する対応,の現状について,
http://moodle.org/mod/forum/discuss.php?d=84556
で,少し議論してみましょう.
もしかしたらちょっとした問題で解決できるかも知れません.
(実はコードを解析していて,いくつか怪しい箇所を目にしています)
ただし,内容に日本語の文字が一文字でも含まれていたら,最初のインポート種別を選択する画面に戻ってしまう,という現象はこちらでは発生していません.単に文字が一切表示されないプレビュー画面が出るだけで,インポートは(画像も含めて)正しく行えています.
ちなみに,少し別問題なのですが,zip書庫(および.filesフォルダ)の名前に日本語文字を含めていても問題ないですか?
それと,レッスン名に半角空白の文字を含んでいる場合,それを'_'に置換する処理が,
moodle/mod/lesson/importppt.phpのfunction extract_data()に含まれています.この関数はPowerPoint中で使用されている画像ファイルを抽出し,コピーする関数(前半部は.後半部は別の情報を抽出しており,これが英語の文章以外を表示できない問題に絡んでいるような気がする)です.
レッスンモジュールのコンテンツのマルチバイトに対する対応,の現状について,
http://moodle.org/mod/forum/discuss.php?d=84556
で,少し議論してみましょう.
もしかしたらちょっとした問題で解決できるかも知れません.
(実はコードを解析していて,いくつか怪しい箇所を目にしています)
ただし,内容に日本語の文字が一文字でも含まれていたら,最初のインポート種別を選択する画面に戻ってしまう,という現象はこちらでは発生していません.単に文字が一切表示されないプレビュー画面が出るだけで,インポートは(画像も含めて)正しく行えています.
ちなみに,少し別問題なのですが,zip書庫(および.filesフォルダ)の名前に日本語文字を含めていても問題ないですか?
それと,レッスン名に半角空白の文字を含んでいる場合,それを'_'に置換する処理が,
moodle/mod/lesson/importppt.phpのfunction extract_data()に含まれています.この関数はPowerPoint中で使用されている画像ファイルを抽出し,コピーする関数(前半部は.後半部は別の情報を抽出しており,これが英語の文章以外を表示できない問題に絡んでいるような気がする)です.
// try to make a unique subfolder to store the images
// $lessonname = str_replace(' ', '_', $lessonname); // get rid of spaces
$lessonname = mb_ereg_replace('[ ]', '_', $lessonname); // get rid of spaces
としないと,レッスン名に日本語文字を使用した場合,使用している文字によっては不具合の発生する可能性がありますね.// $lessonname = str_replace(' ', '_', $lessonname); // get rid of spaces
$lessonname = mb_ereg_replace('[ ]', '_', $lessonname); // get rid of spaces