Ekstenstion Yükleme

Dikkat

Apache+PHP veya Nginx+PHP çalışma modundan farklı olarak, Workerman, PHP komut satırı PHP CLI üzerinde çalışır ve farklı bir PHP çalıştırılabilir dosyası kullanır, kullanılan php.ini dosyası da farklı olabilir. Bu nedenle, web sayfasında phpinfo() çıktısında belirli bir uzantının yüklü olduğunu görmek, komut satırındaki PHP CLI'nin de ilgili uzantıya sahip olduğu anlamına gelmez.

PHP CLI'nin hangi uzantıların yüklü olduğunu nasıl belirleriz

php -m komutunu çalıştırarak komut satırı PHP CLI'de yüklü olan uzantıları listeleyebilirsiniz, sonuç aşağıdaki gibi olur:

~# php -m
[PHP Modülleri]
event
posix
pcntl
...

PHP CLI'nin php.ini dosyasının yerini nasıl belirleriz

Uzantıları yüklerken, php.ini dosyasını manuel olarak yapılandırmak, uzantıları eklemek gerekebilir, bu yüzden PHP CLI'nin php.ini dosyasının yerini kesin olarak belirlemek önemlidir. PHP CLI'nin ini dosyası konumunu bulmak için php --ini komutunu çalıştırabilirsiniz, sonuç aşağıdaki gibi olur (her sistemdeki gösterim farklılık gösterebilir):

~# php --ini
Configuration File (php.ini) Path: /etc/php8/cli
Loaded Configuration File:         /etc/php8/cli/php.ini
Scan for additional .ini files in: /etc/php8/cli/conf.d
Additional .ini files parsed:      /etc/php8/cli/conf.d/apc.ini,
/etc/php8/cli/conf.d/pdo.ini,
/etc/php8/cli/conf.d/pdo_mysql.ini
...

PHP CLI'ye uzantı yükleme (memcached uzantısını yükleme örneği)

Yöntem 1: apt veya yum komutunu kullanarak yükleme

PHP, apt veya yum komutları ile yüklendiyse, uzantılar da apt veya yum ile yüklenebilir.

debian/ubuntu gibi sistemlerde apt ile PHP uzantısı yükleme yöntemi (root olmayan kullanıcılar için sudo komutunu eklemeye dikkat edin)

  1. apt-cache search komutunu kullanarak uzantı paketlerini arayın.
    ~# apt-cache search memcached php
    php-apc - APC (Alternatif PHP Cache) modülü PHP 5 için
    php5-memcached - php5 için memcached modülü
  2. apt-get install komutunu kullanarak uzantı paketini yükleyin.
    ~# apt-get install -y php5-memcached
    Paket listeleri okunuyor... Tamam
    Durum bilgileri okunuyor... Tamam
    ...

centos gibi sistemlerde yum ile PHP uzantısı yükleme yöntemi

  1. yum search komutunu kullanarak uzantı paketlerini arayın.
    ~# yum search memcached php
    php-pecl-memcached - php5 için memcached modülü
  2. yum install komutunu kullanarak uzantı paketini yükleyin.
    ~# yum install -y php-pecl-memcached
    Paket listeleri okunuyor... Tamam
    Durum bilgileri okunuyor... Tamam
    ...

    Açıklama:

apt veya yum kullanarak PHP uzantılarını yüklemek php.ini dosyasını otomatik olarak yapılandırır, yükledikten hemen sonra kullanılabilir, bu da oldukça kullanışlıdır. Dezavantajı ise bazı uzantıların apt veya yum içinde karşılık gelen yükleme paketlerinin olmaması olabilir.

Yöntem 2: pecl ile yükleme

Uzantıyı yüklemek için pecl install komutunu kullanın.

  1. pecl install ile yükleme
    ~# pecl install memcached
    memcached-2.2.0.tgz indiriliyor...
    memcached-2.2.0.tgz (70,449 bayt) indirmeye başlanıyor
    ....
  2. php.ini dosyasını yapılandırın.

php --ini komutunu çalıştırarak php.ini dosyasının yerini bulun ve dosyaya extension=memcached.so ekleyin.

Yöntem 3: Kaynak kodu ile derleyerek yükleme (genellikle PHP'nin kendi uzantılarını yüklemek için, pcntl uzantısını yükleme örneği)

  1. Mevcut PHP CLI sürümünü görmek için php -v komutunu kullanın.
    ~# php -v
    PHP 5.3.29-1~dotdeb.0 with Suhosin-Patch (cli) (built: Aug 14 2014 19:55:20)
    Copyright (c) 1997-2014 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
  2. Sürümüne göre PHP kaynak kodunu indirin.

PHP geçmiş sürümleri indirme sayfası: https://php.net/releases/

  1. Kaynak kodu sıkıştırmasını çıkarın.

Örneğin indirdiğiniz sıkıştırma dosyasının adı php-5.3.29.tar.gz ise

~# tar -zxvf php-5.3.29.tar.gz
php-5.3.29/
php-5.3.29/README.WIN32-BUILD-SYSTEM
php-5.3.29/netware/
...
  1. Kaynak kodundaki ext/pcntl dizinine gidin.
    ~# cd php-5.3.29/ext/pcntl/
  2. phpize komutunu çalıştırın.
    ~# phpize
    Aşağıdakiler için yapılandırılıyor:
    PHP Api Sürümü:         20090626
    Zend Modül Api No:      20090626
    Zend Uzantı Api No:     220090626
  3. configure komutunu çalıştırın.
    ~# ./configure
    long satırları ve -e'yi işleyebilen grep'i kontrol ediliyor... /bin/grep
    egrep'i kontrol ediliyor... /bin/grep -E
    ...
  4. make komutunu çalıştırın.
    ~# make
    /bin/bash /tmp/php-5.3.29/ext/pcntl/libtool --mode=compile cc ...
    -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend...
    ...
  5. make install komutunu çalıştırın.
    ~# make install
    Paylaşılan uzantılar yükleniyor:     /usr/lib/php5/20090626/
  6. ini dosyasını yapılandırın.

php --ini komutunu çalıştırarak php.ini dosyasının yerini bulun ve dosyaya extension=pcntl.so ekleyin.

Açıklama:
Bu yöntem genellikle PHP'nin kendi uzantılarını yüklemek için kullanılır, örneğin posix uzantısı ve pcntl uzantısı. phpize ile bir uzantıyı derlemenin yanında, tüm PHP'yi yeniden derlemek de mümkündür, derleme sırasında uzantıyı eklemek için seçenekler kullanılabilir, örneğin kaynak dizininde

~# ./configure --enable-pcntl --enable-posix ...
~# make && make install

Yöntem 4: phpize ile yükleme

Yüklemek istediğiniz uzantı PHP kaynak kodunun ext dizininde yoksa, uzantıyı https://pecl.php.net adresinden arayıp indirmeniz gerekir.

Örneğin libevent uzantısını yüklemek için (sisteminizde libevent-dev kütüphanesinin yüklü olduğunu varsayalım)

  1. libevent uzantı dosyasını indiriniz (hangi dizine indirdiğiniz önemli değil).
    
    ~# wget https://pecl.php.net/get/libevent-0.1.0.tgz
    --2015-05-26 21:43:40--  https://pecl.php.net/get/libevent-0.1.0.tgz
    pecl.php.net adresine ulaşım sağlanıyor... 104.236.228.160
    pecl.php.net|104.236.228.160|:80'ye bağlanıyor... bağlı.
    HTTP isteği gönderildi, yanıt bekleniyor... 200 OK
    Boyut: 9806 (9.6K) [application/octet-stream]
    “libevent-0.1.0.tgz” olarak kaydediliyor.

100%[=======================================================>] 9,806 41.4K/s in 0.2s


2. Uzantı dosyasını çıkarın.
```shell
~# tar -zxvf libevent-0.1.0.tgz
package.xml
libevent-0.1.0/config.m4
libevent-0.1.0/CREDITS
libevent-0.1.0/libevent.c
....
  1. Kaynak dizinine gidin.

    ~# cd libevent-0.1.0/
  2. phpize komutunu çalıştırın.

    ~# phpize
    Aşağıdakiler için yapılandırılıyor:
    PHP Api Sürümü:         20090626
    Zend Modül Api No:      20090626
    Zend Uzantı Api No:     220090626
  3. configure komutunu çalıştırın.

    ~# ./configure
    long satırları ve -e'yi işleyebilen grep'i kontrol ediliyor... /bin/grep
    egrep'i kontrol ediliyor... /bin/grep -E
    bir çıktıyı kısaltmayan bir sed kontrol ediliyor... /bin/sed
    cc'nin olup olmadığını kontrol ediliyor... cc
    C derleyicisinin çalışıp çalışmadığını kontrol ediliyor... evet
    ...
  4. make komutunu çalıştırın.

    ~# /bin/bash /data/test/libevent-0.1.0/libtool --mode=compile cc  -I. -I/data/test/libevent-0.1.0 -DPHP_ATOM_INC -I/data/test/libevent-0.1.0/include
    ...
  5. make install komutunu çalıştırın.

    ~# make install
    Paylaşılan uzantılar yükleniyor:     /usr/lib/php5/20090626/
  6. ini dosyasını yapılandırın.

php --ini komutunu çalıştırarak php.ini dosyasının yerini bulun ve dosyaya extension=libevent.so ekleyin.