Apache HTTP Sunucusu Sürüm 2.4

Apache > HTTP Sunucusu > Belgeleme > Sürüm 2.4 > Modüller

# Apache Modülü mod_so

Açıklama: | Modüllerin ve çalıştırılabilir kodun sunucunun başlatılması veya yeniden başlatılması sırasında yüklenmesini sağlar.
Durum: | Eklenti
Modül Betimleyici: | so_module
Kaynak Dosyası: | mod_so.c
Uyumluluk: | Windows için bu bir temel modüldür (sunucu bunu daima içerir).

### Özet

Seçilen işletim sistemleri üzerinde bu modül Apache HTTP Sunucusunun yeniden derlenmesini gerektirmeden modüllerin Devingen Paylaşımlı Nesne (DSO) mekanizması üzerinden kullanılabilmesini sağlar.

Unix’te yüklenen kod genellikle paylaşımlı nesne dosyalarından (`.so` uzantılı dosyalar), Windows’ta ise ya `.so` ya da `.dll` uzantılı dosyalardan gelir.

### Uyarı

Apache HTTP Sunucusunun ana sürümlerinden biri (1.3, 2.0, 2.2, 2.4 gibi) için derlenmiş modüller genelde bir diğerinde çalışmaz. Genellikle aralarında API değişikliği sözkonusu olduğundan çalışması için modüllerde yeni sürüme göre değişiklik yapılması gerekir.

### Konular

- Yüklenebilir Modüllerin Windows için Oluşturulması

### Yönergeler

### Bugfix checklist

- httpd changelog
- Known issues
- Report a bug

## Yüklenebilir Modüllerin Windows için Oluşturulması

### Bilginize

Windows üzeinde yüklenebilir dosyalar genelde `.dll` sonekini alırlar. Apache httpd modülleri ise diğer platformlardaki gibi `mod_filanca.so` biçeminde isimlendirilmektedir. Bununla birlikte, üçüncü parti modüllerden bazılarının (PHP gibi) hala `.dll` sonekini kullandığı görülmektedir.

`mod_so` modülü `ApacheModuleFoo.dll` biçeminde isimlendirilmiş modülleri hala yüklemekteyse de yeni adlandırma uzlaşımı tercih edilmelidir. Yüklenebilir modülleri 2.0’a dönüştürüyorsanız, lütfen isimlerini de 2.0 uzlaşımına uygun hale getiriniz.

Apache httpd modül programlama arayüzü Unix ve Windows sürümleri arasında değişiklik göstermez. Unix için kullanılan çoğu modül hiç değişiklik yapmadan ya da çok küçük bir değişiklikle Windows’ta da çalışmaktadır. Çalışmayanlar Unix platformunun sahip olduğu ancak Windows platformunun sahip olmadığı nitelikleri kullanan modüllerdir.

Bir modül Windows’ta çalıştığı zaman, sunucuya iki şekilde yüklenebilir. Unix’te olduğu gibi, doğrudan sunucunun içinde derlenebilir. Windows için hazırlanan Apache httpd paketi, Unix için geçerli olan `Configure` betiğini içermediğinden modülün kaynak dosyası ApacheCore proje dosyasına, sembolleri de `os\win32\modules.c` dosyasına eklenmelidir.

İkinci yol ise modülü bir paylaşımlı kütüphane olarak çalışma anında `LoadModule` yönergesi ile yüklemek için bir DLL olarak derlemektir. Bu DLL modüller dağıtılabilir ve sunucuyu yeniden derlemek gerekmeksizin her Windows için Apache httpd kurulumunda çalışabilir.

Bir modül DLL’i oluşturmak için modülün kaynak dosyasında küçük bir değişiklik yapmak gerekir: Modül kaydının daha sonra oluşturulacak olan DLL’den ihraç edilebilmesi gerekir (aşağıya bakınız). Bunu yapmak için modülün modül kaydı tanımına (Apache httpd başlık dosyalarında tanımlanmış olan) `AP_MODULE_DECLARE_DATA` eklenmelidir. Örneğin, modülünüz

`module foo_module;`

diye bir satır içeriyorsa bunu,

`module AP_MODULE_DECLARE_DATA foo_module;`

olarak değiştirmelisiniz. Bunun yalnız Windows üzerinde etkili olduğunu ve Unix için modül kodunda bir değişiklik gerekmediğini unutmayınız. Ayrıca, `.DEF` dosyaları hakkında bilgi sahibi iseniz modül kodunda değişiklik yapmak yerine modül kaydını bu yöntemle de ihraç edebilirsiniz.

Artık modülü içeren bir DLL oluşturmaya hazırsınız. Bunu, libhttpd.dll paylaşımlı kütüphanesi derlenirken oluşturulan libhttpd.lib ihraç kütüphanesi ile ilintilemeniz gerekecektir. Ayrıca, Apache httpd başlık dosyalarının doğru konumlandığından emin olmak için derleyici seçeneklerinde değişiklik yapmanız gerekebilir. Bu kütüphaneyi sunucunuzun kök dizini altındaki `modules` dizininde bulabilirsiniz. En iyisi derleme ortamının doğru yapılandırıldığından emin olmak için ya ağaçta mevcut modüllerden birinin `.dsp` dosyasını gaspedersiniz ya da kendi `.dsp` dosyanızın ilintileme seçenekleriyle derleyicininkileri karşılaştırırsınız.

Artık modülünüzün DLL sürümünü oluşturmalısınız. DLL’i sunucunuzun kök dizininin altında bulunan `modules` dizinine yerleştirdikten sonra `LoadModule` yönergesi ile sunucunuza yükleyebilirsiniz.

## LoadFile Yönergesi

Açıklama: | Belirtilen nesne dosyasını veya kütüphaneyi sunucu ile ilintiler.
Sözdizimi: | `LoadFile dosya-ismi [dosya-ismi] ...`
Bağlam: | sunucu geneli, sanal konak
Durum: | Eklenti
Modül: | mod_so

`LoadFile` yönergesi ismi belirtilen kütüphaneleri veya nesne dosyalarını sunucu başlatılırken veya yeniden başlatılırken sunucu ile ilintiler. Yönerge, bazı modüllerin çalışması sırasında gereken ek kodların yüklenmesi için kullanılır. `dosya-ismi` olarak mutlak bir dosya yolu belirtilebileceği gibi `ServerRoot`’a göreli bir dosya yolu da belirtilebilir.

Örnek:

    LoadFile libexec/libxmlparse.so

## LoadModule Yönergesi

Açıklama: | Belirtilen nesne dosyasını veya kütüphaneyi sunucu ile ilintiler ve etkin modül listesine ekler.
Sözdizimi: | `LoadModule modül dosya-ismi`
Bağlam: | sunucu geneli, sanal konak
Durum: | Eklenti
Modül: | mod_so

`LoadModule` yönergesi `dosya-ismi` ile belirtilen nesne dosyasını veya kütüphaneyi sunucu ile ilintiler ve etkin modül listesine belirtilen `modül` ismiyle ekler. `modül`, modülün kaynak dosyasında `module` türündeki tek harici değişkenin ismi olup modül belgelerinde Modül Betimleyici olarak geçer.

Örneğin,

    LoadModule status_module modules/mod_status.so

satırı ile ismi belirtilen dosya `ServerRoot` dizini altındaki `modules` alt dizininden yüklenir.