【发布时间】: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