如何对用户上传的 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);
我有一个 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);