1. Deno, PHP betiklerini doğrudan çalıştırabilir mi?
Deno, başlangıçta JavaScript/TypeScript yorumlayıcısıdır; PHP kodunu kendi içinde yorumlayamayacak şekilde tasarlanmıştır. Bu nedenle doğrudan
deno run komutu ile PHP dosyası çalıştırılmaz.2. Deno ile PHP betiğini çalıştırmanın en basit yolu nedir?
deno run komutunun yanında -A (tam izin) ile subprocess API’si kullanarak PHP yorumlayıcısını çağırabilirsiniz:
Kod:
const process = Deno.run({
cmd: ["php", "script.php", "--arg1", "value"],
stdout: "piped",
stderr: "piped",
});
const output = await process.output();
console.log(new TextDecoder().decode(output));
process.close();
Bu yöntem, PHP betiğinin bağımsız bir süreç olarak çalışmasını sağlar.
3. PHP betiğini HTTP üzerinden çalıştırmak istiyorum. Nasıl yapılır?
Deno’da basit bir HTTP sunucusu oluşturup gelen isteği PHP'ye yönlendirebilirsiniz:
Kod:
import { serve } from "https://deno.land/std@0.202.0/http/server.ts";
serve(async (req) => {
const { pathname } = new URL(req.url);
const result = await Deno.run({
cmd: ["php", "handler.php", pathname],
stdout: "piped",
}).output();
return new Response(new TextDecoder().decode(result));
});
PHP'nin
handler.php dosyası gelen URL’yi işleyip çıktı üretir.4. PHP ile Deno arasında veri alışverişi yaparken JSON kullandığımda neye dikkat etmeliyim?
PHP’de:
PHP:
<?php
header('Content-Type: application/json');
echo json_encode(['msg' => 'selam']);
?>
Deno’da:
Kod:
const p = Deno.run({ cmd: ["php", "-r", "echo json_encode(['msg'=>'selam']);"], stdout: "piped" });
const data = new TextDecoder().decode(await p.output());
const obj = JSON.parse(data);
JSON çıktının UTF‑8 olması gerektiğine ve Deno’nun aynı şekilde decode etmesi gerektiğine dikkat edin.
5. Performans açısından Deno ile PHP integrasyonu sorunsuz mu?
PHP sürecinin başlatılması ek gecikme getirir. Çok sayıda kısa istek için PHP sürecini sürekli yeniden başlatmak yerine bir HTTP sunucusu (ör. Symfony, Laravel) çalıştırıp Deno’dan HTTP çağrısı yapmak daha verimlidir.
6. Güvenlik konusundaki riskler nelerdir?
Deno
nin subprocess API’si ile dış programlar çağırmak, doğru izin yönetimi gerektirir. -A yerine --allow-run` ile yalnızca ihtiyaç duyulan komutları izin veriniz. PHP betiklerinin “sınırlı” çalışma alanı içinde olduğundan emin olun.7. Deno ve PHP’yi aynı proje içinde paketlemek mümkün mü?
deno.json dosyasına tasks ekleyerek PHP betiklerini deno task php-run gibi çağırabilirsiniz. Ancak, bağımlılık yönetimi için composer.json ve deno.json’in birbirini etkilemediğini unutmayın.Deno ile PHP entegrasyonunu denemeye karar verdiğinizde, öncelikle basit bir subprocess örneğiyle başlamanız önerilir. Daha sonra servis tabanlı bir mimariye geçiş yapabilirsiniz. Bu çözümler arasında hangisi sizin projeniz için daha uygundur?