Как распечатать список расширений, скомпилированных с помощью php

Я пытаюсь выяснить, какие расширения скомпилированы с помощью бинарного файла php, который мне дали. Есть ли способ сделать это программно?

Например, можно проверить, какая версия расширения/библиотеки существует.

var_dump(curl_version());

но это означает, что я должен проверять одну за другой, и я, возможно, не смогу угадать все библиотеки, скомпилированные внутри. Итак, в любом случае, чтобы заставить php сказать мне, какие расширения он скомпилировал?


person sameold    schedule 09.11.2011    source источник


Ответы (2)


Как насчет функции get_loaded_extensions()?

Вы можете использовать его в сочетании с phpversion(), который даст вам версию для PHP и (если указано в качестве параметра) расширение :

$a = array_map(function($e) { return sprintf("%s (%s)", $e, phpversion($e)); }, get_loaded_extensions());
echo implode('<br>', $a);

Демо

person nickb    schedule 09.11.2011
comment
Спасибо. Я впервые вижу такой синтаксис для добавления функций. Что ($e) передается в качестве параметра? - person sameold; 10.11.2011
comment
Но мне интересно, загруженные расширения такие же, как скомпилированные расширения? Например, в wampserver я вижу список многих расширений, но некоторые из них не активированы (не имеют галочки рядом с ними), поэтому они не загружаются, но они скомпилированы, и я могу загрузить их, если я хочу. Я думаю, что есть разница между загруженным и скомпилированным/доступным. - person sameold; 10.11.2011
comment
@sameold - Это умное дополнение на самом деле пришло от хакре, но я могу его объяснить. Первая строка в вызове array_map, которая принимает функцию обратного вызова в качестве первого параметра. Строка function($e) создает встроенную безымянную функцию, которая затем будет применяться к каждому элементу массива. При его вызове значение $e заполняется текущим элементом массива. Что касается вашего другого комментария, я не уверен, лучше всего попробовать. Я предполагаю, что вы правы и что это будет работать только для загруженных расширений, а не для скомпилированных. - person nickb; 10.11.2011
comment
Одна из возможностей, если вы хотите узнать, какие расширения могут быть загружены динамически, — это взять директиву extensions_dir php.ini с помощью ini_get('extension_dir'); и проверить, какие файлы присутствуют. - person nickb; 10.11.2011

php -m в консоли покажет вам список модулей. Не уверен, что это считается «программным».

person Mike B    schedule 09.11.2011