web-dev-qa-db-fra.com

Comment obtenir et définir les variables php.ini via un terminal

Je veux changer certaines variables php.ini (php5.6) via le terminal. Exemple: Je dois obtenir la valeur post_max_size (celle-ci est maintenant 8M), l'afficher dans le terminal, la changer en 2048M et l'afficher à nouveau.

Comment pourrais-je faire ça?

3
zwitterion

Obtenir:

grep '^post_max_size ' php.ini

Remplacer:

sed -i 's,^post_max_size =.*$,post_max_size = 2048M,' php.ini

Notez qu'il est judicieux de créer une sauvegarde de php.ini avant d'exécuter sed:

cp php.ini php.ini.bak
3
Arkadiusz Drabczyk

Je suppose que vous avez les valeurs dans votre php.ini stockées une par ligne et séparées par = avec ou sans espaces. Ni les noms de variables ni les valeurs ne contiennent un =.

Pour imprimer la valeur post_max_size (en choisir une):

<php.ini awk -F"= *" '/^ *post_max_size/{print$2}'
<php.ini sed '/^ *post_max_size/!d;s/.*= *//'
<php.ini grep -oP '^ *post_max_size *= *\K.*'

Pour changer la valeur de post_max_size en 2048M en créant une sauvegarde appelée php.ini.bak:

sed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini

Des explications

  • <php.ini awk -F"= *" '/^ *post_max_size/{print$2}'
    • <php.ini - laissez le shell ouvrir php.ini et l'affecter au stdin du programme. Cela présente un certain nombre d'avantages. Voir ici
    • -F"= *" - définissez = suivi de zéro ou de plusieurs espaces comme délimiteur de champ
    • /^ *post_max_size/{print$2} - de la ligne commençant par post_max_size champ d'impression 2
  • <php.ini sed '/^ *post_max_size/!d;s/.*= *//'
    • /^ *post_max_size/!d - delete toutes les lignes sauf celle commençant par post_max_size
    • s/.*= *// - ssubstitute tout ce qui se trouve avant = et zéro ou plusieurs espaces après celui-ci par rien (= le supprime)
  • <php.ini grep -oP '^ *post_max_size *= *\K.*'
    • -oP - print only les parties correspondantes d'une ligne correspondante et utiliser Perl-compatible expressions (PCRE)
    • ^ *post_max_size *= *\K.* - recherche une ligne commençant par post_max_size et = entourée de zéro ou plusieurs caractères d'espacement, puis supprime le texte correspondant si loin de la correspondance regex globale (\K) et correspond à tout ce qui suit
  • sed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini
    • -i.bak - change le lieu du fichier in en effectuant une sauvegarde avec l'extension .bak
    • /^ *post_max_size/… - dans la ligne commençant par post_max_size, faites
    • s/=.*/= 2048M/ - substitute = et tout ce qui suit après avec = 2048M
1
dessert