5 puan yazan xguru 2025-05-31 | 3 yorum | WhatsApp'ta paylaş
  • Node.js uygulaması içinde bir PHP uygulamasını aynı süreçte çalıştıran ve ağ bağlantısı olmadan Node.js ile PHP arasında iletişim kurulmasını sağlayan modül
    • Çift yönlü iletişim, hibrit mimari, eski PHP varlıklarından yararlanma ve geçiş süreçlerini kolaylaştırır
    • Bu sayede WordPress'i Next.js frontend'iyle entegre etmek gibi çeşitli hibrit web uygulaması mimarileri kurulabilir
  • Asenkron yöntem (handleRequest) ve senkron yöntem (handleRequestSync) desteği sunar (senkron yöntem Node.js thread'ini bloklar)
  • Öncelikli olarak x64 Linux, x64/arm64 macOS ortamlarını destekler ve bazı PHP ile ilgili sistem kütüphanelerinin kurulmasını gerektirir
  • Request/Response/Headers gibi HTTP nesneleri Node.js içinde doğrudan oluşturulup işlenebilir; böylece PHP uygulamalarıyla doğal entegrasyon sağlanır
  • Kullanım yöntemi
    // `Php` örneği oluşturduktan sonra `handleRequest()` ile PHP isteğini işle  
    // `Request`, `Response` nesneleriyle HTTP istek/yanıt verisini doğrudan yönet  
    import { Php, Request } from '@platformatic/php-node'  
    
    const php = new Php()  
    const request = new Request({  
      url: 'http://example.com/foo/bar',  
      headers: { 'X-Test': ['Hello, from Node.js!'] }  
    })  
    const response = await php.handleRequest(request)  
    console.log(response.body.toString())  
    
  • Kullanım örnekleri
    • PHP tabanlı CMS'leri (WordPress vb.) Node.js (Next.js vb.) frontend'leriyle entegre etmek veya eski PHP uygulamalarını kademeli olarak Node.js'e taşımak için kullanılabilir
    • İki ortam arasında ağ overhead'i olmadan bellek içi iletişim sağlar; API gateway, SSR ve özel backend entegrasyonları için uygundur
  • API'ler
    • Php sınıfı
      • new Php(config): docroot gibi ayarları içerebilir
      • php.handleRequest(request): asenkron istek işleme (Promise döndürür)
      • php.handleRequestSync(request): senkron işleme (thread bloklayıcı)
    • Request sınıfı
      • HTTP method, url, headers, body belirtilebilir
      • Her özelliğe doğrudan erişilebilir (ör. request.method, request.body)
    • Response sınıfı
      • status, headers, body, log gibi özellikler içerir
      • Manuel olarak oluşturulabilir (test ve hata işleme için kullanışlı)
    • Headers sınıfı
      • set, add, get, getAll, has, delete gibi çeşitli HTTP header yönetim metotlarını destekler
      • entries, keys, values, forEach gibi iterator API'leriyle header'ları topluca işlemek mümkündür

3 yorum

 
nemorize 2025-05-31

Pek cazip bir seçenek gibi görünmüyor...

PHP'nin varsayılan olarak tükettiği bellek miktarı da epey yüksek, başlatma maliyeti de oldukça pahalı; bu yüzden mutlaka uygun şekilde yönetilmesi gerekiyor. Node ile aynı süreç içinde, özellikle de mevcut uygulamadaki gibi PHP'nin tamamını native modülün içine gömen bir yapıda, yükün çok daha fazla artacağı anlaşılıyor.

Ben olsam php-fpm'i ayrı bir süreç olarak tutar, onun yerine FastCGI istemcisini JS ile yazıp öyle işlerdim.

 
letaem77a 2025-05-31

Bu kütüphane AWS Lambda'nın Node.js runtime'ıyla iyi uyum sağlar mı?

Eğer uyumluysa, sonuçta PHP'yi AWS Lambda üzerinde serverless olarak da çalıştırmak mümkün olabilir gibi görünüyor.

 
savvykang 2025-05-31

Node.js ile birlikte kullanmak için özel bir neden yoksa, PHP runtime'ını Lambda'ya da dağıtabilirsiniz: https://bref.sh