aklump/phpswap

0.0.8 2024-08-15 16:31 UTC

This package is auto-updated.

Last update: 2024-09-15 16:38:48 UTC


README

摘要

提供了一种简单执行非默认PHP版本代码的方法。最初是为了在多个PHP版本下运行Composer项目的PhpUnit测试而构建的。以下是一个示例。

快速开始

这个简单的代码示例应该能让你了解它是如何工作的。

mkdir foo
cd foo
composer init
composer require aklump/phpswap
php -v
./vendor/bin/phpswap use 5.6 "php -v; echo"
./vendor/bin/phpswap use 8.1 "php -v; echo"

它做什么

  • 临时修改$PATH以使用不同的PHP版本二进制文件。
  • 如果存在composer.json,则运行composer update,以便安装适合交换PHP版本的依赖项。
  • 运行给定的可执行文件,可以是命令或脚本路径。
  • 最后,如果需要,使用原始PHP运行composer update以恢复Composer依赖项。

支持哪些PHP版本?

要查看可用的版本,可以使用show命令,这些版本将由MAMP提供。

./vendor/bin/phpswap show

依赖项

入门指南

  1. 确保已安装MAMP。
  2. 使用MAMP下载你希望交换的所有PHP版本。
  3. 在你的项目中执行composer require aklump/phpswap
  4. 使用vendor/bin/phpswap show查看可用的版本。
  5. 使用./phpswap list查看所有可用的命令。

使用PhpUnit的示例

以下是一个可以用于在PHP 7.1、7.4和8.1下运行PhpUnit的模式。

  • 假设你在项目中使用Composer安装了phpunit
  • 然后你使用./vendor/bin/phpunit -c phpunit.xml运行你的测试
  • 那么你可以按照以下方式实现PhpSwap
  • 请参阅下面的控制器文件示例。
./vendor/bin/phpswap use 7.1 './vendor/bin/phpunit -c phpunit.xml'
./vendor/bin/phpswap use 7.4 './vendor/bin/phpunit -c phpunit.xml'
./vendor/bin/phpswap use 8.1 './vendor/bin/phpunit -c phpunit.xml'

命令行选项

-v

在详细模式中,您将看到Composer的输出。

--working-dir

这将设置脚本调用的工作目录。这是可选的。

故障排除

在执行过程中,会在您的项目中临时创建一个名为composer.lock.phpswap的文件。该文件包含在交换之前项目中的composer.lock文件的副本。此文件用于在交换结束时刷新composer.lock。在某些错误情况下,此文件可能不会删除。使用下面的片段进行恢复。

您还可能在交换执行后看到“Composer检测到您的平台中的问题:”。这里同样适用,尝试下面的片段。

mv composer.lock.phpswap composer.lock;composer update

控制器文件示例

以下是一个用于控制测试的完整片段。保存为bin/run_unit_tests.sh并按如下方式调用:bin/run_unit_tests.sh -v。除非在故障排除时,否则可以省略详细信息的-v标志。

#!/usr/bin/env bash
s="${BASH_SOURCE[0]}";[[ "$s" ]] || s="${(%):-%N}";while [ -h "$s" ];do d="$(cd -P "$(dirname "$s")" && pwd)";s="$(readlink "$s")";[[ $s != /* ]] && s="$d/$s";done;__DIR__=$(cd -P "$(dirname "$s")" && pwd)

cd "$__DIR__/.."

verbose=''
if [[ "${*}" == *'-v'* ]]; then
  verbose='-v'
fi
./vendor/bin/phpswap use 7.3 $verbose './vendor/bin/phpunit -c tests_unit/phpunit.xml'
./vendor/bin/phpswap use 7.4 $verbose './vendor/bin/phpunit -c tests_unit/phpunit.xml'
./vendor/bin/phpswap use 8.0 $verbose './vendor/bin/phpunit -c tests_unit/phpunit.xml'
./vendor/bin/phpswap use 8.1 $verbose './vendor/bin/phpunit -c tests_unit/phpunit.xml'
./vendor/bin/phpswap use 8.2 $verbose './vendor/bin/phpunit -c tests_unit/phpunit.xml'