<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Zip Encoding Class : CodeIgniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>CodeIgniter User Guide Version 1.7</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
Zip Encoding Class
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">


<h1>Zip Encoding Class</h1>
<p>CodeIgniter's Zip Encoding Class classes permit you to create Zip archives. Archives can be downloaded to your
desktop or saved to a directory.</p>


<h2>Initializing the Class</h2>
<p>Like most other classes in CodeIgniter, the Zip class is initialized in your controller using the <dfn>$this->load->library</dfn> function:</p>

<code>$this->load->library('zip');</code>
<p>Once loaded, the Zip library object will be available using: <dfn>$this->zip</dfn></p>


<h2>Usage Example</h2>

<p>This example demonstrates how to compress a file, save it to a folder on your server, and download it to your desktop.</p>

<code>
$name = 'mydata1.txt';<br />
$data = 'A Data String!';<br />
<br />
$this->zip->add_data($name, $data);<br />
<br />
// Write the zip file to a folder on your server. Name it "my_backup.zip"<br />
$this->zip->archive('/path/to/directory/my_backup.zip');
<br /><br />
 // Download the file to your desktop.  Name it "my_backup.zip"<br />
$this->zip->download('my_backup.zip');
</code>

<h1>Function Reference</h1>

<h2>$this->zip->add_data()</h2>

<p>Permits you to add data to the Zip archive. The first parameter must contain the name you would like
given to the file, the second parameter must contain the file data as a string:</p>

<code>
$name = 'my_bio.txt';<br />
$data = 'I was born in an elevator...';<br />
<br />
$this->zip->add_data($name, $data);
</code>

<p>You are allowed multiple calls to this function in order to
add several files to your archive.  Example:</p>

<code>
$name = 'mydata1.txt';<br />
$data = 'A Data String!';<br />
$this->zip->add_data($name, $data);<br />
<br />
$name = 'mydata2.txt';<br />
$data = 'Another Data String!';<br />
$this->zip->add_data($name, $data);<br />
</code>

<p>Or you can pass multiple files using an array:</p>

<code>
$data = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'mydata1.txt' => 'A Data String!',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'mydata2.txt' => 'Another Data String!'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
<br />
$this->zip->add_data($data);<br />
<br />
$this->zip->download('my_backup.zip');
</code>

<p>If you would like your compressed data organized into sub-folders, include the path as part of the filename:</p>

<code>
$name = '<kbd>personal/</kbd>my_bio.txt';<br />
$data = 'I was born in an elevator...';<br />
<br />
$this->zip->add_data($name, $data);
</code>

<p>The above example will place <dfn>my_bio.txt</dfn> inside a folder called <kbd>personal</kbd>.</p>


<h2>$this->zip->add_dir()</h2>

<p>Permits you to add a directory.  Usually this function is unnecessary since you can place your data into folders when
using <dfn>$this->zip->add_data()</dfn>, but if you would like to create an empty folder you can do so.  Example:</p>

<code>$this->zip->add_dir('myfolder'); // Creates a folder called "myfolder"</code>



<h2>$this->zip->read_file()</h2>

<p>Permits you to compress a file that already exists somewhere on your server.  Supply a file path and the zip class will
read it and add it to the archive:</p>

<code>
$path = '/path/to/photo.jpg';<br /><br />
$this->zip->read_file($path);
<br /><br />
 // Download the file to your desktop.  Name it "my_backup.zip"<br />
$this->zip->download('my_backup.zip');
</code>

<p>If you would like the Zip archive to maintain the directory structure of the file in it, pass <kbd>TRUE</kbd> (boolean) in the
second parameter.  Example:</p>


<code>
$path = '/path/to/photo.jpg';<br /><br />
$this->zip->read_file($path, <kbd>TRUE</kbd>);
<br /><br />
 // Download the file to your desktop.  Name it "my_backup.zip"<br />
$this->zip->download('my_backup.zip');
</code>

<p>In the above example, <dfn>photo.jpg</dfn> will be placed inside two folders:  <kbd>path/to/</kbd></p>



<h2>$this->zip->read_dir()</h2>

<p>Permits you to compress a folder (and its contents) that already exists somewhere on your server.  Supply a file path to the 
directory and the zip class will recursively read it and recreate it as a Zip archive.  All files contained within the
supplied path will be encoded, as will any sub-folders contained within it.  Example:</p>

<code>
$path = '/path/to/your/directory/';<br /><br />
$this->zip->read_dir($path);
<br /><br />
 // Download the file to your desktop.  Name it "my_backup.zip"<br />
$this->zip->download('my_backup.zip');
</code>




<h2>$this->zip->archive()</h2>

<p>Writes the Zip-encoded file to a directory on your server.  Submit a valid server path ending in the file name.  Make sure the
directory is writable (666 or 777 is usually OK). Example:</p>

<code>$this->zip->archive('/path/to/folder/myarchive.zip'); // Creates a file named myarchive.zip</code>


<h2>$this->zip->download()</h2>

<p>Causes the Zip file to be downloaded from your server. The function must be passed the name you would like the zip file called.
Example:</p>

<code>$this->zip->download('latest_stuff.zip'); // File will be named "latest_stuff.zip"</code>

<p class="important"><strong>Note:</strong>&nbsp; Do not display any data in the controller in which you call this function since it sends various server headers
that cause the download to happen and the file to be treated as binary.</p>


<h2>$this->zip->get_zip()</h2>

<p>Returns the Zip-compressed file data.  Generally you will not need this function unless you want to do something unique with the data.
Example:</p>

<code>
$name = 'my_bio.txt';<br />
$data = 'I was born in an elevator...';<br />
<br />
$this->zip->add_data($name, $data);<br /><br />

$zip_file = $this->zip->get_zip();
</code>


<h2>$this->zip->clear_data()</h2>

<p>The Zip class caches your zip data so that it doesn't need to recompile the Zip archive for each function you use above.
If, however, you need to create multiple Zips, each with different data, you can clear the cache between calls. Example:</p>

<code>
$name = 'my_bio.txt';<br />
$data = 'I was born in an elevator...';<br />
<br />
$this->zip->add_data($name, $data);<br />
$zip_file = $this->zip->get_zip();<br />
<br />
<kbd>$this->zip->clear_data();</kbd>
<br /><br />

$name = 'photo.jpg';<br />
$this->zip->read_file("/path/to/photo.jpg"); // Read the file's contents<br />
<br /><br />
$this->zip->download('myphotos.zip');
</code>













</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="xmlrpc.html"> XML-RPC Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="../helpers/array_helper.html">Array Helper</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006-2008 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
</div>

</body>
</html>