Спестете 15% от всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код: Skills За начало
Заглавия
Linux Администрация

Конфигуриране на php.ini файла: Пълно ръководство за оптимизиране на PHP на вашия сървър

Файлът php.ini е главният конфигурационен файл за PHP — гръбнакът на почти всяко съвременно уеб приложение. Независимо дали работите с WordPress, Laravel, Magento или персонализирано приложение, разбирането как правилно да конфигурирате php.ini може драматично да подобри производителността на вашия сървър, да затегне сигурността и да осигури безпроблемна съвместимост със вашия софтуерен стек.

Това всеобхватно ръководство ви преведе през всичко, което трябва да знаете: какво прави php.ini, как да го намерите, как да го редактирате безопасно и как да проверите дали вашите промени работят правилно.

1. Какво е php.ini и защо е важно?

Файлът php.ini е обикновен текстов конфигурационен файл, който PHP чете всеки път, когато се инициализира. Той съдържа стотици директиви — двойки ключ-стойност, които контролират практически всеки аспект на поведението на PHP по време на изпълнение, включително:

  • Разпределение на памет за скриптове
  • Ограничения на качване на файлове и размери на POST данни
  • Нива на докладване на грешки и регистрация
  • Настройки на управление на сесии
  • Зареждане на разширения (например PDO, cURL, OPcache)
  • Ограничения на сигурност като disable_functions и open_basedir
  • Ограничения на времето на изпълнение за предотвратяване на неконтролирани скриптове

Правилното конфигуриране на тези настройки не е просто въпрос на удобство — то директно влияе на стабилността на вашето приложение, позицията му по отношение на сигурност и потребителския опит. Неправилно конфигурирани PHP настройки са водеща причина за грешки в приложенията, неудачни качвания на файлове, срутвания поради изчерпване на памет и експлоатируеми уязвимости в сигурността.

Ако хостирате вашите PHP приложения на план VPS Hosting, имате пълен root достъп за свободно модифициране на php.ini — което ви дава пълен контрол над вашата PHP среда.

2. Намиране на php.ini файла

Местоположението на php.ini варира в зависимост от вашата операционна система, версия на PHP и използвания Server API (SAPI) (Apache mod_php, PHP-FPM или CLI). Ето три надежни метода за намирането му.

Метод 1: Използване на командния ред (най-бърз метод)

Отворете вашия терминал или се свържете чрез SSH и изпълнете:

php --ini

Примерен резултат:

Configuration File (php.ini) Path: /etc/php/8.2/cli
Loaded Configuration File:         /etc/php/8.2/cli/php.ini
Scan for additional .ini files in: /etc/php/8.2/cli/conf.d
Additional .ini files parsed:      /etc/php/8.2/cli/conf.d/10-opcache.ini, ...

> Важно: PHP често има отделни php.ini файлове за различни SAPI. Версията CLI (/etc/php/8.2/cli/php.ini) се използва при изпълнение на PHP от командния ред, докато версията Apache или PHP-FPM (/etc/php/8.2/apache2/php.ini или /etc/php/8.2/fpm/php.ini) се използва за уеб заявки. Винаги редактирайте правилния за вашия случай.

Метод 2: Използване на phpinfo() в браузър

Този метод разкрива точно кой php.ini файл вашият уеб сървър зарежда — което може да се различава от версията CLI.

Стъпка 1: Създайте нов файл в директорията на вашия уеб сайт:

sudo nano /var/www/html/info.php

Стъпка 2: Добавете следното съдържание:

<?php
phpinfo();
?>

Стъпка 3: Запазете файла, след това отворете браузъра си и навигирайте до:

http://yourdomain.com/info.php

Стъпка 4: Потърсете реда “Loaded Configuration File” близо до началото на резултата. Той ще покаже пълния път до активния php.ini файл.

> ⚠️ Предупреждение за сигурност: Изтрийте info.php веднага след употреба. Този файл разкрива чувствителни детайли за конфигурацията на сървъра, които нападателите могат да експлоатират.

sudo rm /var/www/html/info.php

Метод 3: Използване на php -r (бърз еднолинейник)

php -r "echo php_ini_loaded_file();"

Това отпечатва пътя на зареденото php.ini файл директно в вашия терминал — не е необходимо създаване на файл.

Често срещани местоположения на php.ini по платформа

Платформа / КонфигурацияТипично местоположение на php.ini
Ubuntu/Debian + Apache (PHP 8.2)/etc/php/8.2/apache2/php.ini
Ubuntu/Debian + PHP-FPM (PHP 8.2)/etc/php/8.2/fpm/php.ini
Ubuntu/Debian + CLI (PHP 8.2)/etc/php/8.2/cli/php.ini
CentOS/RHEL + Apache/etc/php.ini
cPanel/WHM/usr/local/lib/php.ini
Windows (XAMPP)C:xamppphpphp.ini
macOS (Homebrew PHP 8.2)/opt/homebrew/etc/php/8.2/php.ini

3. Редактиране на php.ini файла

Стъпка 1: Първо създайте резервно копие

Преди да направите промени, винаги създайте резервно копие:

sudo cp /etc/php/8.2/apache2/php.ini /etc/php/8.2/apache2/php.ini.bak

Това ви позволява да бързо възстановите оригиналната конфигурация, ако нещо се обърка.

Стъпка 2: Отворете файла в текстов редактор

Използвайте nano за начинаещо-приятелски опит:

sudo nano /etc/php/8.2/apache2/php.ini

Или използвайте vim за по-напреднало редактиране:

sudo vim /etc/php/8.2/apache2/php.ini

Стъпка 3: Навигирайте и редактирайте директиви

Файлът php.ini е голям (често 1500+ редове). Използвайте функцията за търсене на вашия редактор, за да преминете към конкретни директиви:

  • В nano: Натиснете CTRL + W, след това напишете името на директивата (например memory_limit)
  • В vim: Натиснете /, след това напишете името на директивата

Стъпка 4: Запазете и излезте

  • nano: Натиснете CTRL + X, след това Y, след това Enter
  • vim: Натиснете ESC, напишете :wq, след това натиснете Enter

4. Ключни php.ini директиви обяснени

Ето детайлен преглед на най-важните php.ini директиви, които трябва да знаете и конфигурирате:

Памет и лимити на ресурсите

; Maximum memory a single PHP script can allocate
memory_limit = 256M

; Maximum time (in seconds) a script is allowed to run
max_execution_time = 60

; Maximum time PHP will spend parsing request data
max_input_time = 120

; Maximum number of input variables (important for complex forms)
max_input_vars = 3000

Настройки за качване на файлове

; Whether file uploads are permitted
file_uploads = On

; Maximum size of an individual uploaded file
upload_max_filesize = 64M

; Maximum size of all POST data (must be >= upload_max_filesize)
post_max_size = 64M

; Maximum number of files that can be uploaded simultaneously
max_file_uploads = 20

> Правило на палеца: post_max_size трябва винаги да бъде равна на или по-голяма от upload_max_filesize. Ако post_max_size е по-малка, качванията ще се провалят мълчаливо.

Докладване на грешки и регистриране

; ---- DEVELOPMENT ENVIRONMENT ----
; Show all errors on screen (never use in production)
error_reporting = E_ALL
display_errors = On
display_startup_errors = On

; ---- PRODUCTION ENVIRONMENT ----
; Log errors to a file, never display them to users
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/error.log

Управление на сесии

; Where session data is stored on the server
session.save_path = "/var/lib/php/sessions"

; Session cookie lifetime in seconds (0 = until browser closes)
session.cookie_lifetime = 0

; Prevent JavaScript from accessing session cookies (XSS protection)
session.cookie_httponly = On

; Only send session cookies over HTTPS
session.cookie_secure = On

; Strict session ID mode (prevents session fixation attacks)
session.use_strict_mode = On

OPcache (Ускорител на производителност)

OPcache драматично подобрява производителността на PHP чрез съхраняване на предкомпилиран байткод на скриптове в споделена памет:

opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1

5. Рестартиране на вашия уеб сървър

Промените в php.ini не влизат в сила, докато не рестартирате съответния сервис. Използвайте подходящата команда за вашата конфигурация:

Apache (mod_php)

sudo systemctl restart apache2
# or on CentOS/RHEL:
sudo systemctl restart httpd

Nginx + PHP-FPM

# Restart PHP-FPM (replace 8.2 with your PHP version)
sudo systemctl restart php8.2-fpm

# Restart Nginx
sudo systemctl restart nginx

Graceful Reload (Zero Downtime)

За production сървъри, използвайте graceful reload, за да избегнете прекъсване на активни връзки:

# Apache graceful reload
sudo systemctl reload apache2

# PHP-FPM graceful reload
sudo systemctl reload php8.2-fpm

Проверка дали сервисите работят

sudo systemctl status apache2
sudo systemctl status php8.2-fpm

6. Проверка на вашите промени

След рестартиране на вашия сервър, потвърдете, че новите настройки са активни, използвайки един от следните методи:

Метод 1: Command Line Grep

# Check memory_limit
php -i | grep memory_limit

# Check upload_max_filesize
php -i | grep upload_max_filesize

# Check multiple values at once
php -i | grep -E 'memory_limit|upload_max_filesize|post_max_size|max_execution_time'

Метод 2: phpinfo() Page

Пересъздайте файла info.php временно (не забравяйте да го изтриете впоследствие) и потърсете вашите модифицирани директиви. Променените стойности ще се появят в колоните "Local Value" и "Master Value".

Метод 3: PHP One-Liner

php -r "echo ini_get('memory_limit');"

7. Напредни съвети за оптимизация на php.ini

Използване на .htaccess за отмяна на php.ini (само Apache)

Ако сте на споделен хостинг или нямате root достъп, можете да отмените определени php.ini настройки чрез .htaccess:

php_value memory_limit 256M
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 120

> Забележка: Това работи само ако AllowOverride е активиран и хостинг доставчикът позволява отмяна на PHP директиви.

Използване на ini_set() в PHP код

За настройки, специфични за приложението, можете да отмените php.ini стойности по време на изпълнение в вашите PHP скриптове:

<?php
ini_set('memory_limit', '512M');
ini_set('max_execution_time', '300');
?>

Файлове php.ini по директория (PHP-FPM)

С PHP-FPM можете да приложите различни php.ini настройки към различни виртуални хостове или директории чрез конфигуриране на файлове на пула в /etc/php/8.2/fpm/pool.d/. Това е особено полезно при хостване на множество приложения с различни изисквания.

Ако управлявате множество PHP приложения, VPS с cPanel значително улеснява управлението на PHP настройки за всеки домейн чрез графичен интерфейс без ръчно редактиране на конфигурационни файлове.

8. Security Hardening via php.ini

Правилната конфигурация на php.ini е един от най-ефективните начини да укрепите вашата PHP среда срещу често срещаните атаки.

Деактивирайте опасни функции

; Prevent execution of system commands from PHP scripts
disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source

Ограничете достъпа до файловата система

; Limit PHP file access to specific directories
open_basedir = /var/www/html:/tmp

Скрийте информацията за версията на PHP

; Don't expose PHP version in HTTP headers
expose_php = Off

Деактивирайте отдалечено включване на файлове

; Prevent PHP from including remote URLs (common attack vector)
allow_url_fopen = Off
allow_url_include = Off

Укрепете сигурността на сесията

session.cookie_httponly = On
session.cookie_secure = On
session.use_strict_mode = On
session.cookie_samesite = "Strict"

> Pro Tip: Ако управлявате електронен магазин или обработвате чувствителни потребителски данни, комбинирайте вашия укрепен php.ini с валиден SSL Certificate, за да криптирате всички данни при предаване. HTTPS е задължителен за session.cookie_secure = On да функционира правилно.

9. Често срещани грешки в php.ini, които трябва да избегнете

ГрешкаЗащо е проблемРешение
Настройване на memory_limit = -1 в productionПозволява на скриптовете да консумират неограничена RAM, което причинява срив на сървъраУстановете разумна граница като 256M или 512M
display_errors = On в productionРазкрива чувствителни пътища на файлове и учетни данни на база данни на потребителитеУстановете на Off и използвайте log_errors = On вместо това
post_max_size < upload_max_filesizeПричинява тихи неуспехи при качванеВинаги установете post_max_sizeupload_max_filesize
Редактиране на грешния php.iniПромените не се прилагат към уеб заявкитеИзползвайте phpinfo() за потвърждение кой файл се зарежда от вашия уеб сървър
Неперезагрузване на сървъра след промениСтарите настройки остават активниВинаги перезагрузете Apache или PHP-FPM след редактиране
Оставяне на info.php на сървъраРазкрива пълната конфигурация на сървъра на нападателитеИзтрийте веднага след използване
Настройване на allow_url_include = OnАктивира атаки с Remote File Inclusion (RFI)Винаги держите това Off

10. Заключение

Овладяването на конфигурацията на php.ini е фундаментално умение за всеки системен администратор или уеб разработчик. Правилните настройки могат да означават разликата между бавен, уязвим сървър и бърз, защитен, готов за производство сървър.

За да обобщим ключовите моменти:

  • Винаги правете резервно копие на php.ini преди да правите промени
  • Идентифицирайте правилния файл — CLI и уеб сървърните SAPI често използват различни php.ini файлове
  • Настройте лимитите на ресурсите (memory_limit, max_execution_time, upload_max_filesize) да съответстват на нуждите на вашето приложение
  • Укрепете сигурността чрез деактивиране на опасни функции, скриване на информацията за версията и ограничаване на достъпа до файлове
  • Активирайте OPcache за значителни печалби в производителност
  • Никога не показвайте грешки в производство — вместо това ги регистрирайте
  • Рестартирайте вашия уеб сървър след всяка промяна и проверете с phpinfo() или php -i

Хостинг средата, която избирате, също играе голяма роля в това колко контрол имате над конфигурацията на PHP. С Dedicated Servers от AlexHost получавате пълен, неограничен достъп до конфигурацията на PHP на вашия сървър — идеално за приложения с висок трафик със сложни изисквания. За по-малки проекти или екипи, които тепърва започват, планите за Shared Web Hosting предоставят управлявана среда, където много настройки на PHP са предварително оптимизирани за вас.

Редовно преглеждайте вашата конфигурация на php.ini докато вашето приложение се развива, PHP версиите се актуализират и вашите модели на трафик се променят. Добре настроена PHP среда не е еднократна настройка — това е постоянна практика, която дава дивиденти в производителност, надеждност и сигурност.