Конфигурирование zz_overrides.ini в Apache по сравнению с в Nginx

Если Вы работаете с 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 само не является эффективным, поскольку оно будет переписано в каждом обновлении).

3
задан 26 October 2018 в 18:05

1 ответ

В 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
1
ответ дан 1 December 2019 в 17:27

Другие вопросы по тегам:

Похожие вопросы: