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"
Windows'ta bir PHP eklentisini yüklemenin iki yolu vardır: Ya eklenti PHP içinde derlenir ya da DLL olarak yüklenir. Derlenmiş bir eklentiyi yüklemek en kolay ve en çok tercih edilen yoldur.
Bir eklentiyi yüklemek için sistemde o eklentinin .dll dosyasının bulunması gerekir. Tüm eklentiler otomatik olarak belirli aralıklarla PHP Grubu tarafından derlenirler (bunları indirilmesi sonraki bölümde açıklanmıştır.
Bir eklentiyi PHP içinde derlemek için Kaynak kod paketinden derleme belgesine bakılabilir.
Bir eklentiyi tek başına (yani bir DLL olarak) derlemek için Kaynak kod paketinden derleme belgesine bakılabilir. Eğer DLL dosyası ne PHP dağıtımında ne de PECL sitesinde mevcutsa, eklentiyi kullanmaya başlamadan önce derlemek gerekebilir.
PHP eklentileri genellikle php_*.dll biçeminde isimlendirilir (yıldız iminin yerine eklentinin ismi gelir) ve PHP\ext dizini altında bulunur.
PHP, geliştiricilerin büyük çoğunluğunca en faydalı bulunan eklentilerle birlikte gelir. Bu tür paketlere toplu paket adı verilir.
Bununla birlikte, çekirdek eklentilerle sağlanmamış bir işlevselliğe ihtiyaç duyulursa, bunları edinmek için » PECL sitesinde bulunabilir. PHP Eklentileri Halk Kütüphanesi (PECL - PHP Extension Community Library) bir PHP Eklentileri deposu olup PHP eklentilerinin geliştirilmesi ve indirilmesi için barındırma oluşumlarını ve bilinen tüm eklentilerin bir dizinini içerir.
Kendi kullanımı için eklenti geliştirenler bu eklentinin PECL'de barındırılmasını isteyebilir, böylece ihtiyaçları aynı olan başkaları da bu eklentiden yararlanabilir. Bunun bazı olumlu yan etkileri de vardır: Geribildirim, teşekkür, hata bildirimi, hatta düzeltme ve yama alma şansı olur. Eklentiyi barındırılmak üzere PECL'ye göndermeden önce » PECL adresinin incelenmesi önerilir.
Çoğu zaman her DLL'nin çok sayıda sürümü vardır:
vs.
Şuna da dikkat edilmelidir: Eklenti ayarları kullanılan PHP çalıştırılabilirinin ayarları ile aynı olmalıdır. Aşağıdaki PHP betiği PHP ayarlarının tamamını içerecektir:
Örnek 1 - phpinfo() kullanımı
<?php
phpinfo();
?>
Ya da komut satırından:
sürücü:\dizin\yolu\php\executable\php.exe -i
Bir PHP eklentisini yüklemenin en bilinen yolu eklentiyi php.ini dosyasına eklemektir. Dikkatle incelenirse php.ini dosyasında bir çok eklentinin zaten ekli olduğunu görülür. Eklentiyi etkin kılmak için yapılacak tek değişiklik eklentinin belirtildiği satırın başındaki noktalı virgülü silmek olacaktır.
PHP 7.2.0 ve üzeri sürümlerde, eklentinin dosya adı yerine eklenti adı da kullanılabilir. Bu işletim sisteminden bağımsız ve daha kolay olduğundan, özellikle yeni başlayanlar için, yüklenecek eklentileri belirlemenin önerilen yolu haline gelir. Dosya adları, önceki sürümlerle uyumluluk için desteklenmeye devam etmektedir.
;extension=php_eklenti.dll
extension=php_eklenti.dll
; PHP 7.2 ve sonrasında önerilen: extension=eklenti zend_extension=diğer_eklenti
Bununla birlikte, bazı HTTP sunucuları, PHP çalıştırılabilirinin yanına konmuş php.ini dosyasını kullanmadıklarından eklentiyi göremeyebilir. HTTP sunucusunun kullandığı php.ini dosyasının bulunduğu yer phpinfo() işlevi kullanılarak şöyle öğrenilebilir:
Configuration File (php.ini) Path C:\WINDOWS
Loaded Configuration File C:\Program Files\PHP\8.2\php.ini
Eklentiyi etkin kıldıktan sonra php.ini dosyası kaydedilmeli ve HTTP sunucusu yeniden başlatıldıktan sonra tekrar phpinfo() çıktısına bakılmalıdır. Yeni eklentinin artık kendi bölümünde görünüyor olması gerekir.
Eğer eklenti phpinfo() çıktısında görünmüyorsa sorunun kaynağını bulmak için günlük dosyalarına bakılmalıdır.
PHP, komut satırından kullanılıyorsa (CGI), eklenti yükleme hatası doğrudan ekranda görülebilir.
PHP bir HTTP sunucusu ile kullanılıyorsa günlük dosyalarının yeri ve biçemi kullanılan yazılıma göre değişir. Günlüklerin yerini bulmak için kullanılan HTTP sunucusunun belgelerine bakılmalıdır.
Sorunların çoğu DLL dosyasının ve bu dosyanın bağımlı olduğu DLL'lerin yeri
ile ilgilidir. php.ini
içindeki "extension_dir" yönergesinin değeri ile
derleme sırasında yapılan ayarlar arasında bir tutarsızlık olabilir.
Eğer sorun derleme sırasında yapılan ayarlarla uyumsuzluktan kaynaklanıyorsa muhtemelen indirilen DLL dosyası doğru yere konulmamış demektir. Eklentinin doğru ayarlarla tekrar indirilmesi gerekebilir. Bu yapıldıktan sonra phpinfo() çıktısının tekrar incelenmesi uygun olacaktır.
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"
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.
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.
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).