CakeFest 2024: The Official CakePHP Conference

Instalando uma extensão PHP no Windows

Existem duas maneiras de carregar uma extensão PHP no Windows: compilando-a no PHP ou carregando a DLL. Carregar uma extensão pré-compilada é a maneira mais fácil e preferida.

Para carregar uma extensão, ela deve estar disponível como um arquivo .dll no sistema. Todas as extensões são compiladas automaticamente e periodicamente pelo PHP Group (veja a próxima seção para download).

Para compilar uma extensão no PHP, consulte a documentação sobre compilação do código-fonte.

Para compilar uma extensão independente (um arquivo DLL), consulte a documentação sobre compilação do código-fonte. Se a DLL não estiver disponível na distribuição do PHP nem no PECL, pode ser necessário compilá-la antes que a extensão possa ser usada.

Onde encontrar uma extensão?

As extensões do PHP geralmente são chamadas de php_*.dll (onde o asterisco representa o nome da extensão) e estão localizadas no diretório PHP\ext.

O PHP vem com as extensões mais úteis para a maioria dos desenvolvedores. Elas são chamadas extensões nativas do PHP.

Entretanto, se as extensões nativas não fornecerem a funcionalidade necessária, uma extensão que ofereça essa funcionalidade ainda pode ser encontrada no » PECL. A biblioteca comunitária de extensões PHP (PECL) é um repositório de extensões PHP, que fornece um diretório de todas as extensões conhecidas e recursos de hospedagem para download e desenvolvimento de extensões PHP.

Se uma extensão foi desenvolvida para usos específicos, ela pode ser hospedada no PECL para que outras pessoas com as mesmas necessidades possam se beneficiar delas. Um bom efeito colateral é que é uma excelente chance de receber feedbacks, agradecimentos, relatórios de erros e até mesmo correções/patches. Antes de enviar uma extensão para hospedagem no PECL, consulte sobre » Submissão ao PECL.

Qual extensão baixar?

Muitas vezes, haverá várias versões disponíveis de cada DLL:

  • Números de versão diferentes (pelo menos os dois primeiros números devem corresponder)
  • Versões de thread safety diferentes
  • Arquitetura de processador diferente (x86, x64, ...)
  • Configurações de depuração diferentes
  • etc.

Lembre-se de que as configurações de extensão devem corresponder a todas as configurações do executável PHP que está sendo usado. O script a seguir informará tudo sobre as configurações do PHP:

Exemplo #1 A função phpinfo()

<?php
phpinfo
();
?>

Ou na linha de comando, execute:

drive:\caminho\para\o\executavel\php.exe -i

Carregando uma extensão

A forma mais comum de carregar uma extensão PHP é incluí-la no arquivo de configuração php.ini. Observe que muitas extensões já estão presentes no php.ini e só é preciso remover o ponto e vírgula para ativá-las.

A partir do PHP 7.2.0, o nome da extensão pode ser usado ao invés do nome do arquivo da extensão. Como é independente do sistema operacional é mais fácil, especialmente para iniciantes, essa é a maneira recomendada de especificar as extensões a serem carregadas. Os nomes dos arquivos continuam suportados para compatibilidade com versões anteriores.

;extension=php_extname.dll
extension=php_extname.dll
; A partir do PHP 7.2.0, prefira:
extension=extname
zend_extension=another_extension

No entanto, isso pode causar confusão em alguns servidores web porque eles não usam o arquivo php.ini localizado junto do executável PHP. Para descobrir onde o arquivo php.ini está, procure seu caminho na função phpinfo():

Configuration File (php.ini) Path  C:\WINDOWS
Loaded Configuration File   C:\Program Files\PHP\8.2\php.ini

Depois de ativar uma extensão, salve o arquivo php.ini, reinicie o servidor web e verifique a função phpinfo() novamente. A nova extensão agora deve ter sua própria seção.

Resolvendo problemas

Se uma extensão não aparecer na função phpinfo(), os logs devem ser verificados para saber de onde vem o problema.

Se o PHP estiver sendo usado na linha de comando (CLI), os erros de carregamento da extensão podem ser lidos diretamente na tela.

Se o PHP estiver sendo usado com um servidor web, a localização e o formato dos logs irão variar dependendo do software usado. Consulte a documentação do servidor web para localizar os logs, pois isso não está relacionado com o PHP.

Problemas comuns são a localização da DLL e das DLLs das quais ela depende, o valor da diretiva "extension_dir" no arquivo php.ini e incompatibilidades de configuração em tempo de compilação.

Se o problema estiver em uma incompatibilidade de configuração em tempo de compilação, provavelmente a DLL errada foi baixada. Tente baixar novamente a extensão com as configurações corretas. Novamente, a função phpinfo() pode ser de grande ajuda.

add a note

User Contributed Notes 4 notes

up
6
j dot o dot l dot a dot n at bk dot ru
3 months ago
In order for php to see extensions, it is necessary to specify the root folder when specifying the address to the directory with extensions in php.ini. For example extension_dir = "php/ext"
up
2
dario at 4assistance dot com
1 year ago
On windows, drop your extension's dependencies into a dir of your choice, but outside of your php install. Add that dir to a path environment variable used by your php. Add <extension_name>.dll to your php's extension_dir, and update your php.ini (unless you're simply testing with php's cli).
up
1
bk at kaelberer-aio dot de
1 year ago
In addition to the helpful comments of ferdnyc and dario: A few weeks ago I've set up a new W11 using PHP 8.1. (as a module) with Apache. It was working fine.
Today i wanted to install the PECL-extension php-amqp. This extension comes with two additional files that are said to be placed in PHPs main directory. It worked fine running from the command prompt but with Apache the extension failed with "Unable to load dynamic library 'amqp'".
I tried 100 ways to notate paths in php.ini and http.conf: c:, C:, \, \\, /, ". I also installed a new PHP in the root to get rid of the space in the path. It did not help.
When reading dario's comment i stumbeled across him mentioning "path environment variable". I checked that in Window's settings and I realized, that i had added PHP's path to the USER'S path-settings, but not to the SYSTEM'S path. That is why it worked in the command prompt but not when starting Apache as a service. After adding it there it worked fine.
up
1
ferdnyc at gmail dot com
1 year ago
This is handwaved somewhat in the "Resolving problems" section, but mis-location of (non-extension) DLL files is often a problem when installing PHP extensions on Windows.

Many PHP extensions come with not only the extension DLL, but supplementary DLLs that are required by that extension. (For example, php_luasandbox.dll comes with lua5.1.dll, the lua interpreter it sandboxes.) Those other DLLs should go into the same directory as the php.exe binary, NOT the extension directory.

So, if php_luasandbox.dll is installed at C:\PHP8.1\ext\php_luasandbox.dll, the interpreter would be located at C:\PHP8.1\lua5.1.dll. That allows the PHP binary C:\PHP8.1\php.exe to find those additional DLLs when required.
To Top