Phar
- はじめに
- インストール/設定
- 定義済み定数
- Phar アーカイブの使用法
- Phar アーカイブの作成
- phar って、tar や zip とは何が違うの?
- Phar — Phar クラス
- Phar::addEmptyDir — 空のディレクトリを phar アーカイブに追加する
- Phar::addFile — ファイルシステム上のファイルを phar アーカイブに追加する
- Phar::addFromString — 文字列から、ファイルを phar アーカイブに追加する
- Phar::apiVersion — API のバージョンを返す
- Phar::buildFromDirectory — ディレクトリ内のファイルから phar を作成する
- Phar::buildFromIterator — イテレータから phar アーカイブを作成する
- Phar::canCompress — phar 拡張モジュールが zlib あるいは bzip2 による圧縮をサポートしているかどうかを返す
- Phar::canWrite — phar 拡張モジュールが phar の書き込みや作成をサポートしているかどうかを返す
- Phar::compress — Phar アーカイブ全体を Gzip あるいは Bzip2 で圧縮する
- Phar::compressFiles — 現在の Phar アーカイブ内のすべてのファイルを圧縮する
- Phar::__construct — Phar アーカイブオブジェクトを作成する
- Phar::convertToData — phar アーカイブを実行可能でない tar あるいは zip ファイルに変換する
- Phar::convertToExecutable — phar アーカイブを実行可能な別の phar アーカイブ形式に変換する
- Phar::copy — phar アーカイブ内のファイルを、phar 内で別の新しいファイルとしてコピーする
- Phar::count — Phar アーカイブ内のエントリ (ファイル) の数を返す
- Phar::createDefaultStub — phar ファイルフォーマット用のスタブを作成する
- Phar::decompress — Phar アーカイブ全体の圧縮を解除する
- Phar::decompressFiles — 現在の Phar アーカイブ内のすべてのファイルの圧縮を解除する
- Phar::delMetadata — phar のグローバルメタデータを削除する
- Phar::delete — phar アーカイブ内のファイルを削除する
- Phar::__destruct — アクティブな Phar オブジェクトを破棄する
- Phar::extractTo — phar アーカイブの内容をディレクトリに展開する
- Phar::getAlias — Phar のエイリアスを取得する
- Phar::getMetadata — phar アーカイブのメタデータを返す
- Phar::getModified — phar が変更されているかどうかを返す
- Phar::getPath — Pharアーカイブのディスク上の実際のパスを取得する
- Phar::getSignature — Phar アーカイブの MD5/SHA1/SHA256/SHA512/OpenSSL シグネチャを返す
- Phar::getStub — Phar アーカイブの PHP ローダーあるいは起動スタブを返す
- Phar::getSupportedCompression — サポートする圧縮アルゴリズムの配列を返す
- Phar::getSupportedSignatures — サポートするシグネチャ型の配列を返す
- Phar::getVersion — Phar アーカイブのバージョン情報を返す
- Phar::hasMetadata — ファイルがグローバルなメタデータを持つかどうかを返す
- Phar::interceptFileFuncs — fopen、file_get_contents、opendir などの stat 関連の関数をすべて phar に横取りさせる
- Phar::isBuffering — Phar の書き込み操作がバッファリングされるか、あるいは直接ディスクに書き込まれるかを調べる
- Phar::isCompressed — phar アーカイブ全体が (.tar.gz/tar.bz などで) 圧縮されている場合に Phar::GZ あるいは PHAR::BZ2 を返す
- Phar::isFileFormat — phar アーカイブが、パラメータで指定した tar/phar/zip のいずれかの形式である場合に true を返す
- Phar::isValidPharFilename — 指定したファイル名が正しい形式の phar ファイルかどうかを返す
- Phar::isWritable — phar アーカイブが変更可能な場合に true を返す
- Phar::loadPhar — 任意の phar アーカイブを、エイリアスを指定して読み込む
- Phar::mapPhar — 現在実行されている (phar 形式の) ファイルを読み込み、その内容を登録する
- Phar::mount — 外部のパスあるいはファイルを phar アーカイブ内に仮想的にマウントする
- Phar::mungServer — 最大 4 つまでの $_SERVER 変数を実行時に変更させる
- Phar::offsetExists — ファイルが phar 内に存在するかどうかを調べる
- Phar::offsetGet — 指定したファイルの PharFileInfo オブジェクトを取得する
- Phar::offsetSet — 内部ファイルに、外部ファイルの内容を設定する
- Phar::offsetUnset — ファイルを phar から削除する
- Phar::running — 現在実行中の Phar アーカイブのフルパスあるいは完全な phar URL を返す
- Phar::setAlias — Phar アーカイブのエイリアスを設定する
- Phar::setDefaultStub — Phar アーカイブの PHP ローダー (起動スタブ) をデフォルトのローダーに設定する
- Phar::setMetadata — phar アーカイブのメタデータを設定する
- Phar::setSignatureAlgorithm — phar のシグネチャのアルゴリズムを設定して適用する
- Phar::setStub — Phar アーカイブの PHP ローダ (あるいは起動スタブ) を設定する
- Phar::startBuffering — Phar の書き込み操作のバッファリングを開始するが、ディスク上の Phar オブジェクトは変更しない
- Phar::stopBuffering — Phar アーカイブへの書き込みリクエストのバッファリングを終了し、変更内容をディスクに書き込む
- Phar::unlinkArchive — phar アーカイブをディスクとメモリから完全に削除する
- Phar::webPhar — ブラウザからのリクエストを、phar アーカイブ内部のファイルに転送する
- PharData — PharData クラス
- PharData::addEmptyDir — 空のディレクトリを tar/zip アーカイブに追加する
- PharData::addFile — ファイルシステム上のファイルを tar/zip アーカイブに追加する
- PharData::addFromString — 内容を文字列で指定したファイルを、tar/zip アーカイブに追加する
- PharData::buildFromDirectory — ディレクトリ内のファイルから tar/zip アーカイブを作成する
- PharData::buildFromIterator — イテレータから tar あるいは zip アーカイブを作成する
- PharData::compress — tar/zip アーカイブ全体を Gzip あるいは Bzip2 で圧縮する
- PharData::compressFiles — 現在の tar/zip アーカイブ内のすべてのファイルを圧縮する
- PharData::__construct — 実行可能でない tar あるいは zip アーカイブオブジェクトを作成する
- PharData::convertToData — phar アーカイブを実行可能でない tar あるいは zip ファイルに変換する
- PharData::convertToExecutable — 実行可能でない tar/zip アーカイブを実行可能な phar アーカイブ形式に変換する
- PharData::copy — phar アーカイブ内のファイルを、phar 内で別の新しいファイルとしてコピーする
- PharData::decompress — Phar アーカイブ全体の圧縮を解除する
- PharData::decompressFiles — 現在の zip アーカイブ内のすべてのファイルの圧縮を解除する
- PharData::delMetadata — zip アーカイブのグローバルメタデータを削除する
- PharData::delete — tar/zip アーカイブ内のファイルを削除する
- PharData::__destruct — 実行不能な tar や zip アーカイブオブジェクトを破棄する
- PharData::extractTo — tar/zip アーカイブの内容をディレクトリに展開する
- PharData::isWritable — tar/zip アーカイブが変更可能な場合に true を返す
- PharData::offsetSet — tar/zip の内部のファイルに、外部ファイルあるいは文字列の内容を設定する
- PharData::offsetUnset — ファイルを tar/zip アーカイブから削除する
- PharData::setAlias — ダミー関数 (Phar::setAlias は PharData では使用不能)
- PharData::setDefaultStub — ダミー関数 (Phar::setDefaultStub は PharData では無効)
- PharData::setMetadata — phar アーカイブのメタデータを設定する
- PharData::setSignatureAlgorithm — phar のシグネチャのアルゴリズムを設定する
- PharData::setStub — ダミー関数 (Phar::setStub は PharData では使用不能)
- PharFileInfo — PharFileInfo クラス
- PharFileInfo::chmod — ファイル固有のパーミッションビットを設定する
- PharFileInfo::compress — 現在の Phar エントリを zlib あるいは bzip2 のいずれかで圧縮する
- PharFileInfo::__construct — Phar エントリオブジェクトを作成する
- PharFileInfo::decompress — phar 内の現在の Phar エントリの圧縮を解除する
- PharFileInfo::delMetadata — エントリのメタデータを削除する
- PharFileInfo::__destruct — Phar エントリオブジェクトを破棄する
- PharFileInfo::getCRC32 — CRC32 コードを返すか、CRC がチェックできない場合に例外をスローする
- PharFileInfo::getCompressedSize — Phar アーカイブ内での実際のファイルの大きさ (圧縮された状態) を返す
- PharFileInfo::getContent — エントリの完全なファイルの内容を取得する
- PharFileInfo::getMetadata — ファイルとともに保存されている、ファイル固有のメタデータを返す
- PharFileInfo::getPharFlags — Phar ファイルエントリのフラグを返す
- PharFileInfo::hasMetadata — エントリのメタデータを返す
- PharFileInfo::isCRCChecked — ファイルエントリの CRC が検証されているかどうかを調べる
- PharFileInfo::isCompressed — エントリが圧縮されているかどうかを調べる
- PharFileInfo::setMetadata — ファイルとともに保存する、ファイル固有のメタデータを設定する
- PharException — PharException クラス
+add a note
User Contributed Notes 6 notes
dava ¶
11 years ago
Here is an apache2 htaccess example that prevents the downloading of phar-Archives by the user:
RewriteEngine on
RewriteRule ^(.*)\.phar$ - [F]
It triggers a "403 - Forbidden" message instead of delivering the archive.
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"
v-mafick at microsoft dot com ¶
11 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.
brunoczim ¶
7 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);
}
lemonkid from OpenToAll ¶
6 years ago
when read via phar://, stream will unserialize object including phar file
Use 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 data
class AnyClass {}
$object = new AnyClass;
$object->data = 'Chanh';
$phar->setMetadata($object);
$phar->stopBuffering();
?>
and read it by:
<?php
class AnyClass {
function __destruct() {
echo $this->data;
}
}
// output: Chanh
file_get_contents('phar://test.phar');
?>
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.
<?php
class 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'
);
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google