Podczas przeglądania Moodle's kod źródłowy natknąłem to:base64_encode i funkcji php serializacji params
repozytorium/niedawne/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;
}
repozytorium/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;
}
Moje pytanie brzmi: jaki jest cel kodowania base64 i serializowania to jest, kiedy jest natychmiast przywracana do funkcji? Czy istnieje uzasadniony powód, aby to zrobić, czy jest to po prostu ukończone?
Bez ważnego powodu, aby to zrobić, chyba że jest to naprawdę duży wyjątek, a najczęstszym użyciem 'get_file_size' jest daleko, aby uzyskać rozmiar pliku' serialize'd, 'base64_encode'd obiektu. – Ryan
['function get_file_size'] (http://xref.schoolsict.net/moodle/2.2/nav.html?repository/lib.php.source.html#l1367) w modzie źródłowym – air4x
Czy możesz pokazać kod podążający za wywołanie '$ this-> get_file_size()'? – NullUserException