Si vous travaillez avec Nginx et que vous souhaitez remplacer vos paramètres PHP à partir d'un fichier externe qui ne sera ni supprimé ni modifié dans les mises à jour, vous pouvez créer un /etc/php/*/fpm/zz_overrides.ini
et placer votre PHP env change ici.
Lorsque j'ai travaillé avec Nginx, j'ai configuré zz_overrides.ini
dans mon environnement en exécutant ce script:
#!/bin/bash
for dir in /etc/php/*/fpm/; do
cat <<-"EOF" > "$dir"/zz_overrides.ini
[PHP]
post_max_size = 2000M
upload_max_filesize = 2000M
max_execution_time = 3000
EOF
done
ln -s /etc/php/*/fpm/zz_overrides.ini /etc/php/*/fpm/conf.d/20-zz-overrides.ini
# Enable the above php.ini extension via a symlink in conf.d;
Maintenant, je suis retourné travailler avec Apache (dans lequel je n'ai jamais fait cette tâche et je pense que cela devrait être très différent là-bas en raison du manque d'utilisation de php-fpm, bien entendu).
Comment dois-je faire de même en écrasant dans Apache?
Nouveaux arrivants: notez que changer PHP.ini n'est pas efficace car il sera réécrit à chaque mise à jour).
Dans Apache, vous pouvez utiliser les directives php_flag
dans une configuration virtualhost (ou un fichier .htaccess
dans le répertoire racine du document).
L'exemple suivant reproduit votre script actuel en créant un ./conf-available/$vhost/php_overrides.conf
avec des directives de substitution php par virtualhost activé et insère (ou met à jour) une directive Include
pointant sur ce fichier (les chemins sont de style Debian, s'adaptent à vos besoins). ):
Apache_confdir="${Apache_confdir:-/etc/Apache2}"
Apache_confavailable="${Apache_confdir}/conf-available"
overrides_name="php_overrides.conf"
overrides=(
"post_max_size = 2000M"
"upload_max_filesize 2000M"
"max_execution_time 3000"
)
# name of the directive under which the new Include directive will be placed
parentdirective_name="DocumentRoot"
parentdirective_re="^([[:space:]]*)(${parentdirective_name}[[:space:]]+.*)$"
oldpwd="$(pwd)"
cd ${Apache_confdir}/sites-enabled
for vhostconf in *.conf; do
# construct and create/overwrite the per vhost php_overrides.conf file
vhost_realpath="$(readlink -m "${vhostconf}")"
vhost_realname="${vhost_realpath##*/}"
vhost_name="${vhost_realname%*.conf}"
vhost_confdir="${Apache_confavailable}/${vhost_name}"
[[ ! -d "${vhost_confdir}" ]] && mkdir -p "${vhost_confdir}"
vhost_overrides="${vhost_confdir}/${overrides_name}"
printf "php_flag %s\n" "${overrides[@]}" > ${vhost_overrides}
# construct and insert/update the Include directive
printf -v includedirective "Include %s" "${vhost_overrides}"
include_re="^([[:space:]]+Include[[:space:]]+${vhost_overrides})$"
if grep -qE "${include_re}" "${vhostconf}"; then
sed -i "s#${include_re}# ${includedirective}#g" "${vhost_realpath}"
else
declare -a directives=()
while IFS='' read line; do
directives+=("${line}")
if [[ "${line}" =~ ${parentdirective_re} ]]; then
directives+=("${BASH_REMATCH[1]}${includedirective}")
fi
done<"${vhost_realpath}"
printf "%s\n" "${directives[@]}" > "${vhost_realpath}"
fi
done
cd "${oldpwd}"
Cependant, comme il semble que tous vos hôtes virtuels utilisent les mêmes PHP substitutions, il serait plus simple de créer un fichier ./conf-available/php_overrides.conf
une fois, d'inclure la ligne suivante dans chaque configuration vhost, puis de créer ou supprime les liens symboliques dans ./conf-enabled
pour contrôler s’il sera utilisé:
# inside /etc/Apache2/sites-available/vhost1
Include /etc/Apache2/conf-enabled/vhost1/*.conf
Donc pour l'utiliser:
cd /etc/Apache2/conf-enabled
mkdir vhost1
cd vhost1
ln -s /etc/Apache2/conf-available/php_overrides.conf
Pour arrêter de l'utiliser:
rm /etc/Apache2/conf-enabled/vhost1/php_overrides.conf