2012-08-28 14 views
8

Ho bisogno di un modo per trovare tutte le estensioni PHP disponibili se sono caricate o meno. Ho guardato su How do I see the extensions loaded by PHP? ma spiega solo come trovare le estensioni caricate. Voglio un modo per trovare anche le estensioni scaricate.Trova estensioni PHP disponibili (non caricate)

Conoscendo extension_dir da php.ini ho eseguito uno ls /extension_dir/*.so che ha restituito 26 voci. Quando ho provato con php -m, ho ottenuto 57 voci. Come è possibile?

Come sapere quali estensioni PHP sono disponibili per il caricamento? Non voglio sapere quali sono caricati ma quali sono caricabili.

+2

Alcune estensioni sono built-in, senza file esterno. –

+1

Inserire semplicemente le librerie di estensione in una directory non significa necessariamente che siano caricate da php. vedi http://docs.php.net/manual/en/ini.core.php#ini.extension – VolkerK

+0

@matteo Tassinari, come? è definito in fase di compilazione o fa parte di PHP stesso? – maazza

risposta

2

Se si desidera l'elenco di estensioni eventualmente caricabili, è necessario ottenere l'elenco dei file con un'estensione pari al valore di PHP_SHLIB_SUFFIX e che si trovano nella directory in cui PHP verifica le estensioni PHP (<install-dir>/lib/php/extensions/<debug-or-not>-<zts-or-not>-ZEND_MODULE_API_NO). Se si desidera evitare quelle estensioni già caricate, è necessario passare il nome dell'estensione (senza estensione file) a extension_loaded().

Ricordare che un file con l'estensione file corretta non può essere caricato da PHP come estensione perché il file non ha la struttura corretta (ad esempio perché il file è danneggiato) o perché l'estensione PHP dipende da file l'estensione non trova, o non è in grado di caricare.

+0

grazie per questa risposta esaustiva – maazza

4

Ricordare che alcune estensioni potrebbero essere costruite staticamente in PHP. Vedrai queste estensioni elencate in php.ini ma non sarai in grado di disabilitarle, e nella maggior parte dei casi non vedrai un'estensione = linea che si riferisce ad esse in php.ini o in un file .so/.DLL File. La rimozione delle estensioni compilate staticamente richiede la ricompilazione di PHP stesso, e nella maggior parte dei casi questo è quasi mai necessario poiché le estensioni compilate staticamente tendono ad includere funzionalità di base che raramente devono essere rimosse .

http://arr.gr/blog/2012/06/on-php-extensions/

ringraziamento va a Matteo Tassinari.

+0

+1 per rispondere autonomamente –

+0

In che modo risponde a questa domanda? – kiamlaluno

+0

Non sono già state abilitate le estensioni di generazione staticamente? Se la domanda riguarda le estensioni ancora da caricare, allora questo esclude le estensioni collegate staticamente. – kiamlaluno

1

Un modo è quello di controllare il valore 'extension_dir':

phpinfo(); 

quindi eseguire la scansione della directory per vedere i file:

$exts = scandir("/usr/lib/php5/extension_dir/"); 
print_r($exts);