PHP 档案包 (PHAR)

要获取 PHPUnit,最简单的方法是下载 PHPUnit 的 PHP 档案包 (PHAR),它将 PHPUnit 所需要的所有必要组件(以及某些可选组件)捆绑在单个文件中:

要使用 PHP档案包(PHAR)需要有 phar 扩展。

要使用 PHAR 的 --self-update 功能需要有 openssl 扩展。

如果启用了 Suhosin 扩展,需要在 php.ini 中允许执行 PHAR:

suhosin.executor.include.whitelist = phar

Note

要从 https://phar.phpunit.de/ 下载,需要支持 TLS/SNI的客户端,例如 wget 1.14(或更高版本)。

如果要全局安装 PHAR:

$ wget https://phar.phpunit.de/phpunit.phar $ chmod +x phpunit.phar $ sudo mv phpunit.phar /usr/local/bin/phpunit $ phpunit --version PHPUnit x.y.z by Sebastian Bergmann and contributors.

也可以直接使用下载的 PHAR 文件:

$ wget https://phar.phpunit.de/phpunit.phar $ php phpunit.phar --version PHPUnit x.y.z by Sebastian Bergmann and contributors.

Windows

整体上说,在 Windows 下安装 PHAR 和手工在 Windows 下安装 Composer 是一样的过程:

为 PHP 的二进制可执行文件建立一个目录,例如 C:bin

将 ;C:bin 附加到 PATH 环境变量中(相关帮助)

下载 https://phar.phpunit.de/phpunit.phar 并将文件保存到 C:binphpunit.phar

打开命令行(例如,按 Windows+R » 输入 cmd » ENTER)

建立外包覆批处理脚本(最后得到 C:binphpunit.cmd):

C:Usersusername> cd C:bin C:bin> echo @php "%~dp0phpunit.phar" %* > phpunit.cmd C:bin> exit

新开一个命令行窗口,确认一下可以在任意路径下执行 PHPUnit:

C:Usersusername> phpunit --version PHPUnit x.y.z by Sebastian Bergmann and contributors.

对于 Cygwin 或 MingW32 (例如 TortoiseGit) shell 环境,可以跳过第五步。 取而代之的是,把文件保存为 phpunit (没有 .phar 扩展名),然后用 chmod 775 phpunit 将其设为可执行。

校验 PHPUnit PHAR 发行包

由 PHPUnit 项目分发的所有官方代码发行包都由发行包管理器进行签名。在 phar.phpunit.de 上有 PGP 签名和 SHA1 散列值可用于校验。

下面的例子详细说明了如何对发行包进行校验。首先下载 phpunit.phar 和与之对应的单独 PGP 签名 phpunit.phar.asc:

wget https://phar.phpunit.de/phpunit.phar wget https://phar.phpunit.de/phpunit.phar.asc

用单独的签名(phpunit.phar)对 PHPUnit 的 PHP 档案包(phpunit.phar.asc)进行校验:

gpg phpunit.phar.asc gpg: Signature made Sat 19 Jul 2014 01:28:02 PM CEST using RSA key ID 6372C20A gpg: Can't check signature: public key not found

在本地系统中没有发行包管理器的公钥(6372C20A)。为了能进行校验,必须从某个密钥服务器上取得发行包管理器的公钥。其中一个服务器是 pgp.uni-mainz.de。所有密钥服务器是链接在一起的,因此连接到任一密钥服务器都可以。

gpg --keyserver pgp.uni-mainz.de --recv-keys 0x4AA394086372C20A gpg: requesting key 6372C20A from hkp server pgp.uni-mainz.de gpg: key 6372C20A: public key "Sebastian Bergmann " imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)

现在已经取得了条目名称为”Sebastian Bergmann sb@sebastian-bergmann.de”的公钥。不过无法检验这个密钥确实是由名叫 Sebastian Bergmann 的人创建的。但是可以先试着校验发行包的签名:

gpg phpunit.phar.asc gpg: Signature made Sat 19 Jul 2014 01:28:02 PM CEST using RSA key ID 6372C20A gpg: Good signature from "Sebastian Bergmann " gpg: aka "Sebastian Bergmann " gpg: aka "Sebastian Bergmann " gpg: aka "Sebastian Bergmann " gpg: aka "Sebastian Bergmann " gpg: aka "[jpeg image of size 40635]" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: D840 6D0D 8294 7747 2937 7831 4AA3 9408 6372 C20A

此时,签名已经没问题了,但是这个公钥还不能信任。签名没问题意味着文件未被篡改。可是由于公钥加密系统的性质,还需要再校验密钥 6372C20A 确实是由真正的 Sebastian Bergmann 创建的。

任何攻击者都能创建公钥并将其上传到公钥服务器。他们可以建立一个带恶意的发行包,并用这个假密钥进行签名。这样,如果尝试对这个损坏了的发行包进行签名校验,由于密钥是“真”密钥,校验将成功完成。因此,需要对这个密钥的真实性进行校验。如何对公钥的真实性进行校验已经超出了本文档的范畴。

有个比较谨慎的做法是创建一个脚本来管理 PHPUnit 的安装,在运行测试套件之前校验 GnuPG 签名。例如:

#!/usr/bin/env bash clean=1 # 是否在测试完成之后删除 phpunit.phar ? aftercmd="php phpunit.phar --bootstrap bootstrap.php src/tests" gpg --fingerprint D8406D0D82947747293778314AA394086372C20A if [ $? -ne 0 ]; then echo -e " 33[33mDownloading PGP Public Key... 33[0m" gpg --recv-keys D8406D0D82947747293778314AA394086372C20A # Sebastian Bergmann gpg --fingerprint D8406D0D82947747293778314AA394086372C20A if [ $? -ne 0 ]; then echo -e " 33[31mCould not download PGP public key for verification 33[0m" exit fi fi if [ "$clean" -eq 1 ]; then # 如果存在就清理掉 if [ -f phpunit.phar ]; then rm -f phpunit.phar fi if [ -f phpunit.phar.asc ]; then rm -f phpunit.phar.asc fi fi # 抓取最新的发行版和对应的签名 if [ ! -f phpunit.phar ]; then wget https://phar.phpunit.de/phpunit.phar fi if [ ! -f phpunit.phar.asc ]; then wget https://phar.phpunit.de/phpunit.phar.asc fi # 在运行前先校验 gpg --verify phpunit.phar.asc phpunit.phar if [ $? -eq 0 ]; then echo echo -e " 33[33mBegin Unit Testing 33[0m" # 运行测试套件 `$after_cmd` # 清理 if [ "$clean" -eq 1 ]; then echo -e " 33[32mCleaning Up! 33[0m" rm -f phpunit.phar rm -f phpunit.phar.asc fi else echo chmod -x phpunit.phar mv phpunit.phar /tmp/bad-phpunit.phar mv phpunit.phar.asc /tmp/bad-phpunit.phar.asc echo -e " 33[31mSignature did not match! PHPUnit has been moved to /tmp/bad-phpunit.phar 33[0m" exit 1 fi

php 档案,PHP 档案包 (PHAR)相关推荐

  1. 人事档案管理系统档案项目实施步骤包括哪些内容

    人事档案管理系统项目的实施工作将严格按照 ISO9001 标准实行过程控制,档案项目实施步骤主要分为标准软件实施和个性化功能开发两大阶段. 1. 需求分析 (1) 成立项目组,确定项目负责人和成员工作 ...

  2. 利用计算机管理档案,初探档案的计算机管理

    档案计算机管理是档案工作现代化的重要任务和核心技术.计算机作为现代信息处理技术的产物,它的优势在于高速处理信息的能力.运用计算机科学地管理档案,无疑会改变传统的档案管理模式和方法,极大的提高档案管理系 ...

  3. php phar解包,关于php的打包 解包 Phar

    最近用php连接hive,找到了php-thrift-sql,发现readme里面有一句: 第一次接触是韩老大的创建swooole打包文章 php -c php.ini build.php 因为php ...

  4. 紫光档案-企业档案管理中国十大问题分析

    在日常工作中,我们经常会遇到硬盘破损.数据丢失.机密外泄.信息检索困难.文件损坏.文档版本多样.编号混乱.信息共享滞后.流程繁冗.操作历史不清等一系列情况,这些问题往往会造成时间浪费,沟通困难.安全隐 ...

  5. php解压phar,关于php的打包 解包 Phar

    最近用php连接hive,找到了php-thrift-sql(https://github.com/Automattic/php-thrift-sql),发现readme里面有一句: 第一次接触是韩老 ...

  6. [数据讨论][解包相关]下江小春也能轻松掌握的碧蓝档案提取工具

    注意 请先查看前置内容 下江小春也能看懂的碧蓝档案轻松解包思路 引言 朝禊佬在"下江小春也能看懂的碧蓝档案轻松解包思路"一文中提到了CG.BGM.卡池预览视频等提取方法: 这一部分 ...

  7. 泛微文书定确保电子档案移交接收过程:真实、完整、可用和安全

    电子档案的移交接收是电子档案管理流程的重要环节之一. 国家档案局发布的<电子档案移交接收操作规程>中明确了电子档案移交接收的工作流程,规定了电子档案移交接收准备工作和电子档案移交接收操作的 ...

  8. 《学生档案管理系统》

    目录 摘要 1.项目概述 2.项目工作计划 3可行性分析 4.业务流程 5.流程图和E-R图.功能模块图及分析 6.系统具体实现 心得体会 附录:相关程序代码 主要参考文献 摘要 学生档案管理系统是典 ...

  9. 应届毕业生:关于户口、档案、报到证、派遣证、就业协议书、劳动合同、社保等

    在大学毕业时就知道找到工作签了三方就行了,其实你不知道事情还多着呢,很多人只有碰到了才知道,可有时为时已晚.自己也是亲身经历了这些,分享给大家吧,如果觉得有用就尽情的转吧. 注:以下内容基本都是网上已 ...

最新文章

  1. java设计模式之UML①
  2. 视觉SLAM十四讲(1):预备知识
  3. 【收集】Python 微优化
  4. tornado 获取html,python使用tornado实现简单爬虫
  5. 模拟微信支付服务器测试,专栏 - 腾讯WeTest-All Test in WeTest
  6. 第十三章 对文本进行排序、单一和重复操作:sort命令、uniq命令
  7. 在c语言中下面的运算符中优先级最高的是,C语言习题请高手解答急急急1.下列运算符中优先级最高的运算符 爱问知识人...
  8. linux关闭cups命令,使用linux的cupsenable命令启动指定的打印机
  9. centOS 安装及部署 SVN
  10. wpf 执行mysql命令_WPF(.net 3.5)使用MySql.Data.dll进行mysql数据库操作
  11. 科目一知识点分类梳理
  12. SSM流程及核心原理
  13. Linux系统内核升级
  14. 嵌入式系统课程大作业设计报告
  15. java.util.Date中的loe_Java-学习日记(日期的转换与处理)
  16. vmware虚拟服务器数据备份,备份VMware虚拟机的方法!
  17. DELL笔记本自带键盘启动与关闭方式
  18. layui 自定义表格行高,自适应
  19. 贼有趣:朱茵变杨幂,人工智能换脸让明星不再担心自己演技?
  20. T3备份提示原先格式化该文件时所用扇区大小为512

热门文章

  1. kali用x-shell连接_良心国产工具,比Xshell好用还免费!
  2. Linux查看用户信息/查看所有用户信息的命令
  3. Linux 命令之 gunzip -- 用来解压缩文件
  4. Sublime Text如何安装和卸载插件
  5. oracle表是动态表怎么算排名,Oracle学习动态性能表
  6. C 中命名空间的五大常见用法
  7. linux里面启用无线网卡,linux启用无线网卡上网
  8. mysql密码高级_mysql高级操作
  9. java 什么时候用递归_如果要用Java实现算法,一定慎用递归
  10. 网管交换机怎么设置?网管交换机设置方法