Inheritance: extends SplFileInfo
Example #1
0
 /**
  * @param bool $verbose
  * @return boolean false, if extension was already activated
  */
 public function run($verbose = false)
 {
     if ($verbose !== false) {
         printf("Running INI activation ...\n");
     }
     $extension = basename(current(glob("{$this->cwd}/modules/*.so")));
     if ($this->type === "zend_extension") {
         $pattern = preg_quote((new ExecCmd($this->php_config))->run(["--extension-dir"])->getOutput() . "/{$extension}", "/");
     } else {
         $pattern = preg_quote($extension, "/");
     }
     foreach ($this->inis as $file) {
         if ($verbose) {
             printf("Checking %s ...\n", $file);
         }
         if (!file_exists($file)) {
             throw new Exception(sprintf("INI file '%s' does not exist", $file));
         }
         $temp = new Tempfile("phpini");
         foreach (file($file) as $line) {
             if (preg_match("/^\\s*{$this->type}\\s*=\\s*[\"']?{$pattern}[\"']?\\s*(;.*)?\$/", $line)) {
                 return false;
             }
             fwrite($temp->getStream(), $line);
         }
     }
     /* not found; append to last processed file, which is the main by default */
     if ($verbose) {
         printf("Activating in %s ...\n", $file);
     }
     fprintf($temp->getStream(), $this->type . "=%s\n", $extension);
     $temp->closeStream();
     $path = $temp->getPathname();
     $stat = stat($file);
     // owner transfer
     $ugid = sprintf("%d:%d", $stat["uid"], $stat["gid"]);
     $cmd = new ExecCmd("chown", $verbose);
     if (isset($this->sudo)) {
         $cmd->setSu($this->sudo);
     }
     $cmd->run([$ugid, $path]);
     // permission transfer
     $perm = decoct($stat["mode"] & 0777);
     $cmd = new ExecCmd("chmod", $verbose);
     if (isset($this->sudo)) {
         $cmd->setSu($this->sudo);
     }
     $cmd->run([$perm, $path]);
     // rename
     $cmd = new ExecCmd("mv", $verbose);
     if (isset($this->sudo)) {
         $cmd->setSu($this->sudo);
     }
     $cmd->run([$path, $file]);
     if ($verbose) {
         printf("Replaced %s ...\n", $file);
     }
     return true;
 }
Example #2
0
 /**
  * @param bool $verbose
  * @return \pharext\Task\Tempfile
  * @throws \pharext\Exception
  */
 public function run($verbose = false)
 {
     if ($verbose !== false) {
         printf("Fetching %s ...\n", $this->source);
     }
     $context = $this->createStreamContext();
     if (!($remote = fopen($this->source, "r", false, $context))) {
         throw new Exception();
     }
     $local = new Tempfile("remote");
     if (!stream_copy_to_stream($remote, $local->getStream())) {
         throw new Exception();
     }
     $local->closeStream();
     /* STREAM_NOTIFY_COMPLETED is not generated, see above */
     call_user_func($this->progress, 1);
     return $local;
 }