Permalink
Browse files

add method getContent, add method isDirectory

  • Loading branch information...
1 parent c55a0d6 commit 1ebfd5ad163e471089989e803caa616e39787806 @Gemorroj committed Sep 3, 2012
Showing with 47 additions and 14 deletions.
  1. +32 −11 Archive/7z.php
  2. +10 −1 Archive/7z/Entry.php
  3. +1 −1 Archive/7z/Exception.php
  4. +4 −1 reame.txt
View
@@ -10,8 +10,8 @@
*
*/
-require_once '7z/Exception.php';
-require_once '7z/Entry.php';
+require_once 'Archive/7z/Exception.php';
+require_once 'Archive/7z/Entry.php';
class Archive_7z
{
@@ -157,23 +157,45 @@ public function setOverwriteMode($mode = Archive_7z::OVERWRITE_MODE_A)
}
+ private function _getCmdPrefix()
+ {
+ $cmd = '"' . escapeshellcmd($this->_cmdPath) . '"'; // fix for windows
+ if ($this->_password !== null) {
+ $cmd .= ' -p' . escapeshellarg($this->_password);
+ }
+ return $cmd;
+ }
+
+
/**
* @throws Archive_7z_Exception
- * @return array
*/
public function extract()
{
- $path = '"' . escapeshellcmd($this->_cmdPath) . '"'; // fix for windows
- $cmd = $path . ' x ' . escapeshellarg($this->_filename) . ' ' . escapeshellcmd($this->_overwriteMode) . ' -o' . escapeshellarg($this->_outputDir);
- if ($this->_password !== null) {
- $cmd .= ' -p' . escapeshellarg($this->_password);
- }
+ $cmd = $this->_getCmdPrefix() . ' ' . escapeshellcmd($this->_overwriteMode) . ' -o' . escapeshellarg($this->_outputDir) . ' x ' . escapeshellarg($this->_filename);
- exec($cmd, $out, $rv);
+ system($cmd, $rv);
if ($rv !== 0) {
throw new Archive_7z_Exception('Error! Exit code: ' . $rv);
}
+ }
+
+
+ /**
+ * @param string $file
+ * @throws Archive_7z_Exception
+ * @return string
+ */
+ public function getContent($file)
+ {
+ $cmd = $this->_getCmdPrefix() . ' -so x ' . escapeshellarg($this->_filename) . ' ' . escapeshellarg($file);
+
+ $out = shell_exec($cmd);
+
+ if ($out === null) {
+ throw new Archive_7z_Exception('Error!');
+ }
return $out;
}
@@ -185,8 +207,7 @@ public function extract()
*/
public function getEntries()
{
- $path = '"' . escapeshellcmd($this->_cmdPath) . '"'; // fix for windows
- $cmd = $path . ' l ' . escapeshellarg($this->_filename) . ' -slt';
+ $cmd = $this->_getCmdPrefix() . ' -slt l ' . escapeshellarg($this->_filename);
exec($cmd, $out, $rv);
View
@@ -92,6 +92,15 @@ private function _setData($key, $value)
}
+ /**
+ * @return bool
+ */
+ public function isDirectory()
+ {
+ return ($this->_attributes[0] === 'D');
+ }
+
+
public function getAttributes()
{
return $this->_attributes;
@@ -136,4 +145,4 @@ public function getSize()
{
return $this->_size;
}
-}
+}
View
@@ -13,4 +13,4 @@
class Archive_7z_Exception extends Exception
{
-}
+}
View
@@ -1,13 +1,16 @@
Работа с 7z архивами с помощью командной строки.
-На данный момент поддерживается распаковка архива и просмотр всех файлов и директорий находящихся в архиве.
+На данный момент поддерживается распаковка архива, просмотр всех файлов и директорий находящихся в архиве, получение содержимого файла в архиве.
Пример:
+set_include_path(__DIR__);
require 'Archive/7z.php';
$obj = new Archive_7z('./test.7z');
$obj->setOutputDir('./test');
print_r($obj->getEntries());
+echo $obj->getContent('test.txt');
+
$obj->extract();

0 comments on commit 1ebfd5a

Please sign in to comment.