在 phar 中捆绑 PECL 扩展

Bundle PECL extension in a phar

PHPncurses library is not installed on a normal php installation, you must install it as a PECL extension

我想将其捆绑在 php phar 应用程序中。

这可行吗?如何实现?

PECL 包是用 C 编写的,需要针对特定​​的 PHP 版本和操作系统(以及 ZTS 和 CPU 架构等其他变量)进行编译。

您需要为 .phar 文件中上述变量的每种可能组合打包编译库,然后自己加载正确的库。

虽然这当然可行,但我不会投入巨大的努力。而是检查扩展是否已加载并生成一条很好的错误消息,告诉您如果未加载该怎么做。

同意cweiske的回答

我理解您为什么会对这样做感兴趣,但现实是 PHP 对于 .phar 的先决条件意味着它们永远不会是独立的可执行文件。它们就像 java .jar 文件。在每种情况下都需要相关的运行时环境。

建议的 PHP 解决方案很简单:

if (!extension_loaded('ncurses')) {
    echo "The ncurses Extension is required.  Use PECL or your system package manager to install it.  See http://php.net/ncurses for more information."
    exit;
}

话虽如此,如果我的假设是正确的,那么无论您尝试使用 ncurses 创建什么程序,最好用可以编译成可执行文件(c、c++)的自包含语言编写。

或者至少是一种能够以可靠且简单的方式处理应用程序打包的语言(python、Ruby、Golang)。特别是对 Docker 等跨平台工具的 Golang 以及 termui 等终端库如此感兴趣,我认为您应该考虑 PHP 是否真的是这类工具的正确工具您正在创建的应用程序。