PHP Conference Japan 2024

Phar::__construct

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 1.0.0)

Phar::__construct构造 Phar 归档对象

描述

public Phar::__construct(string $filename, int $flags = FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS, ?string $alias = null)

参数

filename

现有 Phar 归档文件或要创建的归档文件的路径。文件名扩展名必须包含 .phar。

flags

传递给父类 RecursiveDirectoryIterator 的标志。

alias

在调用流功能时应使用此别名来引用此 Phar 归档文件。

错误/异常

如果调用两次,则抛出 BadMethodCallException,如果无法打开 Phar 归档文件,则抛出 UnexpectedValueException

示例

示例 #1 Phar::__construct() 示例

<?php
try {
$p = new Phar('/path/to/my.phar', FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_FILENAME,
'my.phar');
} catch (
UnexpectedValueException $e) {
die(
'Could not open my.phar');
} catch (
BadMethodCallException $e) {
echo
'technically, this cannot happen';
}
// this works now
echo file_get_contents('phar://my.phar/example.txt');
// and works as if we had typed
echo file_get_contents('phar:///path/to/my.phar/example.txt');
?>

添加注释

用户贡献的注释 2 条注释

myselfasunder at findmenow dot gmail dot com
14 年前
Zip 支持似乎不稳定,因为仅尝试打开一个 Zip 文件(由 7-Zip 创建)并启用“zlib”和“zip”扩展名就会导致以下错误

错误:无法转换 phar 归档文件“C:/Development/webdir/public_html/TestPhar.zip”,无法打开条目“TestPhar/”内容:phar 错误:zip 基于的 phar“C:/Development/webdir/public_html/TestPhar.zip”的内部损坏(文件“TestPhar/”的本地标头与中央目录不匹配)

坚持使用 GZ 和 BZ2(但不要忘记在必要时启用 BZ2 扩展名)。

Phar 只能打开可执行的 Phar,而 PharData 只能打开不可执行的 Phar。两者都能够在两种格式之间进行转换。

但是,您可以引用 Phar 中的文件,而不管它是否可执行,方法是使用 Phar 流包装器 (file_get_contents('phar://<Phar file>/subdirectory/subdirectory/somefile.txt'))。

Dustin Oprea
Christian
14 年前
启用 safe_mode 时无法创建新归档文件!您只需返回“Phar 创建或打开失败”错误。
这适用于 PHP 5.3.2 中的 Phar 和 PharData。
To Top