gpt4 book ai didi

php - base64_encode 和序列化 php 函数参数

转载 作者:可可西里 更新时间:2023-11-01 13:28:32 24 4
gpt4 key购买 nike

浏览时Moodle's源代码我偶然发现了这个:

repository/recent/lib.php

public function get_listing($encodedpath = '', $page = '') {
global $OUTPUT;
$ret = array();
$ret['dynload'] = true;
$ret['nosearch'] = true;
$ret['nologin'] = true;
$list = array();
$files = $this->get_recent_files(0, $this->number);

try {
foreach ($files as $file) {
$params = base64_encode(serialize($file));
// Check that file exists and accessible
$filesize = $this->get_file_size($params);
if ($file['filename'] == 'image.png') {
var_dump($filesize);
}
if (!empty($filesize)) {
$node = array(
'title' => $file['filename'],
'size' => $filesize,
'date' => '',
'source'=> $params,
'thumbnail' => $OUTPUT->pix_url(file_extension_icon($file['filename'], 32))->out(false),
);
$list[] = $node;
}
}
} catch (Exception $e) {
throw new repository_exception('emptyfilelist', 'repository_recent');
}
$ret['list'] = array_filter($list, array($this, 'filter'));
return $ret;
}

repository/lib.php

public function get_file_size($source) {
$browser = get_file_browser();
$params = unserialize(base64_decode($source));
$contextid = clean_param($params['contextid'], PARAM_INT);
$fileitemid = clean_param($params['itemid'], PARAM_INT);
$filename = clean_param($params['filename'], PARAM_FILE);
$filepath = clean_param($params['filepath'], PARAM_PATH);
$filearea = clean_param($params['filearea'], PARAM_AREA);
$component = clean_param($params['component'], PARAM_COMPONENT);
$context = get_context_instance_by_id($contextid);
$file_info = $browser->get_file_info($context, $component, $filearea, $fileitemid, $filepath, $filename);
if (!empty($file_info)) {
$filesize = $file_info->get_filesize();
} else {
$filesize = null;
}
return $filesize;
}

我的问题是,当它在函数内部立即撤消时,base64 编码和序列化的目的是什么?这样做是否有正当理由,或者这只是过度设计?

最佳答案

在他们的 PHPXref 中快速点击一下就会发现这个函数也在 repository_ajax.php 中被调用。

在查询字符串/表单字段中传递序列化数据根本行不通(可能),但使用 base64 编码这不是问题。

因此该函数旨在处理通过 ajax 传递的请求、base64 解码、反序列化,然后返回文件大小。 (这可能也链接到列表节点的 source 元素)

本质上,该调用是在验证编码字符串是否有效,以便稍后在 ajax 请求中使用它。

关于php - base64_encode 和序列化 php 函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12786517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com