簡體   English   中英

如何熱補丁phar包?

[英]how to hotpatch phar package?

你如何熱補丁一個phar包? 例如,如果我想熱補丁

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>');

從作曲家到

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>');

我該怎么做? 只需編輯代碼通常會導致

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

您可以配置 php 以告訴 phars 在運行時不要使用導致該錯誤的簽名檢查。

將以下配置為false https://www.php.net/manual/en/phar.configuration.php#ini.phar.require-hash

此選項將強制所有打開的 Phar 存檔包含某種簽名(目前支持 MD5、SHA1、SHA256、SHA512 和 OpenSSL),並且將拒絕處理任何不包含簽名的 Phar 存檔。

編輯:

  1. 下載作曲家源碼: https ://github.com/composer/composer

  2. 修改編譯器以刪除哈希https://github.com/composer/composer/blob/575fbfb53fcc2388916d554271c99c8281fea782/src/Composer/Compiler.php#L81

  3. 您需要使用 compile 命令重新編譯 composer 並使用 phar.require-hash=0 運行

首先解壓phar:

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/");'

然后在未打包的目錄中進行修補,在您的情況下為unpacked/src/Composer/Console/Application.php ,然后重新打包 phar:

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 可執行:

chmod +x hotpached.phar

瞧,您的 phar 已修補 :) phar 甚至可以與 php.ini phar.require_hash=1一起使用

提示:您可以添加$phar->compress(Phar::BZ2); 如果你想要 phar 壓縮/更小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM