PHP-FastCGI: тестирование и индивидуальные php.ini для сайтов

Важно: выполнять команды от пользователя с правами администратора или через sudo. Всегда делайте резервную копию оригинальных файлов перед изменениями.
4 Тестирование
Теперь создаём простой PHP-файл для тестирования на сайте, например на www.example1.com.
Создайте файл:
vi /srv/www/web1/web/info.php
Вставьте в файл следующее:
Откройте в браузере адрес http://www.example1.com/info.php. При корректной настройке вывод phpinfo() должен показаться похожим на ожидаемый, и в строке Server API вы увидите CGI или FastCGI.
Если страница не открывается или отсутствует информация о FastCGI, проверьте логи Apache и права на файлы.
5 Индивидуальный php.ini для каждого сайта
Поскольку для каждого сайта используется собственный скрипт-обёртка php-fcgi-starter, можно назначать разные php.ini на сайт. Пример: скопируем системный php.ini в директорию сайта www.example2.com и назначим владельца web2.
cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini
Отредактируйте /srv/www/web2/php.ini по своему усмотрению.
Откройте скрипт-обёртку для сайта web2:
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
И укажите путь к директории с php.ini в переменной PHPRC:
#!/bin/sh
PHPRC=/srv/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi
Перезапустите Apache:
/etc/init.d/apache2 restart
Создайте тестовый phpinfo() для www.example2.com:
vi /srv/www/web2/web/info.php
Откройте http://www.example2.com/info.php и убедитесь, что в строке Loaded Configuration File указан путь /srv/www/web2/php.ini.
6 Изменение отдельных настроек PHP
Если не требуется целый php.ini, можно менять отдельные параметры, добавляя ключ -d к команде запуска php-cgi в скрипте-обёртке. Например, чтобы отключить magic_quotes_gpc для сайта www.example2.com, измените скрипт следующим образом:
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
Содержимое скрипта:
#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi -d magic_quotes_gpc=off
Перезапустите Apache снова:
/etc/init.d/apache2 restart
Откройте http://www.example2.com/info.php и проверьте, что magic_quotes_gpc отображается как Off.
Методология и проверка изменений
Мини-методология:
- Создать резервные копии оригинальных файлов конфигурации.
- Внести минимальные необходимые изменения в скрипт-обёртку или в локальный php.ini.
- Перезапустить веб-сервер.
- Проверить phpinfo() и логи на предмет ошибок.
- Наблюдать поведение приложения в течение изменения нагрузки.
Критерии приёмки:
- phpinfo() показывает ожидаемый Server API и/или Loaded Configuration File.
- Изменённый параметр PHP реально применён (см. вывод phpinfo()).
- В логах Apache/PHP отсутствуют критические ошибки после изменения.
Контрольные тесты и сценарии приёмки
Тест-кейсы:
- Открыть /info.php и проверить статус HTTP 200.
- Убедиться, что Server API равен CGI или FastCGI.
- Для локального php.ini — проверить Loaded Configuration File указывает на файл в каталоге сайта.
- Для отдельных параметров — найти в phpinfo() соответствующую строку и подтвердить значение.
Роли и чек-лист по задачам
Для системного администратора:
- Сделать резервные копии /etc/php5/fastcgi/php.ini и скриптов запуска.
- Настроить владельца и права доступа для локального php.ini.
- Перезапустить Apache и проверить логи.
Для разработчика сайта:
- Проверить совместимость приложения с изменёнными настройками PHP.
- Протестировать функциональность приложения после переключения php.ini.
Типичные проблемы и пути решения
Страница info.php не открывается:
- Проверьте права на файл и директорию.
- Посмотрите error_log Apache.
PHP не использует локальный php.ini:
- Убедитесь, что PHPRC указывает на директорию, а не на файл.
- Проверьте, что скрипт-обёртка исполняем и используется нужным FCGI-процессом.
Изменение параметра через -d не применяется:
- Проверьте синтаксис ключа и значение параметра.
- Убедитесь, что перезапуск сервера выполнен и нет других перекрывающих настроек.
Факт-бокс
- Рекомендуемое значение PHP_FCGI_MAX_REQUESTS: наблюдайте и адаптируйте под нагрузку.
- PHP_FCGI_CHILDREN: стартовое значение 4–8 для большинства небольших сайтов.
- Обновления PHP могут менять поведение CGI/FastCGI — тестируйте после обновлений.
Ссылки и ресурсы
- mod_fcgid: http://fastcgi.coremail.cn/
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- OpenSUSE: http://www.opensuse.org/
Итог: используя обёртки php-fcgi-starter и переменную PHPRC или ключ -d, вы можете гибко управлять конфигурацией PHP на уровне каждого сайта. Всегда тестируйте изменения по шагам и следите за логами.