首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何修补phar软件包?

如何修补phar软件包?
EN

Stack Overflow用户
提问于 2022-05-30 16:50:16
回答 2查看 45关注 0票数 0

你是如何给一个phar包打补丁的?例如,如果我想要修补程序

代码语言:javascript
代码运行次数:0
运行
复制
if (function_exists('posix_getuid') && posix_getuid() === 0) {
if ($commandName !== 'self-update' && $commandName !== 'selfupdate') {
$io->writeError('<warning>Do not run Composer as root/super user! See https://getcomposer.org/root for details</warning>');

从作曲家到

代码语言:javascript
代码运行次数:0
运行
复制
if (false && posix_getuid() === 0) {
if ($commandName !== 'self-update' && $commandName !== 'selfupdate') {
$io->writeError('<warning>Do not run Composer as root/super user! See https://getcomposer.org/root for details</warning>');

我该怎么做?仅仅编辑代码通常会导致

代码语言:javascript
代码运行次数:0
运行
复制
PHP Fatal error:  Uncaught PharException: phar "/usr/local/bin/composer" has a broken signature in /usr/local/bin/composer:28
Stack trace:
#0 /usr/local/bin/composer(28): Phar::mapPhar()
#1 {main}
  thrown in /usr/local/bin/composer on line 28
EN

回答 2

Stack Overflow用户

发布于 2022-06-01 09:58:18

您可以将php配置为告诉phars不要在运行时使用导致该错误的签名检查。

将以下内容配置为false https://www.php.net/manual/en/phar.configuration.php#ini.phar.require-hash

此选项将强制所有打开的Phar存档包含某种签名(当前支持MD5、SHA1、SHA256、SHA512和OpenSSL ),并且拒绝处理任何不包含签名的Phar存档。

编辑:

https://github.com/composer/composer

  1. 下载编写器

修改编译器以删除散列https://github.com/composer/composer/blob/575fbfb53fcc2388916d554271c99c8281fea782/src/Composer/Compiler.php#L81

您需要使用phar.require-hash=0命令重新编译composer并使用运行

票数 1
EN

Stack Overflow用户

发布于 2022-06-01 11:40:47

首先打开phar:

代码语言:javascript
代码运行次数:0
运行
复制
rm -rfv unpacked;
mkdir unpacked;
php --define open_basedir= --define phar.readonly=0 -r '(new Phar("composer.phar"))->convertToExecutable(Phar::TAR,Phar::NONE)->extractTo("unpacked/");'

然后在未打包的dir (在您的例子中是unpacked/src/Composer/Console/Application.php )中进行修补,然后重新打包phar:

代码语言:javascript
代码运行次数:0
运行
复制
rm -f hotpatched.phar;
php --define open_basedir= --define phar.readonly=0 -r '$phar=new Phar("hotpatched.phar");$phar->buildFromDirectory("unpacked");$phar->setStub("#!/usr/bin/env php\n".$phar->createDefaultStub("bin/composer"));'

但是将bin/composer替换为phar包的真正入口点(在composer的情况下,它是bin/composer ),然后使热修补的phar可执行:

代码语言:javascript
代码运行次数:0
运行
复制
chmod +x hotpached.phar

瞧,您的phar被修补了:) phar甚至与php.ini phar.require_hash=1一起工作。

提示:如果您希望phar压缩/缩小,可以添加$phar->compress(Phar::BZ2);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72437690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档