LINUX.ORG.RU
ФорумAdmin

Определить какой из php какой именно конфиг слушает?

 ,


1

1

Вопрос теоретический. Все поиски приводят к ответам вида, «обычно php.ini лежит в этой директории..». Слово «обычно» - это уже плохой признак. Поэтому назрел такой вопрос: Пусть имеется совершенно кастомная сборка Linux. установлено несколько версий php (как модули апача, php-fpm и cli). Как узнать совершенно однозначно и точно какие php подчиняются каким конфигам? Может даже это будут не ini файлы. Если вы ошибаетесь с сопоставлением конфига (ну например, хотите действовать методом перебора), то ваш космический карабль, работающий на этом php, взрывается при первой же ошибке!

Странная однако у вас задача. Ну допустим так:

for i in $(find / -name '*php*' ! -name '*dbg*' -type f -executable -exec sh -c 'test "$(head -c 2 "$1")" != "#!"' sh {} \; -print); do $i -i | grep 'Configuration File' && echo -e  "->\tChecked binary: $i\n" ; done
Далее уже допилить под свои нужды, или строить велосипед из других костылей.

WoozyMasta
()
Ответ на: комментарий от WoozyMasta

Ну допустим так:

Правда если у бинарника не будет прав на выполнение или же в имени отсутствует .*php.*, это не сработает.

А почему бы не посмотреть на активные процессы и сокеты и из них взять инфу?

WoozyMasta
()
Ответ на: комментарий от Rodriges

Нужно как-то найти все php бинарники сначала, чтоб скормить им phpinfo()? Верно?

Естественно. Сложно ?

sekreti-gollivuda
()
Ответ на: комментарий от WoozyMasta

Далее уже допилить под свои нужды, или строить велосипед из других костылей.

php-fpm таким образом не покажется.

@Rodriges, не юзай такие говнокастомы, все не найдешь.

Смотри phpinfo тех, которые собираешься использовать.

Пример зоопарка:
редхаты:
/etc/php.ini

дебиан олд:
/etc/php5/fpm/php.ini
/etc/php5/apache2/php.ini - работает с apache2-mod-php5

дебиан каррент:
/etc/php/7.2/cli/php.ini - работает в CLI / CRON
/etc/php/7.2/fpm/php.ini + /etc/php/7.2/fpm/pool.d/*conf - работает в fastcgi_pass nginx
/etc/php/7.3/* аналогично

BaBL ★★★★★
()
Ответ на: комментарий от BaBL

Все поиски приводят к ответам вида, «обычно php.ini лежит в этой директории..».
Может даже это будут не ini файлы.

ТС явно желает получить говнокастом, и я ему помог в этом ;)

Даже выполнил это на сервере где две версии php собраны в /opt

#!/bin/bash
for i in $(find /opt/ -name '*php*' ! -name '*dbg*'\
           -type f -executable -exec\
           sh -c 'test "$(head -c 2 "$1")" != "#!"'\
           sh {} \; -print)
do
    $i -i | grep 'Configuration File' &&\
    echo -e  "->\tChecked binary: $i\n"
done

И получил в ответ:

Configuration File (php.ini) Path => /opt/php7.0/etc
Loaded Configuration File => /opt/php7.0/etc/php.ini
->	Checked binary: /opt/php7.0/bin/php

<tr><td class="e">Configuration File (php.ini) Path </td><td class="v">/opt/php7.0/etc </td></tr>
<tr><td class="e">Loaded Configuration File </td><td class="v">/opt/php7.0/etc/php.ini </td></tr>
->	Checked binary: /opt/php7.0/bin/php-cgi

Configuration File (php.ini) Path => /opt/php7.0/etc
Loaded Configuration File => /opt/php7.0/etc/php.ini
->	Checked binary: /opt/php7.0/sbin/php-fpm

Configuration File (php.ini) Path => /opt/php7.0.30/etc
Loaded Configuration File => /opt/php7.0.30/etc/php.ini
->	Checked binary: /opt/php7.0.30/bin/php

<tr><td class="e">Configuration File (php.ini) Path </td><td class="v">/opt/php7.0.30/etc </td></tr>
<tr><td class="e">Loaded Configuration File </td><td class="v">/opt/php7.0.30/etc/php.ini </td></tr>
->	Checked binary: /opt/php7.0.30/bin/php-cgi

Configuration File (php.ini) Path => /opt/php7.0.30/etc
Loaded Configuration File => /opt/php7.0.30/etc/php.ini
->	Checked binary: /opt/php7.0.30/sbin/php-fpm

Конфиги сокетов php-fpm думаю уже сможет найти зная конфиг php и его расположение.

WoozyMasta
()
Ответ на: комментарий от WoozyMasta

Не, я не желаю получить говнокастом, что бы это не значило. Просто не кажется ли вам, что даже на такой простой ответ, как найти точные конфиги сервисов надо иметь однозначный ответ?! Я представил себя на месте админа или разработчика, которому дают «проблемный сервер» или «проблемный контейнер». Я вижу, что php не хватает какого-то модуля или скрипты работают в php-cli, но не работают в вебе. Первое, что я должен сделать, это просмотреть конфиги. И тут понеслась переборка дедуктивным методом.

И тут такой зоопарк:

/etc/php/7.2/cli/php.ini - работает в CLI / CRON /etc/php/7.2/fpm/php.ini + /etc/php/7.2/fpm/pool.d/*conf - работает в fastcgi_pass nginx /etc/php/7.3/*

Хочу заметить, это никакой ещё не кастом.

Rodriges
() автор топика
Ответ на: комментарий от Rodriges

Так в чем проблема?

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

WoozyMasta
()
Ответ на: комментарий от WoozyMasta

Ну так-то до меня дошло это! Вот только я не знаю как вцепить все работающие php (апач модули) и php-fpm в системе. Плевать уже на php-cli - его можно исключить так как он не сервис и не очень мне нужен.

Rodriges
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.