PHP Conference Japan 2024

Phar::convertToExecutable

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

Phar::convertToExecutable将 phar 归档文件转换为另一种可执行的 phar 归档文件格式

描述

public Phar::convertToExecutable(?int $format = null, ?int $compression = null, ?string $extension = null): ?Phar

注意:

此方法需要 php.ini 设置 phar.readonly 设置为 0 才能对 Phar 对象起作用。否则,将抛出 PharException

此方法用于将 phar 归档文件转换为另一种文件格式。例如,它可用于从基于 zip 的可执行 phar 归档文件或 phar 文件格式的可执行 phar 归档文件中创建基于 tar 的可执行 phar 归档文件。此外,它还可用于对基于 tar 或 phar 的归档文件应用整个归档文件的压缩。

如果未指定任何更改,则此方法会抛出 BadMethodCallException

如果成功,则该方法会在磁盘上创建一个新的归档文件并返回一个 Phar 对象。旧的归档文件不会从磁盘中删除,并且应在流程完成后手动删除。

参数

format

这应该是 Phar::PHARPhar::TARPhar::ZIP 之一。如果设置为 null,则将保留现有的文件格式。

compression

这应该是 Phar::NONE(表示不进行整个归档文件的压缩)、Phar::GZ(表示基于 zlib 的压缩)或 Phar::BZ2(表示基于 bzip 的压缩)之一。

extension

此参数用于覆盖转换后的归档文件的默认文件扩展名。请注意,所有基于 zip 和 tar 的 phar 归档文件都必须在其文件扩展名中包含 .phar,才能作为 phar 归档文件进行处理。

如果转换为基于 phar 的归档文件,则默认扩展名分别为 .phar.phar.gz.phar.bz2,具体取决于指定的压缩方式。对于基于 tar 的 phar 归档文件,默认扩展名分别为 .phar.tar.phar.tar.gz.phar.tar.bz2。对于基于 zip 的 phar 归档文件,默认扩展名是 .phar.zip

返回值

该方法在成功时返回一个 Phar 对象,失败时返回 null

错误/异常

当无法压缩、指定了未知的压缩方法、请求的归档文件正在使用 Phar::startBuffering() 进行缓冲且尚未使用 Phar::stopBuffering() 结束时,此方法会抛出 BadMethodCallException;如果禁用了写入支持,则会抛出 UnexpectedValueException;如果在 phar 创建过程中遇到任何问题,则会抛出 PharException

变更日志

版本 描述
8.0.0 formatcompressionextension 现在可以为 null。

示例

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

使用 Phar::convertToExecutable()

<?php
try {
$tarphar = new Phar('myphar.phar.tar');
// 将其转换为 phar 文件格式
// 请注意,myphar.phar.tar *不会* 被解除链接
$phar = $tarphar->convertToExecutable(Phar::PHAR); // 创建 myphar.phar
$phar->setStub($phar->createDefaultStub('cli.php', 'web/index.php'));
// 创建 myphar.phar.tgz
$compressed = $phar->convertToExecutable(Phar::TAR, Phar::GZ, '.phar.tgz');
} catch (
Exception $e) {
// 在此处处理错误
}
?>

参见

添加注释

用户贡献的注释 1 条注释

alex at phpguide dot co dot il
13 年前
转换为可执行文件和压缩方法会覆盖您使用其自己的存根创建的任何存根,该存根负责提取/执行自身的内容。

在 convertToExecutable 之后调用 setStub() 也无济于事。就 php 5.3.6 (phar 2.0.1) 而言,如果您希望通过 Web 访问 phar 归档文件,则必须创建您自己的
index.php,它将包含一个不可执行的 phar 并充当引导程序。
To Top