Если Вы работаете с Nginx, и Вы хотите переопределить свои настройки PHP из внешнего файла, который не будет удален или изменился в обновлениях, можно создать a /etc/php/*/fpm/zz_overrides.ini
и помещенный Ваш ENV PHP изменяется там.
Когда я работал с Nginx, я настроил zz_overrides.ini
в моей среде путем запущения этого скрипта:
#!/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;
Теперь я возвратился, работая с Apache (в котором я никогда не делал ту задачу, и я полагаю, что это должно очень отличаться там из-за отсутствия php-fpm использования, естественно).
Как я должен сделать подобное переопределение в Apache?
Вновь прибывшие: Обратите внимание, что изменение PHP.ini само не является эффективным, поскольку оно будет переписано в каждом обновлении).
В Apache Вы могли, может использовать php_flag
директивы в virtualhost конфигурации (или a .htaccess
файл в корневом каталоге документа).
Следующий пример подражает Вашему текущему сценарию путем создания a ./conf-available/$vhost/php_overrides.conf
с директивами переопределения php на включенный virtualhost и вставляет (или обновления) Include
директива, указывающая на тот файл (пути являются стилем Debian, адаптируйтесь к своим потребностям):
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}"
Однако, так как кажется, что все Ваши виртуальные хосты используют те же переопределения PHP, было бы легче только создать файл ./conf-available/php_overrides.conf
однажды, включайте следующую строку в каждую vhost конфигурацию, и затем создайте или удалите символьные ссылки в ./conf-enabled
чтобы управлять, если это будет использоваться:
# inside /etc/apache2/sites-available/vhost1
Include /etc/apache2/conf-enabled/vhost1/*.conf
Таким образом использовать его:
cd /etc/apache2/conf-enabled
mkdir vhost1
cd vhost1
ln -s /etc/apache2/conf-available/php_overrides.conf
Прекратить использовать его:
rm /etc/apache2/conf-enabled/vhost1/php_overrides.conf