note 33669 added to ref.java
| From: | chris at mad-teaparty dot com | Date: | Thu, 03 Jul 2003 14:32:52 +0000 |
| Subject: | note 33669 added to ref.java | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-51457@lists.php.net to get a copy of this message | ||
This snippet shows how to write ZIP-Files using PHP's Java-API:
---------------------------
// specify the name of the zip file to be created
$zipfile = "/usr/local/apache/htdocs/skripte/test.zip";
// files that should be zipped
$filenames = array("test.php", "index.html");
// create a zip output stream
$out = new Java('java.util.zip.ZipOutputStream', new
Java('java.io.FileOutputStream', $zipfile));
// walk through the array an add each file to the archive
foreach ($filenames as $entry) {
$content = implode("", file($entry)); // read the file
$zipentry = new Java('java.util.zip.ZipEntry', $entry); //define a new zip entry
$out->putNextEntry($zipentry); //write this entry to the archive
$out->write($content, 0, strlen($content)); //add the content
$out->closeEntry(); // close the current entry
}
$out->setComment("test..."); // set a comment for the zip file
$out->close(); //close the output stream
----------------------------
This is just "proof of concept". It doesn't set all values for zip entries, like
CRC32-checksum, compressed size etc.
Several hints:
- in order to read or write JAR-archives, the snippet needs only few modification: replace the
ZIPOutputStream with an instance of "JarOutputStream" or "JarInputStream",
defined in "java.util.jar"
- use double backslashes for path names on Windows, eg. "C:\\apache\\htdocs\\index.html"
- if you specify an absolute path name for a single zip entry, a directory will be created in the
zip archive. Thus, you can "zip" whole directories by walking through them
- If you want to set the time when the zip entry was added, note that the Java-method
"setTime" requires a long value (millisec). I did this:
$zipentry->setTime(time()*1000);
- If you want to add the CRC-checksum to each zip entry, do not (!) use PHP's crc32-function!
Incompatible types will cause loss of precision and wrong checksums. Use the Java-class
"CRC32" instead:
$crc32 = new Java('java.util.zip.CRC32');
$crc32->update($content);
$zipentry->setCrc($crc32->getValue());
$crc32->reset();
----
Manual Page -- http://www.php.net/manual/en/ref.java.php
Edit Note -- http://master.php.net/manage/user-notes.php?action=edit+33669
Delete Note -- http://master.php.net/manage/user-notes.php?action=delete+33669&report=yes
Reject Note -- http://master.php.net/manage/user-notes.php?action=reject+33669&report=yes