3 namespace pharext\Task
;
13 class Activate
implements Task
31 * @param string $cwd working directory
32 * @param array $inis custom INI or list of loaded/scanned INI files
33 * @param string $sudo sudo command
34 * @throws \pharext\Exception
36 public function __construct($cwd, array $inis, $sudo = null) {
39 if (!$this->inis
= $inis) {
40 throw new Exception("No PHP INIs given");
45 * @param bool $verbose
46 * @return boolean false, if extension was already activated
48 public function run($verbose = false) {
49 $extension = basename(current(glob("{$this->cwd}/modules/*.so")));
50 $pattern = preg_quote($extension);
52 foreach ($this->inis
as $file) {
53 $temp = new Tempfile("phpini");
54 foreach (file($file) as $line) {
55 if (preg_match("/^\s*extension\s*=\s*[\"']?{$pattern}[\"']?\s*(;.*)?\$/", $line)) {
58 fwrite($temp->getStream(), $line);
62 /* not found; append to last processed file, which is the main by default */
63 fprintf($temp->getStream(), "extension=%s\n", $extension);
66 $path = $temp->getPathname();
70 $ugid = sprintf("%d:%d", $stat["uid"], $stat["gid"]);
71 $cmd = new ExecCmd("chown", $verbose);
72 if (isset($this->sudo
)) {
73 $cmd->setSu($this->sudo
);
75 $cmd->run([$ugid, $path]);
77 // permission transfer
78 $perm = decoct($stat["mode"] & 0777);
79 $cmd = new ExecCmd("chmod", $verbose);
80 if (isset($this->sudo
)) {
81 $cmd->setSu($this->sudo
);
83 $cmd->run([$perm, $path]);
86 $cmd = new ExecCmd("mv", $verbose);
87 if (isset($this->sudo
)) {
88 $cmd->setSu($this->sudo
);
90 $cmd->run([$path, $file]);