paragonie / pharaoh
v0.6.1
2024-05-08 16:20 UTC
Requires
- php: ^7.1|^8
- paragonie/constant_time_encoding: ^2|^3
- paragonie/sodium_compat: ^1.3
- ulrichsg/getopt-php: ^3
Requires (Dev)
- vimeo/psalm: ^1|^2|^3|^4
README
注意: Box 拥有差异工具,可以实现Pharaoh的功能,并且更广泛地得到支持和采用。我们正在废弃Pharaoh,转向使用
box diff
。
显示两个PHP存档中所有文件之间的差异
很可能会出现,两个PHP存档在字节级别上不兼容,因此 sha256sum
不会产生相同的结果,即使它们都是从相同的源代码构建并且包含相同的文件内容。这是因为Composer会随机化例如它们的自动加载类名。
版权(c)2015 - 2018 Paragon Initiative Enterprises。也请查看我们的其他 开源项目。
示例
要验证两个PHP存档是否由相同的源代码构建,首先下载官方发行版,然后从源代码构建一个PHAR。
基本用法
要查看两个文件之间的差异,请运行以下命令
/path/to/pharaoh \ /path/to/distributed.phar \ /path/to/built-from-source-code.phar
示例输出
$ pharaoh dist/sodium-compat-php5.phar dist/sodium-compat-php7.phar diff --git a/tmp/phr_GPrhh5/vendor/autoload.php b/tmp/phr_SBYnr7/vendor/autoload.php index c20d4db..5c849e0 100644 --- a/tmp/phr_GPrhh5/vendor/autoload.php +++ b/tmp/phr_SBYnr7/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInitf6d95af9246e0e0e98e255e3bc14c82b::getLoader(); +return ComposerAutoloaderInitd4c7400998bd39c407a1d41a47cd86c6::getLoader(); diff --git a/tmp/phr_GPrhh5/vendor/composer/autoload_real.php b/tmp/phr_SBYnr7/vendor/composer/autoload_real.php index a23d814..432c698 100644 --- a/tmp/phr_GPrhh5/vendor/composer/autoload_real.php +++ b/tmp/phr_SBYnr7/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ -class ComposerAutoloaderInitf6d95af9246e0e0e98e255e3bc14c82b +class ComposerAutoloaderInitd4c7400998bd39c407a1d41a47cd86c6 { private static $loader; @@ -19,15 +19,15 @@ if (null !== self::$loader) { return self::$loader; } -spl_autoload_register(array('ComposerAutoloaderInitf6d95af9246e0e0e98e255e3bc14c82b', 'loadClassLoader'), true, true); +spl_autoload_register(array('ComposerAutoloaderInitd4c7400998bd39c407a1d41a47cd86c6', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); -spl_autoload_unregister(array('ComposerAutoloaderInitf6d95af9246e0e0e98e255e3bc14c82b', 'loadClassLoader')); +spl_autoload_unregister(array('ComposerAutoloaderInitd4c7400998bd39c407a1d41a47cd86c6', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; -call_user_func(\Composer\Autoload\ComposerStaticInitf6d95af9246e0e0e98e255e3bc14c82b::getInitializer($loader)); +call_user_func(\Composer\Autoload\ComposerStaticInitd4c7400998bd39c407a1d41a47cd86c6::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -48,19 +48,19 @@ $loader->addClassMap($classMap); $loader->register(true); if ($useStaticLoader) { -$includeFiles = Composer\Autoload\ComposerStaticInitf6d95af9246e0e0e98e255e3bc14c82b::$files; +$includeFiles = Composer\Autoload\ComposerStaticInitd4c7400998bd39c407a1d41a47cd86c6::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { -composerRequiref6d95af9246e0e0e98e255e3bc14c82b($fileIdentifier, $file); +composerRequired4c7400998bd39c407a1d41a47cd86c6($fileIdentifier, $file); } return $loader; } } -function composerRequiref6d95af9246e0e0e98e255e3bc14c82b($fileIdentifier, $file) +function composerRequired4c7400998bd39c407a1d41a47cd86c6($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/tmp/phr_GPrhh5/vendor/composer/autoload_static.php b/tmp/phr_SBYnr7/vendor/composer/autoload_static.php index d10ce9b..55ba104 100644 --- a/tmp/phr_GPrhh5/vendor/composer/autoload_static.php +++ b/tmp/phr_SBYnr7/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInitf6d95af9246e0e0e98e255e3bc14c82b +class ComposerStaticInitd4c7400998bd39c407a1d41a47cd86c6 { public static $files = array ( '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
GNU差异(-d
)
默认情况下,Pharaoh会使用 git
生成代码的差异。如果您想使用GNU差异,请传递 -d
标志,如下所示
/path/to/pharaoh -d \ /path/to/distributed.phar \ /path/to/built-from-source-code.phar
示例输出
$ pharaoh -d dist/sodium-compat-php5.phar dist/sodium-compat-php7.phar Common subdirectories: /tmp/phr_EsTl2p/lib and /tmp/phr_UV3iJt/lib Common subdirectories: /tmp/phr_EsTl2p/src and /tmp/phr_UV3iJt/src Common subdirectories: /tmp/phr_EsTl2p/vendor and /tmp/phr_UV3iJt/vendor
文件哈希(-c
,--check
)
如果您更关注快速扫描以验证Pharaoh内容的真实性,您可以使用 -c algo
或 --check=algo
参数来指定要使用的哈希函数。
/path/to/pharaoh --check=sha256 \
/path/to/distributed.phar \
/path/to/built-from-source-code.phar
# This is equivalent to the above command:
/path/to/pharaoh -csha256 \
/path/to/distributed.phar \
/path/to/built-from-source-code.phar
示例输出
$ pharaoh --check=blake2b dist/sodium-compat-php5.phar dist/sodium-compat-php7.phar
/vendor/autoload.php
83d3edc0cc50bbe1d4a05ec1c269359b1eddeb0d7d706f81c7bfb52e7a2dd86c 3310968acbf487a14e38e55077cf792bcd649f48e001717a35506f12031c97a9
/vendor/composer/autoload_static.php
a3e53155cbc5faccc2f8bb1d28dfe202ac033504d0e72268847bf33429bb47df da215e6479739f87f04248880d0bfee78bd5d0828e61c8fb38a85902d42e844c
/vendor/composer/autoload_real.php
70e1113f73dc73a61594ee5cb724c44019f8f1a79321e51532a3cf0ef582b50c 1fd1127fb6a245128b5901f5d1087a1fbe0477e525d477192bd91a7623cf152a
这里接受PHP支持的任何哈希函数。此外,如果您指定了 blake2b
,Pharaoh将使用 sodium_compat 为每个文件生成BLAKE2b哈希值。