Проверьте динамически загружаемые расширения PHP из командной строки

Я просматривал руководство по PHP, чтобы понять различные типы расширений PHP ( модули PHP). Существуют модули Zend (в основном для гуру PHP), встроенные модули и внешние модули.

Есть ли способ узнать из командной строки, был ли модуль PHP загружен динамически или встроен в двоичный файл PHP?

Я имею в виду: с php -m я получаю все загруженные модули, но хотелось бы знать, какие из них встроенные, а какие внешние.


person rodrunner    schedule 23.01.2013    source источник


Ответы (3)


Я не уверен, что это возможно из обычного кода PHP, могут быть некоторые внутренние вызовы Zend, которые вы можете сделать из собственного расширения. Тем не менее, может быть дерзкий способ угадать, проверив, есть ли в загруженном расширении доступная динамическая библиотека...

$extdir=ini_get('extension_dir');

$modules=get_loaded_extensions();
foreach($modules as $m){
    $lib=$extdir.'/'.$m.'.so';
    if (file_exists($lib)) {
        print "$m: dynamically loaded\n";
    } else {
        print "$m: statically loaded\n";
    }
}

Это не надежно, но может быть достаточно для вас!

person Paul Dixon    schedule 23.01.2013
comment
Но скрипт должен также проверить, включена ли библиотека .so в php.ini (если добавлена ​​​​строка с расширением = $ m.so)? Кроме того, мне было интересно, есть ли какая-либо информация об этом в выводе phpinfo(), но я не мог ее увидеть. - person rodrunner; 23.01.2013

Просто запустите эту команду в командной строке:

php -m

или это для получения дополнительной информации:

php -i

Надеюсь это поможет.

person mineroot    schedule 02.04.2015
comment
Как это помогает отличать динамически загружаемые расширения от встроенных в двоичный файл? Насколько я могу судить, оба вида проявляются одинаково. Если я что-то не упустил, это совершенно не имеет отношения к заданному вопросу, тем более что автор вопроса упомянул php -m в вопросе и объяснил, почему это не дает ему нужной информации. - person Mark Amery; 11.08.2015
comment
Люди читают тему, а не весь вопрос, и находят ответ, который ищут, во втором ответе, а не в первом. Чтобы исправить это, тема вопроса должна быть более конкретной, что его интересуют только динамически загружаемые расширения: проверьте динамически загружаемые расширения PHP из командной строки… - person Ilija; 30.10.2015

1) Бежать

php -i

на выходе найдите следующие параметры:

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

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

Проанализированы дополнительные файлы .ini — файлы .ini загружаются из каталога, указанного в предыдущем параметре.

Если вы используете Linux, вы можете:

php -i | grep -e "Loaded Configuration File" -e "Scan this dir for additional .ini files" -e "Additional .ini files parsed"

2) Переименуйте файл php.ini и переименуйте папку с дополнительными файлами .ini.

3) Повторите шаг 1 и убедитесь, что Загруженный файл конфигурации и Проанализированные дополнительные файлы .ini имеют значение (нет).

4) Беги

php -m

Теперь вы увидите список, содержащий только расширения, встроенные в двоичный файл php.

person Hillel Barak    schedule 03.11.2015