it-source

버전 X와 버전 Y 사이에 PHP 버전이 필요하도록 Composer 강제 설정

criticalcode 2023. 1. 3. 21:44
반응형

버전 X와 버전 Y 사이에 PHP 버전이 필요하도록 Composer 강제 설정

서버(최대 5.3.5)와 개발 머신(최대 5.5.9)이 혼재되어 있습니다.

여기서 몇 가지 외부 번들의 최신 버전을 얻기 위해 "컴포저 업데이트"를 수행했다는 문제가 발생했습니다.당신의 composer.json이 이렇게 생겼기 때문에

"require": {
        "php": ">=5.3.3",
        .....
    },

PHP 5.5가 필요한 번들이 몇 개 있습니다.개발 머신에서는 문제가 없지만 서버에서는 문제가 없습니다.

5.3.3에서 5.3.5 사이의 PHP 버전을 요구하도록 작곡가에게 지시할 수 있습니까?또는 사용 가능한 최대 버전?

나는 노력했다.

"require": {
        "php": ">=5.3.3, <=5.3.5",
            .....
        },

그리고.

"require": {
            "php": "<=5.3.5",
                .....
            },

둘 다 잘 되지 않았어요."요청된 패키지 php를 어떤 버전에서도 찾을 수 없습니다. 패키지 이름에 오타가 있을 수 있습니다."라는 메시지가 나타납니다.에러

아이디어 있어요?잘 부탁드립니다

composer.json의 config 파라미터를 사용할 수 있기 때문입니다.다음과 같이 할 수 있습니다.

{
    "name": ".../...",
    "config": {
        "platform": {
            "php": "5.3.5"
        }
    },
    "require": {
        ...
    }
} 

https://getcomposer.org/doc/06-config.md#platform

최소한 최신 PHP로 개발하고 있으며, 매우 오래된 버전의 PHP를 사용하고 있다는 것은 의문입니다.보안 패치뿐만 아니라 PHP 버그 수정이 버전 5.3.9와 5.3.23에서 주로 도입되어 PHP 동작을 근본적으로 변경하기 때문에 이로 인해 많은 문제가 발생할 수 있습니다.5.4 또는 5.5의 기능을 잘못 사용하는 경우의 리스크에 대해서는 언급하지 않습니다.

그리고 컴포저에게 이 상황을 처리하게 할 방법은 없습니다. 실행 시 composer updatePHP 버전 및 설치된 PHP 확장의 영향을 받는 종속성의 해결 방법을 결정합니다.

업데이트에 사용하는 PHP가 이 버전 요건에 맞지 않는 경우 패키지를 5.3.3과 5.3.5 사이의 PHP 버전에만 사용해야 한다고 정의할 수 없습니다.사용된 PHP 버전이 상위 버전 제한을 초과하기 때문에 이러한 패키지는 버전 요구 사항을 충족할 수 없으며 Composer는 패키지가 발견되지 않았다고 보고합니다(패키지를 봤다는 것은 알리지 않았지만 버전 제약 때문에 무시해야 했습니다).

다음 세 가지 확실한 방법이 있을 수 있습니다.

  1. 개발 환경을 실제 사용 중인 운영 버전으로 다운그레이드합니다.. 에 대한 합니다.그러면 PHP 버전에 대한 모든 요구 사항이 일치합니다. 실행합니다.composer update그럼 넌 끝장이야

  2. 운영 환경을 업그레이드합니다.더 이상의 설명은 필요 없습니다만, PHP 5.5는 5.3보다 훨씬 빠르기 때문에, 매우 좋은 PHP 기능이 많이 없을 뿐만 아니라 상당한 성능 향상도 놓치고 있습니다.

  3. composer.json "platform.flatform." platform.json " platform.flatform.json"Composer 자체를 실행하는 PHP 버전을 덮어쓰고 대신 다른 PHP 버전과의 종속성을 계산하도록 Composer에게 지시합니다. composer config -g platform.php 5.3.5 설정 Composer 실행 ), "Composer" ("Composer")를 사용하지 않습니다.-g로컬 설정의 경우(PHP의 다른 프로덕션 버전을 사용하여 여러 프로젝트를 개발하는 경우 해당 프로젝트의 Composer 작업에만 영향을 줍니다).

다음을 시도해 보십시오(쉼표 제거).

"require": {
    "php": ">=5.3.3 <=5.3.5",
        .....
    },

composer.lock벤더 디렉토리를 삭제합니다.

플랫폼 옵션을 composer.json배치합니다.

"config": {

    "platform": {
        "php": "7.0"
    }

},

마지막으로 command composer install을 실행합니다.

칠드 연산자를 사용해보는 건 어때?

Tilde Operator ~1.2 시멘틱버전 관리 후 프로젝트에 매우 유용합니다.~1.2는 >=1.2<2.0에 상당합니다.상세한 것에 대하여는, 다음의 항을 참조해 주세요.

다음 중요 릴리스(칠데 오퍼레이터) #

~ 연산자는 다음과 같이 설명하는 것이 가장 좋습니다. ~1.2는 다음과 같습니다.

=1.2, <2.0, 단, ~1.2.3은 >=1.2.3, <1.3과 같다.보시는 바와 같이 시멘틱버전 관리를 존중하는 프로젝트에 대부분 유용합니다.일반적으로 사용하는 방법은 종속된 최소 마이너 버전(예: 1.2)을 표시하는 것입니다(최대 2.0까지 허용되지만 포함되지는 않음).이론상으로는 2.0까지는 하위 호환성이 깨지지 않기 때문에 이 방법은 잘 작동합니다.또 다른 방법은 ~을 사용하면 최소 버전을 지정하지만 지정된 마지막 숫자가 위로 올라가도록 허용하는 것입니다.

주의: 2.0-beta.1은 엄밀하게 2.0보다 이전 버전이지만 1.2와 같은 버전 제약 조건에서는 설치하지 않습니다.위에서 설명한 바와 같이 ~1.2는 .2만 변경할 수 있지만 1. 부분은 고정되어 있습니다.

참고: ~ 연산자에는 줄자 릴리스 번호에 대한 동작에 대한 예외가 있습니다.이는 예를 들어 ~1이 ~1.0과 동일하다는 것을 의미합니다.이는 하위 호환성을 유지하기 위해 메이저 수를 늘릴 수 없기 때문입니다.

5.3.3에서 5.3.5 사이의 PHP 버전을 요구하도록 작곡가에게 지시할 수 있습니까?

네, 여기 있습니다.

하이픈으로 표시된 버전 범위( - )

포함 버전 세트.오른쪽의 include 부분 버전은 와일드카드로 완성됩니다.예를 들어 1.0~2.0은 >=1.0.0 <2.1.*에 해당합니다.반면 1.0.0~2.1.0은 =1.0 <=2.1.0>에 해당합니다.

예: 1.0~2.0

https://getcomposer.org/doc/articles/versions.md#hyphenated-version-range-

또는 를 사용할 수 있습니다.composer.json다음과 같습니다.

{
  "require": {
    "guzzlehttp/guzzle": ">=5.3.4 <6"
  }
}

개인적으로 IMHO를 읽고 기억하는 것이 훨씬 쉽기 때문에 이 방법을 선호한다.

언급URL : https://stackoverflow.com/questions/26277151/force-composer-to-require-php-version-between-version-x-and-version-y

반응형