- Konu sahibi
- #1
İlk olarak PHP’nin web sunucusu tarafından kullanılan
OPcache, PHP dosyalarının her istekte yeniden derlenmesi yerine oluşturulan opcode’ları bellekte tutar. PHP’nin güncel kurulumlarında çoğu zaman yerleşik gelir; ancak eklenti yüklenmemişse önce PHP paketinizin OPcache bileşenini kurmanız veya barındırma sağlayıcınızdan etkinleştirilmesini istemeniz gerekir.
Önce hangi PHP yapılandırmasının kullanıldığını belirleyin. SSH erişiminiz varsa aşağıdaki komut, komut satırındaki PHP’nin
Bu dosya, web sunucusunun kullandığı dosyayla aynı olmak zorunda değildir. Web tarafını kontrol etmek için geçici olarak, sitenizin herkese açık dizinine aşağıdaki dosyayı
Dosyayı tarayıcıda açtığınızda
Kullandığınız PHP sürümüne ait
Linux sunucuda PHP-FPM kullanıyorsanız yapılandırmayı kaydettikten sonra PHP-FPM’yi yeniden başlatın. Servis adı dağıtıma ve PHP sürümüne göre değişebileceği için örneğin
Apache’nin PHP modülüyle çalışıyorsanız Apache’yi, Nginx ve PHP-FPM birlikte kullanılıyorsa genellikle PHP-FPM’yi yeniden başlatmanız gerekir. Paylaşımlı hostingde bu yetkiniz yoksa
Windows’ta PHP dağıtımının kullandığı
Geçici kontrol dosyasını daha sınırlı bilgi gösterecek şekilde de hazırlayabilirsiniz:
Bu dosyayı web üzerinden açtığınızda “OPcache etkin.” mesajını görmeniz, web SAPI’si için OPcache’nin çalıştığını gösterir. Önbellekteki script sayısının başlangıçta sıfır olması tek başına hata değildir; uygulamanızın PHP dosyaları çalıştırıldıkça bu sayı artabilir. “Eklenti yüklü değil” sonucu alırsanız ilgili PHP SAPI’sinde OPcache yüklenmemiştir. “Yüklü ancak etkin değil” sonucu ise
Aşağıdaki ayrım, kontrol sonucunu yorumlamayı kolaylaştırır:
Kontrolden sonra hem
php.ini dosyasını bulun; opcache.enable=1 ayarını ekleyip kaydedin ve PHP’yi çalıştıran servisi yeniden başlatın. Ardından OPcache’nin gerçekten web isteklerinde etkin olduğunu phpinfo() veya opcache_get_status() ile doğrulayın. Komut satırında php -v çıktısının OPcache’yi göstermesi tek başına yeterli değildir; CLI ve web sunucusu farklı PHP yapılandırmaları kullanabilir.OPcache’yi etkinleştirme
OPcache, PHP dosyalarının her istekte yeniden derlenmesi yerine oluşturulan opcode’ları bellekte tutar. PHP’nin güncel kurulumlarında çoğu zaman yerleşik gelir; ancak eklenti yüklenmemişse önce PHP paketinizin OPcache bileşenini kurmanız veya barındırma sağlayıcınızdan etkinleştirilmesini istemeniz gerekir.
Önce hangi PHP yapılandırmasının kullanıldığını belirleyin. SSH erişiminiz varsa aşağıdaki komut, komut satırındaki PHP’nin
php.ini konumunu gösterir:
Bash:
php --ini
Bu dosya, web sunucusunun kullandığı dosyayla aynı olmak zorunda değildir. Web tarafını kontrol etmek için geçici olarak, sitenizin herkese açık dizinine aşağıdaki dosyayı
opcache-kontrol.php adıyla yükleyin:
PHP:
<?php
phpinfo();
Dosyayı tarayıcıda açtığınızda
Loaded Configuration File satırı web isteklerinde kullanılan php.ini yolunu gösterir. Aynı sayfada Zend OPcache bölümünü arayın. Dosyayı işlem tamamlanınca silin; phpinfo() sunucunun PHP yapılandırması hakkında gereğinden fazla bilgi gösterebilir.Kullandığınız PHP sürümüne ait
php.ini dosyasını yönetici yetkisiyle açın ve mevcut ayarları tekrar etmeyecek şekilde en azından şunları ekleyin veya değerlerini düzeltin:
INI:
opcache.enable=1
opcache.validate_timestamps=1
opcache.revalidate_freq=2
opcache.enable=1 web istekleri için OPcache’yi açar. opcache.validate_timestamps=1 dosyaların değişip değişmediğinin kontrol edilmesini sağlar; bu ayar geliştirme sırasında eski kodun sunulmasını önlemeye yardımcı olur. opcache.revalidate_freq=2 dosya değişikliklerinin en fazla yaklaşık iki saniyelik kontrol aralığıyla fark edilmesini sağlar. Üretimde bu değeri artırmak mümkün olsa da validate_timestamps kapatılırsa dosya değişikliklerinin etkili olması için OPcache sıfırlanmalı veya PHP servisi yeniden başlatılmalıdır.Linux sunucuda PHP-FPM kullanıyorsanız yapılandırmayı kaydettikten sonra PHP-FPM’yi yeniden başlatın. Servis adı dağıtıma ve PHP sürümüne göre değişebileceği için örneğin
php8.3-fpm adını kendi sisteminizdeki sürümle değiştirin:
Bash:
sudo systemctl restart php8.3-fpm
Apache’nin PHP modülüyle çalışıyorsanız Apache’yi, Nginx ve PHP-FPM birlikte kullanılıyorsa genellikle PHP-FPM’yi yeniden başlatmanız gerekir. Paylaşımlı hostingde bu yetkiniz yoksa
php.ini, .user.ini veya kontrol panelindeki PHP ayarları kullanılabilir; hangi yöntemin geçerli olduğu sunucunun yapılandırmasına bağlıdır.Windows’ta PHP dağıtımının kullandığı
php.ini dosyasına şu ayarları ekleyin ve PHP’yi sağlayan web sunucusunu yeniden başlatın:
INI:
opcache.enable=On
opcache.enable_cli=On
opcache.enable_cli=On yalnızca CLI işlemlerini, yani php script.php gibi komut satırı çalıştırmalarını etkiler. Web sitesi için asıl belirleyici ayar opcache.enable değeridir. OPcache eklentisi hiç görünmüyorsa Windows PHP paketinde php_opcache.dll dosyasının bulunduğunu ve ilgili PHP yapılandırmasında eklentinin yüklendiğini kontrol edin; dosya yoksa aynı sürüm ve mimariye uygun PHP paketini kurmanız gerekir.Etkinleştirildiğini doğrulama
Geçici kontrol dosyasını daha sınırlı bilgi gösterecek şekilde de hazırlayabilirsiniz:
PHP:
<?php
header('Content-Type: text/plain; charset=utf-8');
if (!function_exists('opcache_get_status')) {
exit("OPcache eklentisi yüklü değil veya bu SAPI için kullanılamıyor.\n");
}
$status = opcache_get_status(false);
if ($status === false) {
exit("OPcache yüklü ancak etkin değil.\n");
}
echo "OPcache etkin.\n";
echo "Önbellekteki script sayısı: " . ($status['opcache_statistics']['num_cached_scripts'] ?? 0) . "\n";
Bu dosyayı web üzerinden açtığınızda “OPcache etkin.” mesajını görmeniz, web SAPI’si için OPcache’nin çalıştığını gösterir. Önbellekteki script sayısının başlangıçta sıfır olması tek başına hata değildir; uygulamanızın PHP dosyaları çalıştırıldıkça bu sayı artabilir. “Eklenti yüklü değil” sonucu alırsanız ilgili PHP SAPI’sinde OPcache yüklenmemiştir. “Yüklü ancak etkin değil” sonucu ise
opcache.enable değerinin kapalı olduğunu, yanlış php.ini dosyasının düzenlendiğini veya servis yeniden başlatılmadığını gösterir.Aşağıdaki ayrım, kontrol sonucunu yorumlamayı kolaylaştırır:
| Kontrol sonucu | Anlamı | Sonraki işlem |
|---|---|---|
| Zend OPcache görünüyor ve OPcache etkin | Web istekleri için OPcache çalışıyor | Kontrol dosyasını silin; performans ayarlarını uygulamanıza göre düzenleyin |
| CLI’de etkin, web’de kapalı | CLI ve web farklı PHP yapılandırması kullanıyor | Web tarafındaki Loaded Configuration File yolunu düzenleyip PHP servisini yeniden başlatın |
| OPcache eklentisi görünmüyor | Eklenti yüklenmemiş veya farklı PHP sürümüne ait yapılandırma kullanılıyor | PHP sürümüne uygun OPcache paketini yükleyin ya da hosting desteğine sürüm ve phpinfo() çıktısıyla başvurun |
| Kod değişiklikleri hemen görünmüyor | Eski opcode’lar önbellekte kalmış olabilir | Önbelleği sıfırlayın veya PHP-FPM/web sunucusunu yeniden başlatın; geliştirmede timestamp doğrulamasını açık tutun |
phpinfo() dosyasını hem de durum kontrol dosyasını sunucudan kaldırın. Geliştirme ve üretim ortamlarında aynı ayarları körü körüne kullanmayın: opcache.validate_timestamps=0 üretimde ek kontrol maliyetini azaltabilir, ancak dosya değişikliklerinin otomatik fark edilmesini engeller. Bu ayarı kullanıyorsanız her dağıtımdan sonra PHP-FPM’yi veya ilgili PHP çalışanlarını yeniden başlatacak bir işlem ekleyin.