Как перезаписать некоторые настройки PHP по умолчанию?

Допустим, я установил PHP 5.5.x в Ubuntu, и он поставляется с конфигурацией по умолчанию. Я хотел бы перезаписать несколько конфигураций, но не хочу (вот откуда я знаю, что это возможно):

  • отредактируйте файл php.ini по умолчанию
  • используйте блок PHP в каждом файле .php, чтобы перезаписать их
  • использовать .htaccess файлы и директивы

Я хотел бы создать файл с именем custom-php.ini со следующими строками (в качестве примера):

; Basic configuration override
expose_php = Off
memory_limit = 512M
post_max_size = 128M
upload_max_filesize = 128M
date.timezone = UTC
max_execution_time = 120

; Error reporting
display_errors = stderr
display_startup_errors = Off
error_reporting = E_ALL

; A bit of performance tuning
realpath_cache_size = 128k

; OpCache tuning
opcache.max_accelerated_files = 32000
; Temporarily disable using HUGE PAGES by OpCache.
; This should improve performance, but requires appropriate OS configuration
; and for now it often results with some weird PHP warning:
; PHP Warning:  Zend OPcache huge_code_pages: madvise(HUGEPAGE) failed: Invalid argument (22) in Unknown on line 0
opcache.huge_code_pages=0

; Xdebug
[Xdebug]
xdebug.remote_enable = true
xdebug.remote_host   = "192.168.3.1" // this IP should be the host IP
xdebug.remote_port   = "9001"
xdebug.idekey        = "XDEBUG_PHPSTORM"

Есть ли место, где я могу записать этот файл, и значения PHP по умолчанию будут перезаписаны значениями на custom-php.ini?


person ReynierPM    schedule 23.09.2016    source источник
comment
У меня поблизости нет компьютера с Ubuntu, чтобы проверить, но нет ли там чего-то вроде /etc/php/conf.d? Вы должны иметь возможность поместить туда частичную конфигурацию, которая переопределит основной файл конфигурации.   -  person Chris    schedule 23.09.2016
comment
Не нужен ini_set(), да?   -  person The One and Only ChemistryBlob    schedule 23.09.2016
comment
@TheOneandOnlyChemistryBlob да, я не хочу добавлять такую ​​строку в каждый файл;)   -  person ReynierPM    schedule 23.09.2016
comment
@ Крис, я мог бы попробовать, но я не уверен, что это правильный путь - может быть, я ошибаюсь   -  person ReynierPM    schedule 23.09.2016
comment
Почему это не путь? Это в значительной степени то, для чего этот каталог…   -  person Chris    schedule 23.09.2016
comment
@Chris Я считаю, что ты прав, но он используется для других конфигураций, а не для перезаписи текущих, я не уверен в этом, у меня сейчас не установлена ​​​​Ubuntu, но я попробую позже дома   -  person ReynierPM    schedule 23.09.2016
comment
вы можете посмотреть на создание виртуального хоста в Apache, а затем для VH для этого сайта вы можете изменить все/некоторые из этих параметров   -  person RiggsFolly    schedule 23.09.2016
comment
На это дан ответ здесь: stackoverflow.com/questions/1391808/   -  person Gabiriele Lalasava    schedule 23.09.2016
comment
@GabirieleLalasava Если он не хочет вносить поправки в php.ini, предположительно, потому что он не хочет одинаково влиять на все сайты. КАК перекомпилировать сам PHP будет лучшим решением   -  person RiggsFolly    schedule 23.09.2016
comment
@ReynierPM, опять же, у меня нет под рукой машины с Ubuntu, чтобы проверить… но я почти уверен, что материал в conf.d/ загружается в конце основного файла конфигурации. Он должен переопределить существующие настройки. Ты пробовал это?   -  person Chris    schedule 23.09.2016
comment
Почему бы не использовать ini_set(), как было предложено. Лучше для переносимости сайта.   -  person Daniel    schedule 23.09.2016
comment
@Chris Я попробую дома, где у меня Ubuntu, я обновлю пост с результатами   -  person ReynierPM    schedule 23.09.2016
comment
@Daniel, как я уже сказал в ОП, я не хочу использовать блок PHP в каждом файле .php для их перезаписи, это означает, что я не хочу использовать ini_set()   -  person ReynierPM    schedule 23.09.2016
comment
@ Даниэль, я бы сказал, что ini_set() - это запах кода. Его почти никогда не следует использовать. PHP допускает настройку в слишком многих местах…   -  person Chris    schedule 24.09.2016
comment
@Chris - я согласен, что следует избегать использования ini_set, но при необходимости я действительно думаю, что лучше хранить все в одном файле и включать его в заголовок. Если только это не дизайн со всеми незакрепленными страницами...   -  person Daniel    schedule 24.09.2016


Ответы (3)


Да должно быть возможно. Во-первых, создайте файл PHP где-нибудь в корне вашего документа с именем info.php и поместите в него <?php phpinfo() ?>. Затем вызовите его из браузера и найдите Scan this dir for additional .ini files. В Ubuntu это, вероятно, что-то вроде /etc/php5/apache2/conf.d.

В этот каталог вы можете поместить свой собственный пользовательский ini-файл (назовите его как-нибудь вроде 99.overrides.php.ini), чтобы он анализировался последним.

В этом файле поместите любую дополнительную конфигурацию, которую вы хотите, перезапустите Apache или веб-сервер, и изменения вступят в силу.

person drew010    schedule 23.09.2016
comment
Обратите внимание, что значение Scan this dir for additional .ini files будет установлено только в том случае, если PHP был скомпилирован с аргументом --with-config-file-scan-dir. Если он говорит что-то вроде (none), вам придется перекомпилировать PHP с параметрами исправления, чтобы использовать эту функцию. - person Henry A.; 26.09.2016
comment
Это сводит меня с ума. Я добавил файл в каталог conf.d, и в соответствии с phpinfo() он проанализирован, но все же мое значение memory_limit является основным значением. Я использовал директиву [PATH=/var/www/mysite] внутри своего собственного ini-файла. Любая идея о том, почему это не имеет никакого эффекта? - person Hokascha; 01.03.2021

Если вы не используете Apache и используете CGI/FastCGI SAPI, вы можете использовать .user.ini файл, как показано ниже:

upload_max_filesize     = "300M" 
post_max_size           = "100M"
person CIRCLE    schedule 23.09.2016
comment
Из ОП в исходном вопросе: я не хочу… использовать .htaccess файлы и директивы. - person Chris; 24.09.2016
comment
Он сказал, что знает об этом методе, а не о том, что не хочет его использовать. Я настроил свой ответ, чтобы перечислить сверху вниз распространенные методы и лучшие из моего опыта. - person CIRCLE; 24.09.2016
comment
Мой комментарий включал прямую цитату из ОП: я не хочу… использовать .htaccess файлы и директивы. Я почти уверен, что ОП не хочет этого решения. - person Chris; 24.09.2016

Также интересно: https://www.howtoforge.com/how-to-specify-a-custom-php.ini-for-a-website-apache2-with-mod_php

По-видимому, вы можете установить собственный файл php.ini с помощью директивы PHPINIDir. Вы также можете указать это для каждого виртуального хоста.

<VirtualHost 1.2.3.4:80> [...] PHPINIDir /var/www/web1 [...] </VirtualHost>

Правда, только для Apache.

person Gabiriele Lalasava    schedule 26.09.2016