Có lệnh nào để bật / tắt phần mở rộng php từ dòng lệnh không?


46

Có lệnh nào để bật / tắt tiện ích mở rộng php dễ dàng từ dòng lệnh không? (php.ini)


Không, nhưng có những công cụ bạn có thể sử dụng để phân tích và sửa đổi cấu hình (ví dụ awk).
jordanm

1
chỉ cần cho chúng tôi biết những gì bạn định cấu hình để vô hiệu hóa tiện ích mở rộng trong php.ini để chúng tôi có thể thực hiện dễ dàng từ dòng lệnh
Rahul Patil

@RahulPatil Tôi chỉ bình luận extension=x.sođể vô hiệu hóa x.
PHP

Câu trả lời:


27

Nếu bạn đang sử dụng PHP5.4 + trên distro dựa trên Debian, bạn có thể sử dụng php5enmod để bật và php5dismod để tắt các phần mở rộng PHP.


7
Lưu ý các công trình này bằng cách thêm / gỡ bỏ các liên kết trong /etc/php5/{apache2,cli,...}/conf.d/
Pierre-Olivier Vares

1
@ Pierre-OlivierVares Nhận xét này là thông tin thực sự có liên quan ở đây.
Xatenev

14

Bạn có thể kích hoạt một phần mở rộng từ dòng lệnh bằng cách sử dụng:

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

-dđược sử dụng để truyền các giá trị ini thông qua dòng lệnh. Thật không may, không có cách nào để vô hiệu hóa một phần mở rộng trên dòng lệnh nếu nó đã được cấu hình trong php.initệp. (Tất nhiên bạn có thể làm theo các câu trả lời khác nhưng bạn không thể làm gì bằng cách sử dụng -dhoặc bất kỳ tùy chọn nào của phplệnh.)


8

Tôi cần trên Lubfox pdo_sqlite.

Kích hoạt thủ công:

$ sudo php5enmod pdo_sqlite

Nếu không làm việc, hãy kiểm tra:

$ ls /etc/php5/mods-available

Danh sách kết quả bị thiếu pdo_sqlite.ini. Chúng tôi phải cài đặt nó.

$ sudo apt-get install php5-sqlite

Hoặc cho php7:

$ sudo apt-get install php7-sqlite3

Tiện ích mở rộng sqlite3được bật tự động trong CLI và trong Apache trong quá trình cài đặt và bây giờ chúng tôi có mods-available: pdo_sqlite.ini, sqlite3.ini.

Vô hiệu hóa tiện ích mở rộng với:

$ sudo php5dismod pdo_sqlite

4

Bạn có thể chỉ định -nđể tránh mọi tiện ích mở rộng tải từ php.ini. Điều này có thể cải thiện một số hiệu suất khi bạn đang sử dụng một số (ví dụ XDebug). Ví dụ

php -n -r "phpinfo();"

1
Bất kỳ cách nào để ngăn tải một tiện ích mở rộng (như memcached) khỏi tải, trên máy chủ được lưu trữ, mặc dù nó được thiết lập ban đầu? Tôi không kiểm soát thiết lập máy chủ của mình, chỉ các tập lệnh trên đó. Tôi nghi ngờ nó bằng cách nào đó làm rối tung các phiên của tôi và muốn chắc chắn rằng nó bị tắt vì tôi không thực sự sử dụng nó ..
userfuser

3

Bạn phải sử dụng -nvà sau đó nối thêm từng tiện ích mở rộng cần thiết bằng cách sử dụng-dextension

Thí dụ:

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

2

Bạn chỉ có thể sử dụng

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

-i.bkp sao lưu dưới dạng php.php.bkp và ghi vào tệp gốc

&& nếu lệnh đầu tiên thành công thì hãy tải lại dịch vụ httpd.

nhưng tôi chỉ lưu ý rằng sed cho trạng thái thoát 0 khi tìm kiếm không khớp để bạn có thể sử dụng

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"

Hoặc bạn có thể sử dụng tập lệnh bên dưới để bật và tắt:

#!/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
Phần mở rộng cũng có thể được thêm vào trong conf.d/*.inicác tập tin. Có lẽ một số sửa đổi cần phải được thực hiện?
GHugo

Vâng, chúng tôi cần phải thay đổi cho cùng, bạn đã thử bất cứ điều gì?
Rahul Patil

2

cách sử dụng: phpenmod [-v ALL | php_version] [-s ALL | sapi_name] module_name [module_name_2]

Vì vậy, sử dụng phpenmod -s cli yourextension


Lệnh này được sử dụng trong các phiên bản Debian mới hơn, như Stretch, trong đó PHP5 / PHP7 có thể được chạy song song.
Jacob Hume

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.