15%

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

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

Използвайте код:

Skills
За начало
01.11.2024

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

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

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

Съдържание

  1. Какво е php.ini и защо е важно?
  2. Намиране на файла php.ini
  3. Редактиране на файла php.ini
  4. Обяснени ключови директиви на php.ini
  5. Рестартиране на вашия уеб сървър
  6. Проверка на вашите промени
  7. Напредни съвети за оптимизиране на php.ini
  8. Укрепване на сигурността чрез php.ini
  9. Често срещани грешки в php.ini, които трябва да избегнете
  10. Заключение

1. Какво е php.ini и защо е важно? {#what-is-phpini}

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

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

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

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

2. Намиране на файла php.ini {#locating-phpini}

Местоположението на 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 {#editing-phpini}

Стъпка 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 {#key-directives}

Ето подробно разбиране на най-важните директиви на 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. Рестартиране на вашия уеб сървър {#restarting-server}

Промените в 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

Грациозно преоразмеряване (без прекъсване)

За производствени сървъри, използвайте грациозно преоразмеряване, за да избегнете прекъсване на активни връзки:

# 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. Проверка на вашите промени {#verifying-changes}

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

Метод 1: 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()

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

Метод 3: PHP еднолинейник

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

7. Напредни съвети за оптимизиране на php.ini {#advanced-tips}

Използване на .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. Укрепване на сигурността чрез php.ini {#security-hardening}

Правилното конфигуриране на 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"

15%

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

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

Използвайте код:

Skills
За начало