มีคำสั่งให้เปิด / ปิดใช้งานส่วนขยาย php จากบรรทัดคำสั่งหรือไม่


46

มีคำสั่งให้เปิดใช้งาน / ปิดใช้งานส่วนขยาย php ได้อย่างง่ายดายจากบรรทัดคำสั่งหรือไม่ (php.ini)


ไม่ แต่มีเครื่องมือที่คุณสามารถใช้ในการวิเคราะห์และแก้ไขการกำหนดค่า (เช่นawk)
jordanm

1
เพียงแจ้งให้เราทราบสิ่งที่คุณกำหนดค่าให้ปิดการใช้งานส่วนขยายใน php.ini เพื่อให้เราสามารถทำได้ง่าย ๆ จากบรรทัดคำสั่ง
Rahul Patil

@RahulPatil ฉันแค่แสดงความคิดเห็นextension=x.soเพื่อปิดการใช้งาน x
PHPst

คำตอบ:


27

หากคุณใช้ PHP5.4 + ใน Distro based Debian คุณสามารถใช้ 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

เมื่อวันที่ Lubuntu 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.inisqlite3.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

ใช่เราต้องทำการเปลี่ยนแปลงสำหรับสิ่งเดียวกันคุณลองทำอะไรบ้าง?
ราหุลปาติล

2

การใช้งาน: phpenmod [-v ALL | php_version] [-s ALL | sapi_name] module_name [module_name_2]

ดังนั้นใช้ phpenmod -s cli yourextension


คำสั่งนี้ใช้ในเวอร์ชัน Debian ที่ใหม่กว่าเช่นยืดซึ่ง PHP5 / PHP7 สามารถเรียกใช้แบบเคียงข้างกัน
Jacob Hume

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.