Создание файла конфигурации в PHP. Создание файла конфигурации в PHP Отключить Javascript присоединение

Каким-то образом вы случайно удалили файл config.php вашего форума, и теперь ваша конференция не работает, или же во время установки не записался config.php вследствие некорректных настроек прав доступа к файлам. В обоих случаях файлы и база данных по-прежнему присутствуют и функциональны, они просто не могут подключиться друг к другу. Не стоит паниковать и бросаться переустанавливать конференцию. сonfig.php очень легко можно создать вручную, если у вас под рукой есть установочные данные для подключения к базе данных.

Структура и восстановление файла config.php

Итак, давайте рассмотрим создание нового config.php .

Чтобы создать новый файл config.php, необходимо использовать текстовые редакторы для Windows, такие как Notepad (блокнот) или лучше текстовые простые редакторы, например Notepad++ или Notepad2.

Откройте текстовый редактор и создайте новый файл.
В этот файл вставьте следующий код:

Теперь, когда у вас есть шаблон конфигурационного файла, вы должны отредактировать различные его части, необходимые для подключения к вашей базе данных.

Стоит отметить, что если вы не знаете параметры, необходимые для подключения к вашей базе, вам придется искать поддержку у вашего хостера. Почти во всех случаях эти параметры будут такими же, как и те, что вы использовали при первоначальной установке форума.

$dbms = "mysql"; замените mysql в соответствии с типом используемой базы данных. Можете использовать следующие типы:
mysql
mysqli
firebird
mssql
mssql_odbc
oracle
postgres
sqlite

$dbhost = "database host/domain"; замените database host/domain на адрес хоста или доменный адрес сервера вашей базы данных. Во многих случаях это может быть localhost, но лучше об этом справиться у вашего провайдера. Примеры использования:
chubais_sobaka.sveta.net:6603
localhost
dbrs.sigmanet.com

$dbport = "database port if not default"; замените database port if not default на номер порта сервера базы данных, который используется для входящих соединений. Если сервер использует порт по умолчанию, оставьте это поле пустым. Вам необходимо ввести какое-то другое значение, если сервер базы данных использует другой порт, отличный от порта по умолчанию.

$dbname = "database name"; замените database name на имя базы данных, которую вы указали при установке конференции phpBB3. Если у вас есть доступ к базам данных посредством например PhpMyAdmin, вы сможете узнать его оттуда, в противном случае обратитесь за помощью к вашему провайдеру.

$dbuser = "database user name"; замените user name на значение учетной записи пользователя базы данных. Во всех случаях для подключения к базе данных требуется учетная запись пользователя, которая используется для подключения к ней.

$dbpasswd = "database password"; замените database password на пароль к учетной записи пользователя базы данных.

$table_prefix = "database table prefix"; замените database table prefix на префикс таблиц базы данных. По умолчанию, если вы не меняли префикс при установке, он будет phpbb_ , однако возможно вы его изменили, поэтому проверьте его, подключившись к базе данных через phpMyAdmin.

$acm_type = "file";
$load_extensions ="";
@DEFINE ("PHPBB_INSTALLED", true);

//@DEFINE ("DEBUG", true); NB: если вы раскомментируете (удалив //) эти строки, то вам станет доступна дополнительная отладочная информация, например вы будете получать сообщения об ошибках в синтаксисе сценариев php, если они где-то были допущены.
//@DEFINE ("DEBUG_EXTRA", true);

После завершения редактирования файла сохраните его под именем config.php , убедившись, что текстовый редактор не сохранил его как config.txt или config.php.txt.

Теперь у вас есть ваш новый config.php, который необходимо загрузить с помощью FTP-клиента. Он должен быть загружен в папку, где установлен сам форум phpBB3, в том же самом месте, что и файл common.php.

В большинстве случаев FTP-клиент установит правильные права доступа к файлам, но вы должны убедиться, что на файл установлены права 644 (chmod 644).

Помните, что при создании config.php вы можете не иметь ничего, кроме исходных тегов . Между ними могут быть пустые строки или пробелы, но абсолютно ничего не может находиться за пределами тегов PHP

Файл wp-config.php важнейший файл CMS WordPress. Файл wp-config.php определяет основные функциональные задачи движка WP, начиная от принципиальной функции, взаимодействия с базой данных и хостингом сайта и заканчивая, дополнительной настройкой, управления мусорной корзиной сайта.

Напомню, что первый раз вы сталкиваетесь с файлом wp-config.php при . Сразу после закачивания файлов CMS WordPress в каталог сайта на свой хостинг, нужно переименовать файл wp-config-sample.php в файл wp-config.php . После переименования файл wp-config.php редактируется под данные вашего хостинга.

Примечание: Уже давно не требуется отдельно редактировать файл wp-config. Параметры , вводятся непосредственно из браузера при установке CMS.

Важно! Не используйте для редактирования файлов wordpress текстовыми редакторами типа Microsoft Word. Используйте редакторы с элементарными режимами форматирования текста. Для этих целей подходит блокнот Windows, но лучшим редактором для файлов WP остается (для меня конечно) Notepad++.

Примечание: При обновлении системы пользовательские изменения в файле wp-config.php пропадут.

Обязательные изменения файла wp-config.php при установке WordPress

Прежде всего, при установке WordPress необходимо ввести в файл wp-config.php параметры вашей базы данных MySQL, созданной для сайта:

  • Имя базы данных для WordPress;

(‘DB_NAME’, ‘database_name_here’)

  • Имя пользователя MySQL;

(‘DB_USER’, ‘username_here’)

  • Пароль к базе данных MySQL;

(‘DB_PASSWORD’, ‘password_here’)

  • Имя сервера MySQL;

(‘DB_HOST’, ‘localhost’)

Имя базы, имя пользователя и пароль вы сами задаете при создании базы данных на хостинге. Имя сервера MySQL должен предоставить хостинг провайдер. (Не путайте имя сервера MySQL с именем сервера хостинга). Обычно имя сервера MySQL ‘localhost’, но это может быть и IP адрес, где расположили сервер MySQL.

Эти изменения файла wp-config.php достаточны для удачной установке WP. Все изменения в файле wp-config.php можно сделать, как до закачки WordPress на хостинг у себя на компьютере, так после закачки, войдя в каталог по FTP.

Но есть в базовой настройке файла wp-config.php один пункт, на который не обращаешь внимание при первой установке WordPress. Изменение этого пункта позволяет сделать несколько сайтов WordPress на одной базе данных MySQL.

Изменение префикса базы данных в файле wp-config.php

Если на вашем хостинге ограничено количество создаваемых баз данных, то для их экономии можно создавать несколько сайтов WordPress на одной базе данных (лучше ограничиться двумя сайтами).

При установке второго WordPress на одну базу данных, вводятся все параметры прежней базы данных, а в строке «Префикс таблиц в базе данных WordPress» вместо стандартного префикса , вписываем любой разумно читаемый префикс. Используем только нижний регистр, латинские буквы и арабские цифры. Заканчивать префикс нужно знаком подчеркивания [_]. После изменения префикса в wp-config.php можно «заливать» файлы второго сайта WP на хостинг. Отмечу, что второй сайт нужно устанавливать в новую папку, заранее созданного субдомена.

Примечание: Говоря о префиксе базы данных, следует отметить, что для обеспечения серьезной безопасности сайта WP рекомендуется изначально на любой другой, рекомендовано не более 4 символов. Почему именно 4, не знаю, у меня есть префиксы из 6 знаков по типу пароля.

Ключи безопасности для шифрования доступа к файлам cookies пользователя

Файл wp-config.php WordPress кроме конфигурации системы, является первым рубежом безопасности системы. Wordpress предлагает установить в файле 8 ключей для аутентификации пользователя. ‘AUTH_KEY’, ‘SECURE_AUTH_KEY’, ‘LOGGED_IN_KEY’, ‘NONCE_KEY’, ‘AUTH_SALT’, ‘SECURE_AUTH_SALT’, ‘LOGGED_IN_SALT’, ‘NONCE_SALT’. Без этих ключей wordpress будет прекрасно работать, но в безопасности сайта образуется большая брешь. Вводить ключи нужно один раз после установки Wordpress. Для генерации имени ключей можно воспользоваться сервисом ключей WordPress, который указан в комментариях файла. При открытии этого адреса вы увидите 8 ключей, которые последовательно нужно скопировать и вставить в файл wp-config.php. При обновлении этой страницы, ключи меняются.

Изменение файла wp-config.php для дополнительной настройки сайта WordPress

Файл wp-config.php важен не только основными настройками, но и интересен дополнительными настройками которые могут улучшить работу сайта (но если не улучшить, так изменить точно). Вот несколько из них:

Изменить паку языковой локализации WP

define("WPLANG", "ru_RU"); define("LANGDIR", "mylanguagedirectory"); //Если языковой файл загружен не в папку languages .

Изменение очистки мусора сайта

Вся удаляемая с сайта информация хранится на сайте в течении 30 дней (по умолчанию). Это время можно сократить или увеличить.

Define("EMPTY_TRASH_DAYS", 30); // 30 days

Отключить хранение удаленных файлов

define("EMPTY_TRASH_DAYS", 0); // Мусора нет нигде.

Вы можете переместить или установить wordpress не в корневую папку, а предположим в папку «blog». Чтобы перемещение сайта не отразилось на адресах в выдаче редактированием файла config.php можно указать новые локальные пути ко всем каталогам системы («wp-content», «plugins» и т.п). Для каталога «wp-content» нужно установить для WP_CONTENT_DIR новый локальный путь к каталогу. Все пути указываются относительные, от корневой папки сайта.

Например,

Define ("WP_CONTENT_DIR", $_SERVER["DOCUMENT_ROOT"] . "/blog/wp-content");

Можно указать опцией WP_CONTENT_URL не относительный, а полный путь URI блога для этого каталога. Например:

Define("WP_CONTENT_URL", "http://example/blog/wp-content");

Можно изменить путь к папке с плагинами и установить опцией WP_PLUGIN_DIR локальный путь к этому каталогу. Например:

Define("WP_PLUGIN_DIR", $_SERVER["DOCUMENT_ROOT"] . "/blog/wp-content/plugins’);

Правда стоит отметить, что изменении пути к каталогу «plugin», может возникнуть проблема с некоторыми плагинами.

Редактирование config.php можно изменить интервал автосохранения WP

При редактировании статей, WordPress использует Ajax для автоматического сохранения изменений статьи. То есть, во время редактирования статьи система автоматом сохраняет сделанные изменения. Можно увеличить этот параметр, установив более длительные задержки между автосохранениями. Также можно его уменьшить. По умолчанию значение автосохранения составляет 60 секунд. Если вы не видите эту опцию в файле wp-config.php , то значит применено значение по умолчанию.

Define("AUTOSAVE_INTERVAL", 60); // Автосохрание каждые 60 секунд;

Ограничить количество ревизий записи

Можно ограничить количество возможных редакций материалов.

Define("WP_POST_REVISIONS", 5);// 5 -количество возможных редакций материалов.

Сохранение копий редактируемых записей

WordPress по умолчанию сохраняет все копии при каждом редактировании статей и страниц. Это позволяет при необходимости откатываться к предыдущим версиям статей и страниц. Если этого не требуется, можно отключить сохранение копий или ограничить их число.

Отключить сохранение отредактированных записей можно следующей строкой:

define("WP_POST_REVISIONS", false);

Указать определенное число отредактированных записей можно так

Define("WP_POST_REVISIONS", 3);

Число сохраняемых ревизий указывается целым числом. Например, 3 или 5 или 7.

Отладка системы WordPress

Опции WP_DEBUG управляет отображением некоторых ошибок и предупреждений. Если этот параметр отсутствует в файле wp-config.php , то значение считается ложным. Чтобы опцию включить нужно добавить в код следующие строки:

Define("WP_DEBUG", true); define("WP_DEBUG", false);

Для того чтобы WordPress позволил вам изменять некоторые из встроенных скриптов JavaScript, нужно позволить (true) WordPress следующие опции:

Define("SCRIPT_DEBUG", true);

Добавление этой строки в wp-config.php позволит вам редактировать ;;.

Управление Javascript в WordPress

В WordPress все встроенные Javascript файлы объединяются в один URL. Это делается для ускорения работы сайта. Но если Javascript не может работать в Вашей hand-up области сайта (администрировании), вы можете попробовать отключить эту функцию (false):

Define("CONCATENATE_SCRIPTS", false);

Если вы получите сообщение «разрешенный объем памяти байт исчерпаны хххххх», то значит, исчерпан лимит памяти выделенной для PHP. По умолчанию это 32 Мбайта (смотреть код вначале файла wp-setting.php ). Это объем памяти только для WordPress, а не для приложений.

Если ваш хостинг не возражает против увеличения памяти для PHP, то можно указать wordpress ,использовать больший объем памяти. Например:

Увеличение PHP памяти до 64МВ
define("WP_MEMORY_LIMIT", "64M");
Увеличение PHP памяти до 96МВ
define("WP_MEMORY_LIMIT", "96M");

Хочется отметить, что многие устанавливают лимит памяти для PHP в 8 мегабайт.

При помощи опции

Define("WP_ALLOW_REPAIR", true);

Можно включить автоматическую оптимизацию баз данных WP.

ВНИМАНИЕ: Прочтите перед редактированием этой страницы.

Пожалуйста, не указывайте в данной статье параметры своего собственного сайта, поскольку при этом вы сообщите пароль от своей базы данных всему миру, но сайт не запустите. Спасибо.

Одним из шагов при установке WordPress является внесение в файл wp-config.php параметров, необходимых для доступа к базе данных MySQL.

Этот файл, wp-config.php , не содержится в скачиваемой копии WordPress; вам потребуется его создать. В качестве примера можно использовать файл wp-config-sample.php . Ниже представлены расширенные настройки и примеры.

Для изменения файла wp-config.php вам потребуется следующая информация:

Имя базы данных Имя базы данных для WordPress Имя пользователя базы данных Имя пользователя для доступа к базе данных Пароль к базе данных Пароль пользователя для доступа к базе данных Сервер базы данных Имя сервера базы данных

Если WordPress установлен вашим хостинг-провайдером, узнайте эту информацию в службе поддержки. Если у вас свой собственный или хостинг, вы получите эту информацию в результате .

Настройка базы данных

Важно: никогда не используйте текстовые редакторы вроде Microsoft Word для изменения файлов WordPress!

Найдите в корневом каталоге WordPress файл и откройте его в .

Исходный wp-config-sample.php

ЗАМЕЧАНИЕ: It won"t change the Database value though, and the url will revert to the old database value if this line is removed from wp-config. to change the siteurl value in the database.

If WordPress is installed into a directory called "wordpress" for the domain example.com, define WP_SITEURL like this:

Define("WP_SITEURL", "http://example.com/wordpress");

Dynamically set WP_SITEURL based on $_SERVER["HTTP_HOST"]

Define("WP_SITEURL", "http://" . $_SERVER["HTTP_HOST"] . "/path/to/wordpressp");

ЗАМЕЧАНИЕ: A safer alternative for some installations would be to use the server-generated SERVER_NAME instead of the php/user-generated HTTP_HOST which is created dynamically by php based on the value of the HTTP HOST Header in the request, thus possibly allowing for file inclusion vulnerabilities. SERVER_NAME is set by the server configuration and is static.

Dynamically set WP_SITEURL based on $_SERVER["SERVER_NAME"]

Define("WP_SITEURL", "http://" . $_SERVER["SERVER_NAME"] . "/path/to/wordpressp");

Адрес блога (URL)

WP_HOME is another wp-config.php option added in WordPress . Similar to WP_SITEURL, WP_HOME overrides the value for home but does not change it permanently. home is the address you want people to type in their browser to reach your WordPress blog. It should include the http:// part and should not have a slash "/ " at the end.

Define("WP_HOME", "http://example.com/wordpress");

В WordPress версии 2.5, установка WP_DEBUG в true также поднимает уровень сообщений об ошибках на E_ALL и активирует предупреждения, когда устаревшие функции или файлы используются; в противном случае, WordPress устанавливает уровень сообщений об ошибках в E_ALL ^ E_NOTICE ^ E_USER_NOTICE .

Отключить Javascript присоединение

Чтобы результатам заканчиваться более быстрой административной областью, все файлы Javascript являются присоединёнными в один URL. Если Javascript не в состоянии работать в вашей административной области, вы можете попробовать отключить эту функцию:

Define("CONCATENATE_SCRIPTS", false);

Настройка лога ошибок

Because wp-config.php is loaded for every page view not loaded from a cache file, it is an excellent location to set php ini settings that control your php installation. This is useful if you don"t have access to a php.ini file, or if you just want to change some settings on the fly.

Here is an example that turns php error_logging on and logs them to a specific file. If WP_DEBUG is defined to true, the errors will also be saved to this file. Just place this above any require_once or include commands.

@ini_set("log_errors","On"); @ini_set("display_errors","Off"); @ini_set("error_log","/home/example.com/logs/php_error.log"); /* That"s all, stop editing! Happy blogging. */

Another example of logging errors, as suggested by Mike Little on the wp-hackers email list :

/** * This will log all errors notices and warnings to a file called debug.log in * wp-content (if Apache does not have write permission, you may need to create * the file first and set the appropriate permissions (i.e. use 666)) */ define("WP_DEBUG", true); define("WP_DEBUG_LOG", true); define("WP_DEBUG_DISPLAY", false); @ini_set("display_errors",0);

Увеличение памяти для PHP

define("FS_CHMOD_DIR", (0755 & ~ umask())); define("FS_CHMOD_FILE", (0644 & ~ umask()));

Константы для обновления WordPress

You should define as few of the below constants needed to correct your update issues.

The most common causes of needing to define these are:

  • Host running with a special installation setup involving Symlinks, You may need to define the path-related constants (FTP_BASE, FTP_CONTENT_DIR, and FTP_PLUGIN_DIR), Often defining simply the base will be enough.
  • Certain PHP installations shiped with a PHP FTP Extension which is incompatible with certain FTP Servers, under these rare situations, you may need to define FTP_METHOD to "ftpsockets"

The following are valid constants for WordPress updates:

  • FS_METHOD forces the filesystem method. It should only be "direct", "ssh", "ftpext", or "ftpsockets". Generally, You should only change this if you are experiencing update problems, If you change it, and it doesnt help change it back/remove it , Under most circumstances, setting it to "ftpsockets" will work if the automatically chosen method does not.
    • (Primary Preference) "Direct" forces it to use Direct File I/O requests from within PHP, this is fraught with opening up security issues on poorly configured hosts, This is chosen automatically when appropriate.
    • (Secondary Preference) "ssh" is to force the usage of the SSH PHP Extension.
    • (3rd Preference) "ftpext" is to force the usage of the FTP PHP Extension for FTP Access, and finally
    • (4th Preference) "ftpsockets" utilises the PHP Sockets Class for FTP Access.
  • FTP_BASE is the full path to the "base"(ABSPATH) folder of the WordPress installation.
  • FTP_CONTENT_DIR is the full path to the wp-content folder of the WordPress installation.
  • FTP_PLUGIN_DIR is the full path to the plugins folder of the WordPress installation.
  • FTP_PUBKEY is the full path to your SSH public key.
  • FTP_PRIKEY is the full path to your SSH private key.
  • FTP_USER is either user FTP or SSH username. Most likely these are the same, but use the appropriate one for the type of update you wish to do.
  • FTP_PASS is the password for the username entered for FTP_USER . If you are using SSH public key authentication this can be omitted.
  • FTP_HOST is the hostname:port combination for your SSH/FTP server. The default FTP port is 21 and the default SSH port is 22, These do not need to be mentioned.
  • FTP_SSL TRUE for SSL-connection if supported by the underlying transport , Not available on all servers. This is for "Secure FTP" not for SSH SFTP.
define("FS_METHOD", "ftpext"); define("FTP_BASE", "/path/to/wordpress/"); define("FTP_CONTENT_DIR", "/path/to/wordpress/wp-content/"); define("FTP_PLUGIN_DIR ", "/path/to/wordpress/wp-content/plugins/"); define("FTP_PUBKEY", "/home/username/.ssh/id_rsa.pub"); define("FTP_PRIKEY", "/home/username/.ssh/id_rsa"); define("FTP_USER", "username"); define("FTP_PASS", "password"); define("FTP_HOST", "ftp.example.org"); define("FTP_SSL", false);

Включение SSH Обновление доступа

To enable SSH2 as an upgrade option you will need to install the pecl SSH2 extension. To install this library you will need to issue a command similar to the following or talk to your web hosting provider to get this installed:

Pecl install ssh2

After installing the pecl ssh2 extension you will need to modify your php configuration to automatically load this extension.

pecl is provided by the pear package in most linux distributions. To install pecl in Redhat/Fedora/CentOS:

Yum -y install php-pear

To install pecl in Debian/Ubuntu:

Apt-get install php-pear

It is recommended to use a private key that is not pass-phrase protected. There have been numerous reports that pass phrase protected private keys do not work properly. If you decide to try a pass phrase protected private key you will need to enter the pass phrase for the private key as FTP_PASS, or entering it in the "Password" field in the presented credential field when installing updates.

If you"re still not clear on how to use SSH for upgrading or installing WordPress/plugins, read through this tutorial .

Альтернатива Cron

Use this, for example, if scheduled posts are not getting published. According to Otto"s forum explanation , "this alternate method uses a redirection approach, which makes the users browser get a redirect when the cron needs to run, so that they come back to the site immediately while cron continues to run in the connection they just dropped. This method is a bit iffy sometimes, which is why it"s not the default."

Define("ALTERNATE_WP_CRON", true);

Дополнительно задаваемые константы

Here are additional constants that can be defined, but probably shouldn"t be. The Cookie definitions are particularly useful if you have an unusual domain setup.

Define("COOKIEPATH", preg_replace("|https?://[^/]+|i", "", get_option("home") . "/")); define("SITECOOKIEPATH", preg_replace("|https?://[^/]+|i", "", get_option("siteurl") . "/")); define("ADMIN_COOKIE_PATH", SITECOOKIEPATH . "wp-admin"); define("PLUGINS_COOKIE_PATH", preg_replace("|https?://[^/]+|i", "", WP_PLUGIN_URL)); define("TEMPLATEPATH", get_template_directory()); define("STYLESHEETPATH", get_stylesheet_directory()); define("DISABLE_WP_CRON", true);

The configuration file (php.ini) is read when PHP starts up. For the server module versions of PHP, this happens only once when the web server is started. For the CGI and CLI versions, it happens on every invocation.

php.ini is searched for in these locations (in order):

  • SAPI module specific location (PHPIniDir directive in Apache 2, -c command line option in CGI and CLI, php_ini parameter in NSAPI, PHP_INI_PATH environment variable in THTTPD)
  • The PHPRC environment variable. Before PHP 5.2.0, this was checked after the registry key mentioned below.
  • As of PHP 5.2.0, the location of the php.ini file can be set for different versions of PHP. The root of the registry keys depends on 32- or 64-bitness of the installed OS and PHP. For 32-bit PHP on a 32-bit OS or a 64-bit PHP on a 64-bit OS use [(HKEY_LOCAL_MACHINE\SOFTWARE\PHP] for 32-bit version of PHP on a 64-bit OS use ] instead. For same bitness installation the following registry keys are examined in order: , and , where x, y and z mean the PHP major, minor and release versions. For 32 bit versions of PHP on a 64 bit OS the following registry keys are examined in order: , and , where x, y and z mean the PHP major, minor and release versions. If there is a value for IniFilePath in any of these keys, the first one found will be used as the location of the php.ini (Windows only).
  • or , value of IniFilePath (Windows only).
  • Current working directory (except CLI).
  • The web server"s directory (for SAPI modules), or directory of PHP (otherwise in Windows).
  • Windows directory (C:\windows or C:\winnt) (for Windows), or --with-config-file-path compile time option.

If php-SAPI.ini exists (where SAPI is the SAPI in use, so, for example, php-cli.ini or php-apache.ini), it is used instead of php.ini . The SAPI name can be determined with php_sapi_name() .

The Apache web server changes the directory to root at startup, causing PHP to attempt to read php.ini from the root filesystem if it exists.

Using environment variables can be used in php.ini as shown below.

Example #1 php.ini Environment Variables

; PHP_MEMORY_LIMIT is taken from environment memory_limit = ${PHP_MEMORY_LIMIT}

The php.ini directives handled by extensions are documented on the respective pages of the extensions themselves. A list of the core directives is available in the appendix. Not all PHP directives are necessarily documented in this manual: for a complete list of directives available in your PHP version, please read your well commented php.ini file. Alternatively, you may find from Git helpful too.

Example #2 php.ini example

; any text on a line after an unquoted semicolon (;) is ignored ; section markers (text within square brackets) are also ignored ; Boolean values can be set to either: ; true, on, yes ; or false, off, no, none register_globals = off track_errors = yes ; you can enclose strings in double-quotes include_path = ".:/usr/local/lib/php" ; backslashes are treated the same as any other character include_path = ".;c:\php\lib"

Since PHP 5.1.0, it is possible to refer to existing .ini variables from within .ini files. Example: open_basedir = ${open_basedir} ":/new/dir" .

Scan directories

It is possible to configure PHP to scan for .ini files in a directory after reading php.ini . This can be done at compile time by setting the --with-config-file-scan-dir option. In PHP 5.2.0 and later, the scan directory can then be overridden at run time by setting the PHP_INI_SCAN_DIR environment variable.

It is possible to scan multiple directories by separating them with the platform-specific path separator (; on Windows, NetWare and RISC OS; : on all other platforms; the value PHP is using is available as the PATH_SEPARATOR constant). If a blank directory is given in PHP_INI_SCAN_DIR , PHP will also scan the directory given at compile time via --with-config-file-scan-dir .

Within each directory, PHP will scan all files ending in .ini in alphabetical order. A list of the files that were loaded, and in what order, is available by calling php_ini_scanned_files() , or by running PHP with the --ini option.

Assuming PHP is configured with --with-config-file-scan-dir=/etc/php.d, and that the path separator is:... $ php PHP will load all files in /etc/php.d/*.ini as configuration files. $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php PHP will load all files in /usr/local/etc/php.d/*.ini as configuration files. $ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php PHP will load all files in /etc/php.d/*.ini, then /usr/local/etc/php.d/*.ini as configuration files. $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php PHP will load all files in /usr/local/etc/php.d/*.ini, then /etc/php.d/*.ini as configuration files.

Changelog

Version Description
7.0.0 Hash marks (# ) are no longer recognized as comments.
5.3.0 Hash marks (# ) should no longer be used as comments and will throw a deprecation warning if used.
5.2.0 The PHP_INI_SCAN_DIR environment variable can be set to override the scan directory set via the configure script.
5.1.0 It is possible to refer to existing .ini variables from within .ini files.

I am rather surprised at the accepted answer here, and the number of upvotes it has garnered. With the exception of the answer by Marcio Mazzucato, there is no discussion of the relative merits / weaknesses of any of multiple approaches.

The options I see are:

File based mechanisms

These require that your code look in specific locations to find the ini file. This is a difficult problem to solve and one which always crops up in large PHP applications. However you will likely need to solve the problem in order to find the PHP code which gets incorporated / re-used at runtime.

Common approaches to this are to always use relative directories, or to search from the current directory upwards to find a file exclusively named in the base directory of the application.

Common file formats used for config files are PHP code, ini formatted files, JSON, XML, YAML and serialized PHP

PHP code

This provides a huge amount of flexibility for representing different data structures, and (assuming it is processed via include or require) the parsed code will be available from the opcode cache - giving a performance benefit.

The infrastucture supports caching, replication and distribution. Hence it works well for very large infrastructures.

Version Control systems

Configuration, like code should be managed and version controlled - hence getting the configuration directly from your VC system is a viable solution. But often this comes with a significant performance overhead hence caching may be advisable.