2012-10-08 14 views
6

पैरामीटर Moodle's स्रोत कोड मैं इस भर में ठोकर खाई ब्राउज़ कर एक ओर जहां:base64_encode और php समारोह को क्रमानुसार

भंडार/हाल/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; 
} 

भंडार/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; 
} 

मेरा प्रश्न है बेस 64 एन्कोडिंग का उद्देश्य और सीरियलाइजिंग जब यह फ़ंक्शन के अंदर तुरंत एक बार पूर्ववत हो जाता है? क्या ऐसा करने के लिए कोई वैध कारण है या यह सिर्फ इंजीनियर है?

+0

ऐसा करने के लिए कोई वैध कारण नहीं है, जब तक कि यह वास्तव में एक बड़ा अपवाद नहीं है और 'get_file_size' का सबसे आम उपयोग' serialize'd, 'base64_encode'd ऑब्जेक्ट का फ़ाइल आकार प्राप्त करना है। – Ryan

+0

['function get_file_size'] (http://xref.schoolsict.net/moodle/2.2/nav.html?repository/lib.php.source.html#l1367) मूडल स्रोत – air4x

+0

में क्या आप कोड का अनुसरण कर सकते हैं '$ this-> get_file_size()' पर कॉल करें? – NullUserException

उत्तर

2

उनके PHPXref में चारों ओर एक त्वरित क्लिक पता चलता है कि इस समारोह भी repository_ajax.php

एक क्वेरी स्ट्रिंग/फॉर्म फील्ड बस काम करने के लिए (संभावित) नहीं जा रहा है में चारों ओर धारावाहिक डेटा पासिंग में कहा जाता है, लेकिन बेस 64 एन्कोडिंग के साथ यह कोई मुद्दा नहीं है।

तो फ़ंक्शन को AJAX, बेस 64 डीकोड, deserialise के माध्यम से दिए गए अनुरोधों को संभालने के लिए डिज़ाइन किया गया था, और फिर फ़ाइल आकार वापस कर दिया गया था। (यह शायद सूची नोड के source तत्व से भी जुड़ा हुआ है)

संक्षेप में, कॉल यह सत्यापित कर रहा है कि एन्कोडेड स्ट्रिंग मान्य है, जब इसे बाद में AJAX अनुरोध में उपयोग किया जाता है।