【问题标题】:Symfony process component points to wrong PHP versionSymfony 进程组件指向错误的 PHP 版本
【发布时间】:2017-02-12 00:34:48
【问题描述】:

我正在尝试使用 Symfony 进程组件运行 composer install,如下所示:

if ($process->isSuccessful()) {
    $process = new Process("cd {$directory} && composer install");

    $process->run(function ($type, $buffer) {
        if (Process::ERR === $type) {
            Log::info($buffer);
        } else {
            Log::info($buffer);
        }
    });
}

它指向 5.6.25 的 PHP 版本,这看起来很奇怪,因为我 100% 确定我使用的是 PHP 7。在 Laravel 中运行 phpinfo() 给了我:

PHP 版本 7.0.13

从我的终端运行php -v 给了我:

PHP 7.0.13 (cli)(构建时间:2016 年 11 月 15 日 23:52:36)(NTS)版权所有 (c) 1997-2016 PHP Group Zend Engine v3.0.0,版权所有 (c) 1998-2016 Zend 技术

这是我从 Symfony 进程组件写入的日志文件中拖尾的输出:

Problem 1
    - Installation request for phpunit/php-code-coverage 5.0.0 -> satisfiable by phpunit/php-code-coverage[5.0.0].
    - phpunit/php-code-coverage 5.0.0 requires php ^7.0 -> your PHP version (5.6.25) does not satisfy that requirement.
  Problem 2
    - Installation request for phpunit/phpunit 6.0.6 -> satisfiable by phpunit/phpunit[6.0.6].
    - phpunit/phpunit 6.0.6 requires php ^7.0 -> your PHP version (5.6.25) does not satisfy that requirement.
  Problem 3
    - Installation request for phpunit/phpunit-mock-objects 4.0.0 -> satisfiable by phpunit/phpunit-mock-objects[4.0.0].
    - phpunit/phpunit-mock-objects 4.0.0 requires php ^7.0 -> your PHP version (5.6.25) does not satisfy that requirement.

有人知道为什么它指向我没有使用的 PHP 版本吗?顺便说一句,我正在 macOS 上运行它。

最奇怪的是,即使我在 Symfony 进程中使用php -v,它也会显示正确的版本,所以看起来 composer 链接到了错误的 PHP 版本?我可以通过 composer 在本地安装它,只需通过我自己的终端要求它即可。

如果有人需要更多信息,我非常愿意尝试一些事情。告诉我。

【问题讨论】:

  • 您的机器上是否安装了多个版本的php?试试which php确认

标签: php symfony process


【解决方案1】:

不确定为什么会发生这种情况,但您可以使用 --ignore-platform-reqs option 在作曲家中跳过平台要求。

if ($process->isSuccessful()) {
    $process = new Process("cd {$directory} && composer install --ignore-platform-reqs");

    $process->run(function ($type, $buffer) {
        if (Process::ERR === $type) {
            Log::info($buffer);
        } else {
            Log::info($buffer);
        }
    });
}

【讨论】:

  • 这非常有效,但我仍然对潜在问题保持警惕。感谢您的回复,但如果可能的话,我希望有人仍然与我一起解决这个问题:)
【解决方案2】:

发生这种情况是因为执行 symfony 进程组件的用户与我的普通用户不同,这导致完全不同的 $PATH 没有我设置的常用全局变量。

如果您想阅读此内容,可以查看此讨论:

https://github.com/symfony/symfony/issues/21591

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2012-07-24
    • 2020-06-07
    相关资源
    最近更新 更多