Commit: 35a30732baac56d8c35eccfc344e5f4fc6f273d9 Author: Anatol Belski <[email protected]> Thu, 12 Sep 2013 18:52:47 +0200 Parents: 66213365c3bee5d895be17b2b817bb98c5f6a6f6 Branches: master
Link: http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=35a30732baac56d8c35eccfc344e5f4fc6f273d9 Log: support zips Changed paths: M client/include/PeclExt.php Diff: diff --git a/client/include/PeclExt.php b/client/include/PeclExt.php index 337aa1f..08e6e6e 100644 --- a/client/include/PeclExt.php +++ b/client/include/PeclExt.php @@ -16,6 +16,7 @@ class PeclExt protected $tar_cmd = 'c:\apps\git\bin\tar.exe'; protected $gzip_cmd = 'c:\apps\git\bin\gzip.exe'; protected $zip_cmd = 'c:\php-sdk\bin\zip.exe'; + protected $unzip_cmd = 'c:\php-sdk\bin\unzip.exe'; protected $deplister_cmd = 'c:\apps\bin\deplister.exe'; protected $tmp_extract_path = NULL; protected $ext_dir_in_src_path = NULL; @@ -34,8 +35,11 @@ class PeclExt } else if ('.tar.gz' == substr($pgk_path, -7)) { $this->pkg_basename = basename($pgk_path, '.tar.gz'); $this->pkg_comp = 'tgz'; + } else if ('.zip' == substr($pgk_path, -4)) { + $this->pkg_basename = basename($pgk_path, '.zip'); + $this->pkg_comp = 'zip'; } else { - throw new \Exception("Unsupported compression format, please pass tgz or tar.gz"); + throw new \Exception("Unsupported compression format, please pass tgz, tar.gz or zip"); } $this->pgk_path = $pgk_path; @@ -110,9 +114,9 @@ class PeclExt throw new \Exception("Couldn't create temporary dir"); } - $tmp_name = $tmp_path . '/' . basename($this->pgk_path); + $tmp_name = $tmp_path . DIRECTORY_SEPARATOR . basename($this->pgk_path); if (!copy($this->pgk_path, $tmp_name)) { - throw new \Exception("Couldn't move the tarball to '$tmp_name'"); + throw new \Exception("Couldn't copy the tarball to '$tmp_name'"); } $tar_name = $this->pkg_basename . '.tar'; @@ -123,13 +127,13 @@ class PeclExt chdir($tmp_path); - $gzip_cmd = $this->gzip_cmd . ' -df ' . basename($this->pgk_path); + $gzip_cmd = $this->gzip_cmd . ' -df ' . escapeshellarg(basename($this->pgk_path)); system($gzip_cmd, $ret); if ($ret) { throw new \Exception("Failed to guzip the tarball"); } - $tar_cmd = $this->tar_cmd . ' -xf ' . $tar_name; + $tar_cmd = $this->tar_cmd . ' -xf ' . escapeshellarg($tar_name); system($tar_cmd, $ret); if ($ret) { throw new \Exception("Failed to guzip the tarball"); @@ -141,7 +145,23 @@ class PeclExt return $tmp_path; } - /* XXX support more compression formats, for now tgz only*/ + public function uncompressZip() + { + $tmp_path = tempnam(TMP_DIR, 'unpack'); + unlink($tmp_path); + if (!file_exists($tmp_path) && !mkdir($tmp_path)) { + throw new \Exception("Couldn't create temporary dir"); + } + + $unzip_cmd = $this->unzip_cmd . ' ' . escapeshellarg($this->pgk_path) . ' -d ' . $tmp_path; + system($unzip_cmd, $ret); + if ($ret) { + throw new \Exception("Failed to unzip the package"); + } + + return $tmp_path; + } + public function unpack() { switch ($this->pkg_comp) { @@ -149,6 +169,10 @@ class PeclExt $tmp_path = $this->uncompressTgz(); break; + case 'zip': + $tmp_path = $this->uncompressZip(); + break; + default: throw new \Exception("Unsupported compression"); } -- PHP Webmaster List Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
