manifest = $manifest; } public function prepare() { log_debug("Finding files to add..."); $this->files = $this->manifest->findSourceFiles(); log_debug("Found %d files", count($this->files)); } public function build() { // Create the phar $phar = new \Phar("/tmp/output.phar"); $vo = posix_isatty(STDOUT); // Add files log_debug("Adding files to phar archive..."); $t = count($this->files); $i = 0; $lp = null; $phar->startBuffering(); foreach ($this->files as $file) { $i++; $tp = dirname($file->src); if ($tp!=$lp) { $lp=$tp; printf("\r\e[K%d/%d %s", $i, $t, $tp); } if (fnmatch("*.php",$file->src)) { $phar->addFromString($file->dest?:$file->src, php_strip_whitespace($file->src)); } else { $phar->addFile($file->dest?:$file->src, $file->src); } } ($vo) && printf("\r\e[K"); $phar->stopBuffering(); // Create stub if ($this->manifest->getIsLibrary()) { log_debug("Creating library stub..."); // Create library stub $stub = 'manifest->getStubFile())) { $stub.= 'require_once __DIR__."/'.ltrim($stubfile,'/').'";'; } $phar->addFromString("index.php", $stub); } else { log_debug("Creating application stub..."); // Write application stub $stubfile = $this->manifest->getStubFile(); $stub = 'addFromString("index.php", $stub); // Make the phar stub executable $mainstub = $phar->createDefaultStub("index.php"); $tmp = "/tmp/".uniqid("stub"); file_put_contents($tmp, $mainstub); $mainstub = php_strip_whitespace($tmp); unlink($tmp); $mainstub = "#!/usr/bin/env php\n{$mainstub}"; $phar->setStub($mainstub); } // Close the phar $phar = null; } public function finalize() { $output = $this->manifest->getOutput(); if (file_exists($output)) { unlink($output); } log_debug("Writing %s", $output); rename("/tmp/output.phar", $output); if (!$this->manifest->getIsLibrary()) { chmod($output, 0777); } } }