2012-06-18 17 views
6

मूल रूप से मैं जूमला JArchive::create() फ़ंक्शन का उपयोग करके किसी सापेक्ष पथ से निर्देशिका को संपीड़ित करने का प्रयास कर रहा हूं। अब तक मैं एक निर्देशिका ज़िप कर सकता हूं लेकिन यह पूरे पूर्ण पथ को ज़िपित करता है।JArchive :: जूमला 2.5 के लिए बनाएँ?

कोड मैं निरपेक्ष पथ नीचे दिखाया गया है है कि जिप उपयोग कर रहा हूँ:

$zipFilesArray = array(); 
    $new_component_path = JPATH_SITE.'/'.'modules'.'/'.'mod_module_gen'.'/'.'package'.'/'.$new_folder_name; 
    $dirs = JFolder::folders($new_component_path, '.', true, true); 
    array_push($dirs, $new_component_path); 
    foreach ($dirs as $dir) { 
     $files = JFolder::files($dir, '.', false, true); 
     foreach ($files as $file) { 
      $data = JFile::read($file); 
      $zipFilesArray[] = array('name' => str_replace($new_component_path.DS, '', $file), 'data' => $data); 
     } 
    } 
    $zip = JArchive::getAdapter('zip'); 
    $zip->create($new_component_path.'/'.$new_folder_name.'.zip', $zipFilesArray); 

मुझे लगता है कि है JPATH_SITE संरचना JURI::root संरचना करने के लिए बदल रहा है जो मैं कोशिश की है का उपयोग कर के साथ कुछ है, लेकिन उसके बाद प्रदान करता है एक त्रुटि यह कह रही है कि यह वैध पथ नहीं है।

कोई भी मुझे बता सकता है कि मैंने जो कोड प्रदान किया है उसके आधार पर जूमला में सापेक्ष पथ को कैसे ज़िपित किया जाए, तो इसकी सराहना की जाएगी।

+0

क्या सापेक्ष पथ का उपयोग करने के लिए कोई विशिष्ट कारण है? – Anand

+0

@Anand: हाँ क्योंकि जब मैं एक पूर्ण पथ का उपयोग करता हूं, तो यह वास्तव में public_html फ़ोल्डर से शुरू होने वाले पूरे पूर्ण पथ को ज़िप करता है। – Lodder

+0

मुझे लगता है कि $ zipFilesArray सरणी होना चाहिए जिसमें पूर्ण पथ वाले फाइलें हों, न केवल फ़ाइल का नाम। $ zipFilesArray – Anand

उत्तर

2

आखिरकार वह कोड है जो मुझे किसी अन्य एक्सटेंशन डेवलपर द्वारा कृपया दिया गया था।

$folder_path = JPATH_SITE.'/modules/mod_xxxxxxxxx/package/'.$new_folder_name; 
$new_folder_name_final = $folder_path . '.zip'; 

$zip = new ZipArchive(); 

if ($zip->open($new_folder_name_final, ZIPARCHIVE::CREATE) !== TRUE) { 
    return false; 
} 

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder_path)); 

foreach ($iterator as $key=>$value) { 
    $key = str_replace('\\', '/', $key); 
    if (!is_dir($key)) { 
     if(!$zip->addFile(realpath($key), substr($key, strlen($folder_path) - strlen(basename($folder_path))))) { 
      return false; 
     } 
    } 
$zip->close(); 
0
jimport('joomla.filesystem.archive'); 

    $zipFilesArray = array(); 
    $dirs = JFolder::folders($new_component_path, '.', true, true); 
    array_push($dirs, $new_component_path); 
    foreach ($dirs as $dir) { 
     $files = JFolder::files($dir, '.', false, true); 
     foreach ($files as $file) { 
      $data = JFile::read($file); 
      $zipFilesArray[] = array('name' => str_replace($new_component_path.DS, '', $file), 'data' => $data); 
     } 
    } 
    $zip = JArchive::getAdapter('zip'); 
    $zip->create($tmp_path.DS.'files.zip', $zipFilesArray); 

यह मेरे लिए काम करता है। आप कोशिश कर सकते हैं और देख सकते हैं।

+0

में डेटा की आवश्यकता नहीं है मैंने कोशिश की है और यह पूर्ण पथ को ज़िपित करता है। मुझे सापेक्ष पथ को ज़िप करने की आवश्यकता है। – Lodder