如何对用户上传的 zip 文件调用 extract_to_pathname 函数?

How do I call extract_to_pathname function on a user uploaded zip file?

我有一个 activity 的实例,当我想查看它时,我想提取要提取的关联 zip 文件并将里面的 index.html 文件设置为里面的起始页view.php.

我发现我在提取函数中传递的文件路径不存在,但我可以访问它在数据库中的字段。

如何正确传入文件路径参数?

编辑:

    $fp = get_file_packer('application/zip');
    $fileinfo = array(
    'component' => 'mod_game',
    'filearea' => 'content',
    'itemid' => 0,            
    'contextid' => 472,
    'filepath' => '/', 
    'filename' => 'game.7z');

    $myfile = $fs->get_file($fileinfo['contextid'], $fileinfo['component'], $fileinfo['filearea'],
                      $fileinfo['itemid'], $fileinfo['filepath'], $fileinfo['filename']);
   
    $filepath = '/'.$context->id.'/mod_game/content/'.$game->revision.$myfile->get_filepath().$myfile->get_filename();
    $files = $fp->extract_to_pathname($filepath, $CFG->dirroot.'/mod/game/games'.$filepath.'_extracted');

我可以在这里看到很多问题。

首先,以(.7z)结尾的文件表明这不是Zip文件,而是7Zip文件,Moodle不支持(据我所知)解压。

下一个问题是您似乎没有创建要将文件提取到其中的文件夹 - 您需要先创建目标文件夹,然后再尝试将文件提取到其中。

最后,您似乎试图传递要解压缩的文件的(部分?)URL,而不是服务器上的文件路径(在这种情况下不推荐)或 stored_file实例本身(强烈推荐)。

除非您长期需要这些,否则我建议更好的解决方案如下所示:

// Make a temporary folder that will be automatically deleted at the end of the request.
$dest = make_request_directory();
// Extract the stored_file instance into this destination.
$files = $fp->extract_to_pathname($myfile, $dest);