Phar

adicione uma nota

Notas Enviadas por Usuários (em inglês) 6 notes

up
34
dava
12 years ago
Here is an apache2 htaccess example that prevents the downloading of phar-Archives by the user:RewriteEngine onRewriteRule ^(.*)\.phar$ - [F]It triggers a "403 - Forbidden" message instead of delivering the archive.
up
17
bohwaz
13 years ago
If you get blank pages when trying to access a phar web-page, then you probably have Suhosin on your PHP (like in Debian and Ubuntu), and you need to ad this to your php.ini to allow execution of PHAR archives :suhosin.executor.include.whitelist="phar"
up
6
v-mafick at microsoft dot com
12 years ago
Users should set the `sys_temp_dir` directive.PHAR stores temporary files in either `sys_temp_dir` or the current working directory(CWD).This is especially important if you're CWD is on a remote file system. Often web server clusters will share a common file system between each web server (using NFS, DFS, etc...). In such scenarios, if you don't set `sys_temp_dir` to a local directory, PHAR will be creating temporary files over the network, which will result in performance and functionality problems.
up
3
brunoczim
8 years ago
Here is a very simple program for creating phar files with CLI. Note that it requires phar.readonly in php.ini  set to false (Off).<?php$filename = "default";$dir = "./";$regex = "/^(?!.*build\\.php)(?:.*)$/";$main = "main.php";$shebang = "#!/usr/bin/env php";$chmod = true;for ($i = 0; $i < $argc; $i++) {    switch ($argv[$i]) {        case "-o":            $i++;            if ($i >= $argc) {                echo "Missing output file name" . PHP_EOL;                exit(1);            }            $filename = $argv[$i];            break;        case "-i":            $i++;            if ($i >= $argc) {                echo "Missing input directory name" . PHP_EOL;                exit(1);            }            $dir = $argv[$i];            break;        case "-p":            $i++;            if ($i >= $argc) {                echo "Missing regular expression pattern" . PHP_EOL;                exit(1);            }            $regex = $argv[$i];            break;        case "-m":            $i++;            if ($i >= $argc) {                echo "Missing main file" . PHP_EOL;                exit(1);            }            $main = $argv[$i];            break;        case "-b":            $i++;            if ($i >= $argc) {                echo "Missing shebang of file" . PHP_EOL;                exit(1);            }            $shebang = $argv[$i];            break;        case "--no-chmod":            $chmod = false;            break;    }}if (file_exists($filename)) unlink($filename);$phar = new Phar($filename);$phar->buildFromDirectory($dir, $regex);$phar->setStub(($shebang ? $shebang . PHP_EOL : "") . $phar->createDefaultStub($main));if ($chmod) {    chmod($filename, fileperms($phar) | 0700);}
up
0
lemonkid from OpenToAll
6 years ago
when read via phar://, stream will unserialize object including phar fileUse this to create phar<?php// create new Phar$phar = new Phar('lemon.phar');$phar->startBuffering();$phar->addFromString('test.txt', 'text');$phar->setStub('<?php __HALT_COMPILER(); ? >');// add object of any class as meta dataclass AnyClass {}$object = new AnyClass;$object->data = 'Chanh';$phar->setMetadata($object);$phar->stopBuffering();?>and read it by:<?phpclass AnyClass {    function __destruct() {        echo $this->data;    }}// output: Chanhfile_get_contents('phar://test.phar');?>
up
-1
t dot habenreich at web dot de
11 years ago
Here is a very simple class to build a phar file from a given source directory. You can use this for your own project and simple deployment.But my main goal was to show how to use PHAR functions in a simple way.<?phpclass BuildPhar{  private $_sourceDirectory = null;  private $_stubFile        = null;  private $_outputDirectory = null;  private $_pharFileName    = null;  /**   * @param $_sourceDirectory       // This is the directory where your project is stored.   * @param $stubFile               // Name the entry point for your phar file. This file have to be within the source   *                                   directory.    * @param null $_outputDirectory  // Directory where the phar file will be placed.   * @param string $pharFileName    // Name of your final *.phar file.   */  public function __construct($_sourceDirectory, $stubFile, $_outputDirectory = null, $pharFileName = 'myPhar.phar') {    if ((file_exists($_sourceDirectory) === false) || (is_dir($_sourceDirectory) === false)) {      throw new Exception('No valid source directory given.');    }    $this->_sourceDirectory = $_sourceDirectory;    if (file_exists($this->_sourceDirectory.'/'.$stubFile) === false) {      throw new Exception('Your given stub file doesn\'t exists.');    }    $this->_stubFile = $stubFile;    if(empty($pharFileName) === true) {      throw new Exception('Your given output name for your phar-file is empty.');    }    $this->_pharFileName = $pharFileName;    if ((empty($_outputDirectory) === true) || (file_exists($_outputDirectory) === false) || (is_dir($_outputDirectory) === false)) {      if ($_outputDirectory !== null) {        trigger_error ( 'Your output directory is invalid. We set the fallback to: "'.dirname(__FILE__).'".', E_USER_WARNING);      }      $this->_outputDirectory = dirname(__FILE__);    } else {      $this->_outputDirectory = $_outputDirectory;    }    $this->prepareBuildDirectory();    $this->buildPhar();  }  private function prepareBuildDirectory() {    if (preg_match('/.phar$/', $this->_pharFileName) == FALSE) {      $this->_pharFileName .= '.phar';    }    if (file_exists($this->_pharFileName) === true) {      unlink($this->_pharFileName);    }  }  private function buildPhar() {    $phar = new Phar($this->_outputDirectory.'/'.$this->_pharFileName);    $phar->buildFromDirectory($this->_sourceDirectory);    $phar->setDefaultStub($this->_stubFile);  }}//END Class//Example Usage:$builder = new BuildPhar(  dirname(__FILE__).'/_source',  'my_default_stub.php',  dirname(__FILE__).'/_output',  'my-phar-file.phar');
To Top