【问题标题】:How can I use a composer generated bin script with a different php binary?如何将 composer 生成的 bin 脚本与不同的 php 二进制文件一起使用?
【发布时间】:2020-08-31 03:34:59
【问题描述】:

我正在使用一个 PHP 库,它有一个顶部带有 shebang 的 cli 脚本文件:

#!/usr/bin/env php
<?php

此文件旨在供 cli 使用,因此它在 composer config as expected 上定义为 bin

当我执行composer install 时,作曲家会在vendor/bin 文件夹中生成指向此文件的链接,如下所示:

#!/usr/bin/env sh

dir=$(d=${0%[/\\]*}; cd "$d" > /dev/null; cd "../lib-owner/lib" && pwd)

dir=$(echo $dir | sed 's/ /\ /g')
"${dir}/lib" "$@"

问题在于,通过这种设置,对vendor/bin/the-library 的每次调用都只是转发到 php 脚本文件,它让 shebang 解析 PHP 版本,但我需要使用特定的调用此脚本 php 二进制文件。

我可以直接调用脚本文件解决:php73 /vendor/lib-owner/lib/lib/the-script

或者通过将脚本克隆到我的根文件夹并在那里代替供应商调用它:php73 the-script

问题是这两种方式都有一些缺点,我更喜欢更稳定和更少hacky的东西。

还有吗?

【问题讨论】:

  • env PATH="/path/to/your/php/binary:$PATH" vendor/bin/the-library这样的东西怎么样?
  • 不幸的是它不起作用:(我使用这个具有多个 PHP 版本的 docker 映像进行了测试:blog.eriksen.com.br/en/…。并执行:env PATH="/opt/phpenv/versions/5.4/bin/php:$PATH" vendor/bin/crunz,但结果是默认的 PHP 5.6 版本.
  • 这很令人惊讶,因为 env 应该在 PATH 中找到第一个 php 可执行文件。您确定应该在:$PATH 之前添加/php 吗?不是二进制本身吗?
  • 天哪,你是对的!我试过env PATH="/opt/phpenv/versions/5.4/bin:$PATH" vendor/bin/crunz 并且知道它有效。很好的解决方案,谢谢!
  • 不错!我会将其添加为答案,以便将来可能对人们有所帮助。

标签: php composer-php


【解决方案1】:

你可以这样做:

env PATH="/path/to/folder/where/desired/php/resides:$PATH" vendor/bin/the-library

它所做的只是在该命令执行期间更改 PATH 环境变量,方法是在所需 PHP 解释器的路径前添加。

这样,/usr/bin/env 将使用该 PHP 版本而不是默认版本(并且一旦脚本完成,PATH 环境变量将恢复为之前的值)。

【讨论】:

    猜你喜欢
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2018-12-14
    相关资源
    最近更新 更多