示例#1
0
 public function install($version = 'stable', array $options = array())
 {
     $this->logger->quiet();
     $this->disable();
     $this->logger->setLevel(4);
     $installer = new ExtensionInstaller($this->logger);
     $path = $this->meta->getPath();
     $name = $this->meta->getName();
     // Install local extension
     if (file_exists($path)) {
         $this->logger->info("===> Installing {$name} extension...");
         $this->logger->debug("Extension path {$path}");
         $xml = $installer->runInstall($name, $path, $options);
     } else {
         chdir(dirname($path));
         $xml = $installer->installFromPecl($name, $version, $options);
     }
     // try to rebuild meta from xml, which is more accurate right now
     if (file_exists($xml)) {
         $this->logger->warning("===> Switching to xml extension meta");
         $this->meta = new ExtensionMetaXml($xml);
     }
     $ini = $this->meta->getIniFile() . '.disabled';
     $this->logger->info("===> Creating config file {$ini}");
     // create extension config file
     if (file_exists($ini)) {
         $lines = file($ini);
         foreach ($lines as &$line) {
             if (preg_match('#^;\\s*((?:zend_)?extension\\s*=.*)#', $line, $regs)) {
                 $line = $regs[1];
             }
         }
         file_put_contents($ini, join('', $lines));
     } else {
         if ($this->meta->isZend()) {
             $makefile = file_get_contents("{$path}/Makefile");
             preg_match('/EXTENSION\\_DIR\\s=\\s(.*)/', $makefile, $regs);
             $content = "zend_extension={$regs[1]}/";
         } else {
             $content = "extension=";
         }
         file_put_contents($ini, $content . $this->meta->getSourceFile());
         $this->logger->debug("{$ini} is created.");
     }
     $this->logger->info("===> Enabling extension...");
     $this->enable();
     $this->logger->info("Done.");
     return $path;
 }