programing

Composer 실행 시 xdebug 사용 안 함

coolbiz 2023. 1. 17. 21:39
반응형

Composer 실행 시 xdebug 사용 안 함

" " 를 실행하고 composer diagnose, 다음의 에러가 표시됩니다.

xdebug 확장이 로드되어 Composer의 속도가 다소 느려질 수 있습니다.Composer를 사용할 때는 사용하지 않도록 설정하는 것이 좋습니다.

Composer를 실행하고 있을 때만 xdebug를 비활성화하려면 어떻게 해야 합니까?

업데이트: Xdebug 3+의 경우:

에서는 Xdebug 3의 Xdebug 옵션을 할 수.xdebug.mode로로 합니다.off 환경변수 「」를 XDEBUG_MODE=off.

Xdebug에 를 붙이면 작곡가를 디세블로 하는 은 매우 .composer.

alias composer='XDEBUG_MODE=off \composer'

또는

alias composer='php -dxdebug.mode=off $(where composer | fgrep -v composer: |  head -1)'

할 수 .$HOME/.bashrc영속적으로 하기 위해서요


업데이트: Xdebug 1.3 - 3.0.0의 경우:

문제는 Composer 1.3에서 수정되었습니다.를 실행하여 컴포저를 최신 버전으로 업데이트합니다.composer self-update다음 회피책을 시도하지 않고 를 참조하십시오.


Xdebug < 1.3의 경우

@ezzatron의 코드를 수정했습니다.phpinfo 출력에서 ini 파일을 검출하도록 스크립트를 업데이트했습니다.

#!/bin/sh

php_no_xdebug () {
    temporaryPath="$(mktemp -t php.XXXX).ini"

    # Using awk to ensure that files ending without newlines do not lead to configuration error
    php -i | grep "\.ini" | grep -o -e '\(/[a-z0-9._-]\+\)\+\.ini' | grep -v xdebug | xargs awk 'FNR==1{print ""}1' | grep -v xdebug > "$temporaryPath"
    
    php -n -c "$temporaryPath" "$@"
    rm -f "$temporaryPath"
}
    
php_no_xdebug /usr/local/bin/composer.phar $@
# On MacOS with composer installed using brew, comment previous line
# Install jq by executing `brew install jq` and uncomment following line.
# php_no_xdebug /usr/local/Cellar/composer/`brew info --json=v1 composer | jq -r '.[0].installed[0].version'`/libexec/composer.phar $@

이 명령어는 CLI용 PHP5 Xdebug 모듈을 디세블로 합니다(따라서 composer).

sudo php5dismod -s cli xdebug

xdebug를 삭제합니다.ini 심볼링크/etc/php5/cli/conf.d/

이는 http://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/에서 제안되었습니다.

Ubuntu 16.04의 경우 다음과 같이 실행해야 합니다.

sudo phpdismod -s cli xdebug

타겟 스크립트에 따라 다른 설정을 로드할 수 있도록 PHP를 설정하는 옵션은 없다고 생각합니다.적어도 .ini 파일을 복제하지 않고서는...

단, php를 사용하여 composer를 실행할 경우 옵션을 추가할 수 있습니다.

php -n -d extension=needed_ext.so composer.phar

-nPHP php php . ini 。xdebug를 사용하다

-doptions needed_ext 입니다.소우 여러 개를 할 수 .-d은 선택 없을 수도 .물론 이것은 옵션입니다.필요없을 수도 있습니다.

그런 다음 가명을 만들어 다시 설탕으로 만들 수 있습니다.

일반적인 솔루션(작곡가가 json을 필요로 하기 때문에):

php -n -d extension=json.so composer.phar

greg0ire > 솔루션, 이를 기반으로 합니다.

#!/bin/bash
options=$(ls -1 /usr/lib64/php/modules| \

    grep --invert-match xdebug| \

    # remove problematic extensions
    egrep --invert-match 'mysql|wddx|pgsql'| \

    sed --expression 's/\(.*\)/ --define extension=\1/'| \

    # join everything together back in one big line
    tr --delete '\n'
)

# build the final command line
php --no-php-ini $options ~/bin/composer $*

alias composer=/path/to/bash/script.sh

보기에도 못생겼지만(xargs에서는 시도했지만 실패했습니다) 효과가 있습니다.일부 확장을 비활성화해야 하는데 그렇지 않으면 다음 경고가 표시됩니다.

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysqli.so' - /usr/lib64/php/modules/mysqli.so: undefined symbol: mysqlnd_connect in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_mysql.so' - /usr/lib64/php/modules/pdo_mysql.so: undefined symbol: pdo_parse_params in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_pgsql.so' - /usr/lib64/php/modules/pdo_pgsql.so: undefined symbol: pdo_parse_params in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/wddx.so' - /usr/lib64/php/modules/wddx.so: undefined symbol: php_XML_SetUserData in Unknown on line 0

환경 변수 Xdebug 설정을 사용하지 않도록 설정할 수 있습니다.

XDEBUG_MODE=off composer install

XDebug 3을 사용하여 사용할 수 있습니다.

그 에일리어스를 할 수 composer xdebug에러 메시지

은 그냥 '아예'에.~/.bash_aliases완벽하게 동작할 수 있습니다.

alias composer="php -n /usr/local/bin/composer"

을 새로고침하여 에일리어스를 .composer이용할 수 있는.

source ~/.bash_profile

용도:

$ composer --version


반드시 다른 파라미터를 사용할 필요는 없습니다.
하시는 시스템에 , 「」가 있는 ..bashrc.bash_profile.

갱신:

@AlexanderKachkaev가 코멘트에서 언급했듯이 다음과 같이 memory_limit을 추가하여 크래시를 방지하는 것은 의미가 없습니다.

alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"

저는 OSX에서 꽤 잘 작동하는 답변을 생각해 냈습니다.또한 "additional ini dir"의 개별 .ini 파일을 사용하여 확장자를 로드하는 모든 PHP 버전에 적용할 수 있을 것입니다.

#!/bin/sh

function php-no-xdebug {
    local temporaryPath="$(mktemp -t php-no-debug)"

    find /opt/local/etc/$1/php.ini /opt/local/var/db/$1/*.ini ! -name xdebug.ini | xargs cat > "$temporaryPath"
    php -n -c "$temporaryPath" "${@:2}"
    rm -f "$temporaryPath"
}

alias composer="php-no-xdebug php56 ~/bin/composer"

모든 프로젝트에는 다른 PHP 버전이 있기 때문에 저는 보통 프로젝트별로 셸 스크립트를 만듭니다.에 a a a에 /bin/[ ] 옆에 composer.phar ★★★★★★★★★★★★★★★★★」composer.json 을 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★./bin/composer내 프로젝트 디렉토리에 있습니다.

(php56의 경우) 이렇게 보입니다.

#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

COMPOSER_DISABLE_XDEBUG_WARN=1 /opt/local/bin/php56 \
    -d xdebug.remote_enable=0 -d xdebug.profiler_enable=0 \
    -d xdebug.default_enable=0 $DIR/../composer.phar "$@"

-d디버그COMPOSER_DISABLE_XDEBUG_WARN=1는 경고 issuespart를 디세블로 .

xdebug 확장을 비활성화하는 것이 좋지만(작곡자 문제 해결 참조), 개인적으로 더 간단한 스크립트가 좋습니다.

머신의 일부 타이밍: 2 xdebug 및 ini 지원으로 실행: 1m33

xdebug로 실행하지만 ini-disabled: 0m19

xdebug 없이 실행: 0m10

PHPStorm을 사용하는 경우 최신 릴리스(2016.2)에는 CLI 스크립트의 XDebug를 온 디맨드로 사용하도록 설정하는 기능이 포함되어 있습니다.즉, 개발 머신에서 XDebug를 글로벌하게 끌 수 있습니다.프로젝트 내에서 코드로 필요한 경우 IDE를 통해 즉시 사용할 수 있습니다.

https://blog.jetbrains.com/phpstorm/2016/06/xdebug-on-demand-for-cli-php-scripts-in-phpstorm-2016-2-eap/

PhpStorm 2016.2는 Xdebug On Demand 모드를 도입하여 글로벌 PHP 설치를 위해 Xdebug를 비활성화할 수 있습니다.PhpStorm은 스크립트를 디버깅하거나 코드 적용 범위 보고서가 필요할 때만 Xdebug On Demand 모드를 활성화합니다.

링크된 문서에서 설명한 것처럼 XDebug로의 경로를 포함하도록 PHP 인터프리터 기본 설정을 편집해야 합니다.

IDE에 있는 동안에는 XDebug만 사용하기 때문에 이 솔루션이 완벽한 솔루션인 것 같습니다.

그러나 XDebug는 "오프라인"인 경우, 예를 들어 확장 스택덤프를 전체적으로 끄면 손실되는 오류 로그의 확장 스택덤프 등 다른 용도로 사용될 수 있습니다.물론 프로덕션 환경에서 XDebug를 사용하도록 설정하면 안 됩니다. 따라서 개발 중인 베타 테스트나 자동 테스트 CLI 스크립트와 같은 사용 사례로 제한됩니다.

PHP 모듈을 일시적으로 활성화 또는 비활성화하는 대신 PHP를 사용하는 동시 프로세스가 있을 경우(예를 들어 CI 파이프라인의 일부) 다른 모듈 로드 디렉토리를 가리키도록 PHP에 지시할 수 있습니다.

위의 솔루션과 비슷하지만 몇 가지 엣지 케이스를 해결합니다.이는 Jenkins나 같은 머신에서 동시에 테스트를 실행하는 다른 CI Runner가 사용할 때 매우 유용합니다.

하는 것입니다.PHP_INI_SCAN_DIR

스크립트 또는 빌드 태스크에서 이를 사용하는 것은 간단합니다.

export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug php composer install

물론 먼저 /etc/php.d.noxdebug를 준비하고 다음과 같은 작업을 수행합니다.

mkdir /etc/php.d.noxdebug cp /etc/php.d/* /etc/php.d.noxdebug rm /etc/php.d.noxdebug/xdebug.ini

즉, 기존 php 환경과 유사한 환경에서 모듈이 하나만 누락되어 있습니다.즉, php - n 솔루션에서처럼 par/json 모듈을 로드할 필요가 없습니다.

PHP 구성 직접 조작

Mac OS X에 설치된 Homebrew에 기반을 둔 PHP에 대한 기여입니다.

셸스스able at에 실행 .실행 파일로 저장하도록 설계되어 있습니다./usr/local/bin/composer에 경우 Composer "는 다음과 같습니다./usr/local/bin/composer.phar:

#!/bin/sh
sed -i '' -e 's:zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":;zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":' /usr/local/etc/php/5.5/conf.d/ext-xdebug.ini
/usr/local/bin/php /usr/local/bin/composer.phar "$@"
sed -i '' -e 's:;zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":' /usr/local/etc/php/5.5/conf.d/ext-xdebug.ini

운용 이론

래퍼 스크립트:

  • sed를 사용하여 Configuration파일을 일시적으로 변경하여 Xdebug를 디세블로 합니다(행 2).
  • composer를 실행하여 args를 통해 명령어(행 3)로 전달합니다.
  • sed를 사용하여 컨피규레이션파일을 복원하고 Xdebug를 다시 유효하게 합니다(4행).

X 5.5됩니다.경로는 다른 PHP 버전 및 다른 운영 체제 및 패키지 관리자의 디렉토리 레이아웃과 함께 작동하도록 조정해야 합니다.에서는 empty-string 인수 인수가 .-i★★★★★★ 。

경고 유틸리티

이 스크립트는 메인 PHP 컨피규레이션파일에서 직접 동작한다는 점에서 간단하지만, 이 스크립트와 동시에 실행되는 스크립트에 대해서도 Xdebug가 비활성화됩니다.

개발 환경에서는 Composer가 수동으로 가끔만 실행된다는 점을 고려할 때 이는 허용 가능한 트레이드오프입니다.단, Composer를 자동 도입 프로세스의 일부로 실행하는 경우에는 이 기술을 사용하지 않을 수 있습니다.

Windows 기반의 Composer instra를 위한 솔루션을 생각해 냈습니다.Composer 설치에서는 정상적으로 동작합니다.기본적으로 로드된 INI 파일의 복사본을 만들고 xdebug zend 확장자를 코멘트하여 Composer 실행 시 설정 파일을 로드합니다.

이 변경 내용을 통합하고 싶은지 여부를 확인하기 위해 다음 호를 개설했습니다.

https://github.com/composer/windows-setup/issues/58

거기서 제 설명서와 코드를 찾을 수 있습니다.

Joyce의 답변에서 알 수 있듯이 이 문제는 Composer의 최신 버전에서 더 이상 존재하지 않습니다.

를 위해 Composer 문서가 업데이트되었습니다.필요한 경우 Composer에서 xdebug를 사용하도록 설정하는 방법에 대해 자세히 설명합니다.

자체 업데이트를 사용하여 Composer 버전을 업데이트할 수 있습니다.

에서는 Mac을 해야 했습니다. Mac 서 음 음 、 Mac 음 음 、 Mac 음 、 on on on on on on 。sudo php /opt/local/bin/composer self-update

Homebrew PHP 설치와 관련된 자세한 내용은 이 호에서 확인할 수 있습니다.

xdebug를 사용하지 않도록 설정하고 메모리 오류를 방지하기 위해 구성자에 대한 별칭 생성:

~/.bash_profile에 이 행을 추가합니다.

alias composer='php -d xdebug.profiler_enable=0 -d memory_limit=-1 /usr/local/bin/composer'

단말기를 재기동해, 새로운 에일리어스를 사용할 수 있도록 합니다.

대부분의 경우 CLI 모드에서는 xdebug가 필요하지 않습니다.cli 와 cgi 를 다른 방법으로 설정할 수 있습니다.

따라서 기존 php.ini 파일 근처에 php-cli.ini 및 conf-cli.d를 만들면 cli와 cgi를 다르게 설정할 수 있습니다(cgi의 경우 php.ini와 conf.d).xdebug는 넣지 마세요.ini를 conf-cli.d로 변환합니다.

OS X에서 brew를 사용하여 composer를 설치하는 경우 다음 별칭을 사용할 수 있습니다.

alias composer="php -n $(cat $(which composer) | grep composer.phar | awk '{print $7}')"

여러 버전의 PHP를 사용하는 macports 설치를 위한 빠른 해결책은 Composer용 간단한 셸 래퍼를 작성하는 것이었습니다.

/user/local/bin/composer-nodebug.sh

#!/bin/bash

sudo mv /opt/local/var/db/php53/xdebug.ini /opt/local/var/db/php53/xdebug.NOT
sudo mv /opt/local/var/db/php54/xdebug.ini /opt/local/var/db/php54/xdebug.NOT
sudo mv /opt/local/var/db/php55/xdebug.ini /opt/local/var/db/php55/xdebug.NOT
composer $1 $2 $3 $4 $5 $6 $7
sudo mv /opt/local/var/db/php53/xdebug.NOT /opt/local/var/db/php53/xdebug.ini
sudo mv /opt/local/var/db/php54/xdebug.NOT /opt/local/var/db/php54/xdebug.ini
sudo mv /opt/local/var/db/php55/xdebug.NOT /opt/local/var/db/php55/xdebug.ini

그런 다음 다음과 같은 composer 명령을 실행합니다.

sudo composer-nodebug.sh update

결점:

  • sudo가 필요합니다(INI 파일을 chod하지 않는 한).
  • 중간에 죽이면 INI 파일이 수정됩니다.
  • 향후 PHP 버전을 추가해야 합니다.
  • 실행 중인 다른 PHP 프로세스가 영향을 받습니다.

우아하지 않고 심플해요.

(Windows)

매뉴얼을 기반으로 환경변수 사용PHPRC수 때문에 를 이노블로 할지 디세블로 할 수 를 들어, INI는 Xdebug를 이노블로 할지 디세블로 할지).composer install를 참조해 주세요.

는 Xdebug가유효하게 되어 있습니다(Xdebug는 INI는 2개).php-xdebug.ini디세이블인 Xdebug')과php.ini- 디폴트도 있습니다).

는 몇 배치에 를하고 있다.PATH어디서든 실행할 수 있도록 환경변수를 설정합니다).

Xdebug I를 활성화하려면 다음 절차를 따릅니다.

@ECHO OFF
set PHPRC=C:/path-to-php/php-xdebug.ini

호출하는 Xdebug를 비활성화하려면:

@ECHO OFF
set PHPRC=

「 」를 합니다.php --ini어떤 INI 파일이 로딩되었는지 확인할 수 있습니다.

환경변수를 사용할 수도 .PHP_INI_SCAN_DIR추가 INI 파일이 로드되는 디렉토리의 경로를 설정합니다.장점은 여러 INI 파일을 로드할 수 있다는 것입니다.

다음은 PHP5-cli 버전에서 Xdebug 경고를 제거하는 빠른 솔루션입니다.Ubuntu 14.04에서 PHP5-cli용 Xdebug 지원을 삭제했습니다.

cd /etc/cli/conf.d/

sudo rm 20-xdebug.ini

이제 PHP5-cli에서 Xdebug 경고가 사라졌습니다.

언급URL : https://stackoverflow.com/questions/31083195/disabling-xdebug-when-running-composer

반응형