include dirname(__FILE__) . '/files/tarmaker.php.inc'; $fname = dirname(__FILE__) . '/tar_004.phar.tar'; $alias = 'phar://' . $fname; $fname2 = dirname(__FILE__) . '/tar_004.tar'; $tar = new tarmaker($fname, 'none'); $tar->init(); $tar->addFile('tar_004.php', '<?php var_dump(__FILE__);'); $tar->addFile('internal/file/here', "hi there!\n"); $tar->addFile('.phar/stub.php', "__HALT_COMPILER();"); $tar->close(); try { $phar = new Phar($fname); var_dump($phar->getStub()); } catch (Exception $e) { echo $e->getMessage() . "\n"; } ini_set('phar.require_hash', 0); try { $phar = new PharData($fname2); $phar['file'] = 'hi'; var_dump($phar->getSignature()); $phar->setSignatureAlgorithm(Phar::MD5); var_dump($phar->getSignature()); } catch (Exception $e) { echo $e->getMessage() . "\n"; } ?> ===DONE=== <?php @unlink(dirname(__FILE__) . '/tar_004.phar.tar'); @unlink(dirname(__FILE__) . '/tar_004.tar');
function toTar() { if (isset($this->tar)) { return; } if (isset($this->tgz)) { if (file_exists($this->file . '.tar')) { try { $p = new \PharData($this->file . '.tar'); } catch (\Exception $e) { } if ($p->getSignature() === $this->phar->getSignature()) { $this->tar = $p; if ($this->outfile) { copy($this->file . '.tar', $this->outfile . '.tar'); } return; } unset($p); \Phar::unlinkArchive($this->file . '.tar'); } $fp = gzopen($this->file . '.tgz', 'rb'); $gp = fopen($this->file . '.tar', 'wb'); stream_copy_to_stream($fp, $gp); fclose($fp); fclose($gp); $this->tar = new \PharData($this->file . '.tar'); return; } if (isset($this->zip)) { if (file_exists($this->file . '.tar')) { \Phar::unlinkArchive($this->file . '.tar'); } $this->tar = $this->zip->convertToData(\Phar::TAR, \Phar::NONE, $this->ext . '.tar'); $this->tar->setSignatureAlgorithm(\Phar::SHA1); if ($this->outfile) { copy($this->file . '.tar', $this->outfile . '.tar'); } $this->zip = new \PharData($this->file . '.zip'); return; } // by process of elimination, the phar is in phar format if (file_exists($this->file . '.tar')) { \Phar::unlinkArchive($this->file . '.tar'); } $this->tar = $this->phar->convertToData(\Phar::TAR, \Phar::NONE, $this->ext . '.tar'); $this->tar->setSignatureAlgorithm(\Phar::SHA1); if ($this->outfile) { copy($this->file . '.tar', $this->outfile . '.tar'); } $this->phar = new \Phar($this->file . '.phar'); }