Gerar uma lista de extensões PHP instaladas

0

Meu objetivo é escrever o mais simples possível (mas não mais simples) que gere uma lista de extensões PHP atualmente instaladas (arquivos * .so) que o usuário possa simplesmente copiar / colar em seu php.ini . Deve ser compatível, no mínimo, com o OS X e, pelo menos, algumas distribuições Linux importantes (Ubuntu, Arch Linux, RHEL, etc.).

A saída esperada seria semelhante a:

extension=iconv.so
extension=mcrypt.so
...

Até agora, eu descobri isso:

find 'php-config --extension-dir' -name "*.so" | rev | cut -d / -f 1 | rev

Funciona bem, mas sinto que é um pouco desajeitado com todas as reversões das cordas. E só gera os nomes das extensões, não adiciona o prefixo extension= .

Eu precisava usar as reversões porque o diretório de extensão pode ser de qualquer profundidade, portanto não posso simplesmente cortar a cadeia em uma posição de separador de caminho pré-determinado. No entanto, eu sei que se eu cortá-lo do final no primeiro separador, vou obter apenas o nome do arquivo.

Então descobri o utilitário replace e escrevi isso, o que é perfeito para minha tarefa, exceto que ele não parece estar disponível no OS X e Arch Linux, os dois sistemas que eu mais uso:

find 'php-config --extension-dir' -name "*.so" | replace 'php-config --extension-dir'/ 'extension='

Basicamente, estou procurando outras maneiras criativas (mas simples) de concluir essa tarefa. Quais outros utilitários eu poderia usar? Eduque-me! :)

    
por Robert Rossmann 21.05.2015 / 10:25

2 respostas

3

Que tal isso?

find "'php-config --extension-dir'" -name "*.so" | sed 's!^.*/!extension=!'

Para cada linha, sed corresponderá à string mais longa que começa no início ( ^ ) e termina em / . Ele sempre corresponderá a todos, incluindo o último / , porque é uma correspondência gulosa, ou seja, corresponderá a tudo mas ao nome do arquivo. Em seguida, substitui isso por extension= .

Isso acaba assim:

$ find "'php-config --extension-dir'" -name "*.so" | sed 's!^.*/!extension=!'
extension=pdo_pgsql.so
extension=pdo_sqlite.so
extension=mysqlnd.so
extension=mysqli.so
extension=enchant.so
extension=pgsql.so
extension=mysql.so
extension=pdo_odbc.so
extension=odbc.so
extension=curl.so
extension=pdo.so
extension=pdo_mysql.so
extension=sqlite3.so

que parece ser o que você quer.

sed deve estar disponível em todos os lugares, porque é parte do padrão POSIX.

    
por 21.05.2015 / 10:32
2

Se você tem um GNU find , pode usar a opção -printf

find 'php-config --extension-dir' -name "*.so" -printf 'extension=%f\n' 
    
por 21.05.2015 / 11:55

Tags