커맨드 라인에서 PHP 확장을 활성화 / 비활성화하는 명령이 있습니까?


46

커맨드 라인에서 PHP 확장을 쉽게 활성화 / 비활성화하는 명령이 있습니까? (php.ini)


아니요, 그러나 구성을 구문 분석하고 수정하는 데 사용할 수있는 도구가 있습니다 (예 :) awk.
jordanm

1
php.ini에서 확장 기능을 비활성화하도록 설정 한 내용을 명령 줄에서 쉽게 알 수 있도록 알려주십시오
Rahul Patil

@RahulPatil 난 그냥 extension=x.sox를 비활성화하는 의견 입니다.
PHPst

답변:


27

데비안 기반 배포판에서 PHP5.4 +를 사용하는 경우 php5enmod를 사용하여 php5dismod를 사용하여 PHP 확장을 비활성화 할 수 있습니다.


7
이것은 /etc/php5/{apache2,cli,...}/conf.d/에 링크를 추가 / 제거함으로써 작동합니다.
Pierre-Olivier Vares

1
@ Pierre-OlivierVares이 의견은 여기서 실제로 관련된 정보였습니다.
Xatenev

14

다음을 사용하여 명령 줄에서 확장을 활성화 할 수 있습니다.

php -d extension=/path/to/extension.so

-d명령 행을 통해 ini 값을 전달하는 데 사용됩니다. 불행히도 php.ini파일에 확장자가 구성되어 있으면 명령 줄에서 확장자를 비활성화 할 수 없습니다 . (물론 다른 답변을 따를 수는 있지만 사용할 수 -d있는 php명령 이나 명령의 옵션 은 없습니다 .)


8

루 분투에서 나는 필요했다 pdo_sqlite.

수동으로 활성화하십시오.

$ sudo php5enmod pdo_sqlite

작동하지 않는 경우 확인 :

$ ls /etc/php5/mods-available

결과 목록이 없습니다 pdo_sqlite.ini. 설치해야합니다.

$ sudo apt-get install php5-sqlite

또는 php7의 경우 :

$ sudo apt-get install php7-sqlite3

확장 sqlite3은 설치 과정에서 CLI와 Apache에서 자동으로 활성화되며 이제 mods-available다음 pdo_sqlite.ini과 같은 기능이 sqlite3.ini있습니다.

다음을 사용하여 확장을 비활성화하십시오.

$ sudo php5dismod pdo_sqlite

4

-n에서 확장 프로그램이로드되지 않도록 지정할 수 있습니다 php.ini. 일부 (예 : XDebug)를 사용할 때 성능이 향상 될 수 있습니다. 예 :

php -n -r "phpinfo();"

1
호스팅 서버에서 확장 (예 : memcached)을로드하지 못하도록하는 방법은 있지만 초기에 설정되어 있습니까? 호스트 설정을 제어하지 않고 스크립트 만 제어합니다. 나는 그것이 어떻게 든 내 세션을 망칠 것이라고 의심하고 실제로 그것을 사용하지 않기 때문에 꺼져 있는지 확인하고 싶습니다 ..
userfuser

3

당신은 사용해야 -n하고 사용하여 각 필요한 확장을 추가 할-dextension

예:

php -n -dextension=json.so -dextension=phar.so composer.phar update

2

간단하게 사용할 수 있습니다

sed -i.bkp 's/^extension=x.so/# extension=x.so/' /path/of/php.ini && /etc/init.d/httpd reload

-i.bkp 백업을 php.php.bkp로 가져 와서 원본 파일에 기록

&& 첫 번째 명령이 성공하면 httpd 서비스를 다시로드하십시오.

하지만 검색 패턴이 일치하지 않을 때 sed가 종료 상태 0을 제공한다는 것을 알았습니다.

php_ini=/path/of/php.ini
__module=x.so
grep -q "^extension=$__module" $php_ini && { 
        sed -i.bkp "s/^extension=$__module/# extension=$__module/" $php_ini && 
        echo /etc/init.d/httpd reload; } || echo "cannot make requested change"

또는 아래 스크립트를 사용 및 사용 안함으로 설정할 수 있습니다.

#!/bin/bash

php_ini=/path/of/php.ini
__module="$2"


[[ ! -f $php_ini ]] && { echo "Error: Can not found $php_ini" >&2; 
                         echo "Please define php.ini path in $php_ini"; 
                         exit 1; }

[[  -z $__module ]] && { echo "Error: Please Type Module Name:" >&2; 
                          exit 1; }

show_help(){
cat <<_EOF
        Usage:    To enable :
                  $0 -ie  <modulename>

                  To disable :
                  $0 -id  <modulename>

        example:
                  $0 -i xyz.so
_EOF

}

do_enable() {
grep -Eq "# extension=$__module$" $php_ini && {
sed -i.bkp "s/^# extension\=$__module$/extension=$__module/" $php_ini &&
echo /etc/init.d/httpd reload; echo "Changes Successfully Done"; } || echo "cannot make requested change"
}

do_disable() {
grep -q "^extension=$__module" $php_ini && {
sed -i.bkp "s/^extension=$__module/# extension=$__module/" $php_ini &&
echo /etc/init.d/httpd reload; echo "Changes Successfully Done"; } || echo "cannot make requested change"
}

Main() {

case $1 in
        -ie) do_enable ;;
        -id) do_disable ;;
         *) show_help ;;
esac
}

Main $*

2
conf.d/*.ini파일에 확장자를 추가 할 수도 있습니다 . 어쩌면 약간의 수정이 필요합니까?
GHugo

예, 동일하게 변경해야합니다. 시도해 보셨습니까?
Rahul Patil

2

사용법 : phpenmod [-v ALL | php_version] [-s ALL | sapi_name] module_name [module_name_2]

따라서 phpenmod -s cli yourextension을 사용하십시오.


이 명령은 PHP5 / PHP7을 나란히 실행할 수있는 Stretch와 같은 최신 데비안 버전에서 사용됩니다.
Jacob Hume

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.