PHP ve COM

PHP, Win32 platformlarında COM ve DCOM nesnelere erişim için kullanılabilir.

Bazı hesaplamalar için bir DLL derledim. Bu DLL'li PHP altında çalıştırmanın bir yolu var mı?

Bu basit bir DLL ise bunu PHP altında çalıştırmanın bir yolu yoktur. Eğer DLL bir COM sunucusu içeriyor ve IDispatch arayüzünü gerçekliyorsa bu DLL'e erişebilirsiniz.

'Unsupported variant type: xxxx (0xxxxx)' iletisinin anlamı nedir?

Düzinelerce VARIANT türü ve bunların birleşimleri vardır. Bunların çoğu desteklenmekteyse de bir kısmı halen gerçeklenme aşamasındadır. Diziler tamamen desteklenmemektedir. PHP ve COM arasında sadece tek boyutlu diziler aktarılabilmektedir. Lütfen bunu bir hata olarak raporlayın (hala raporlanmamışsa) ve bunu yaparken mümkün olduğunca fazla bilgi verin.

PHP'de görsel nesnelerle çalışmak mümkün müdür?

Genelde mümkündür, fakat PHP'deki gibi çoğunlukla HTTP sunucusu bağlamında işlem yapan bir betik dili olarak kullanılırlar. Bu bakımdan görsel nesneler hiçbir zaman sunucunun masaüstünde görünmezler. PHP'yi uygulama yazmak için kullanacaksanız (PHP-GTK örneğinde olduğu gibi), görsel nesnelerle COM üzerinden çalışmak için herhangi bir sınırlama yoktur.

Bir COM nesnesini bir oturumda saklayabilir miyim?

Hayır, saklayamazsınız. COM nesne örnekleri birer özkaynak olarak ele alınır. Bu bakımdan sadece tek betiklik bir bağlamda kullanılabilirler.

COM hatalarını yakalayabilir miyim?

COM eklentisi sizin de yakalayabileceğiniz com_exception istisnalarını yakalar. Bundan sonra ne yapılacağını belirlemek için code üyesini inceleyebilirsiniz.

COM hatalarını PHP tarafından sağlanan yollarla (@, track_errors, ...) yakalamak mümkün değildir.

Perl'de olduğu gibi PHP betiklerinden DLL dosyaları üretebilir miyim?

Hayır, maalesef PHP'de böyle bir araç yoktur.

'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' iletisininin anlamı nedir?

Bu hata pek çok sebepten ortaya çıkabilir:

  • CLSID yanlıştır.
  • İstenen DLL yoktur.
  • İstenen bileşen IDispatch arayüzünü gerçeklemiyordur.
Bir COM nesnesini bir uzak sunucudan nasıl çalıştırabilirim?

Tıpkı bir yerel nesne gibi çalıştırabilirsiniz. Tek yapacağınız, COM kurucusuna ikinci bağımsız değişken olarak uzak makinenin IP adresini aktarmaktır.

php.ini dosyanızda com.allow_dcom=true atamasını yapmış olmalısınız.

'DCOM is disabled in C:\path...\scriptname.php on line 6' iletisini alıyorum. Ne yapabilirim?

php.ini dosyanızı düzenlemek için açıp com.allow_dcom=true atamasını yapın.

Bir ActiveX nesnesini PHP ile bir sayfaya yüklemek ve kullanmak mümkün müdür?

Bunun için PHP ile bir şey yapılamaz. HTML belge tarafından istendikleri takdirde ActiveX nesneler istemci tarafında yüklenirler. PHP betiğiyle bir ilgileri olmadığından sunucu taraflı doğrudan etkileşim mümkün değildir.

Bir bileşenin çalışan bir örneğini almak mümkün müdür?

Bu, takma adların yardımı ile mümkündür. Aynı yazı örneği için çok sayıda başvuru edinmek için örneği şöyle oluşturabilirsiniz:I

<?php
$yazı
= new COM("C:\docs\yazı.doc");
?>

Çalışan bir örnek olmadığı takdirde bu yeni bir örnek oluşturur, aksi takdirde çalışan örnek için bir başvuru döndürür.

COM nesnesinden gönderilen bir olayı işleme sokmanın bir yolu var mıdır?

Bir olay alıcıyı tanımlayabilir ve bunu com_event_sink() kullanarak bağlayabilirsiniz. PHP'nin olay alıcı sınıfının bir iskeletini üretmesi için com_print_typeinfo() işlevini kullanabilirsiniz.

Birden fazla arayüz içeren bir COM nesnesinin bir yöntemini çağırmaya çalışırken sorunlarla karşılaşıyorum. Ne yapabilirim?

Yanıt pek tatmin edici değil biliyorum. Aslında tam olarak ne yapılacağını bilmiyorum ama yapılabilecek bir şeyler olmalı. Bu konuda bilgisi olar biri varsa lütfen » bana bildirsin. :)

PHP, COM ile çalıştığına göre COM+ ile de çalışır, değil mi?

COM+, COM'un bileşenlerini MTS ve MSMQ üzerinden yönetmek için bir arayüz ile genişletir. PHP'nin bu tarz nesneleri desteklemesi için yapacağı özel bir şey yoktur.

PHP, COM nesnelerle çalıştığına göre, özkaynakları yönetmek üzere MTS'yi PHP ile birlikte kullanmayı düşünebilir miyiz?

PHP henüz MTS hareketlerini işleme sokamamaktadır. Bu bakımdan, bir hata oluşursa hareketi başa sarmak mümkün değildir. MTS hareketlerini destekleyen bileşenleri kullanmak niyetindeyseniz hareket yönetimini kendiniz gerçeklemek zorundasınız.

To Top