2011-07-12 2 views
2

J'utilise un ancien objet COM/contrôle ActiveX dans une application PHP. Il fonctionne sous Windows/Apache. Normalement, tout va bien, mais parfois je reçoisProblèmes d'objets COM aléatoires PHP sur WAMP

Impossible de créer l'objet COM 'TTF161.TTF1': Objektserver wird beendet, wenn der OLE-Dienst ihn aufruft.

La partie allemande du message signifie quelque chose comme ObjectServer se termine lorsque le service OLE appelle ce.

J'ai essayé d'inclure la création de l'objet avec try-catch mais cela ne fonctionne pas.

Le problème se produit de manière aléatoire avec la même requête. Donc, il n'est pas lié à quelque chose de la logique de programmation et je suppose que cet ancien composant est juste un peu bogué et échoue de temps en temps. Mais je voudrais gérer cette situation comme essayer à nouveau ou donner à l'utilisateur un meilleur message d'erreur. Je pourrais aussi imaginer qu'il est lié au nombre de threads ou de processus Apache. Le journal des événements n'indique pas anyhting et le journal des erreurs Apache est vide.

J'apprécierais n'importe quelle indication comment je peux manipuler/attraper le problème ou où je pourrais trouver plus d'information.

+0

Quelle version de PHP exécutez-vous? – JPW

+1

Traduction française: "Le serveur d'objets s'arrête lorsque le service OLE le contacte", voir http://finderr.net/search – JPW

+0

@JPW: Si cela vous intéresse toujours, cela se produit sur PHP 5.2. – ZoolWay

Répondre

1

Le code suivant fonctionne pour moi (Win XP SP3, PHP 5.2.17 (cli) (construit: 6 janvier 2011 17:37:45)):

<?php 
    try 
    { 
    echo "Trying to create object"."\r\n"; 
    $obj = new COM("FailingObject"); 
    echo "Object created"; 
    } 
    catch(com_exception $e) 
    { 
    echo "Caught exception"."\r\n"; 
    $c = $e->getCode(); 
    $m = $e->getMessage(); 
    echo "Error Code: ".dechex($c)."\r\n"; 
    echo $m; 
    } 
?> 

L'exécution de ce script en utilisant PHP sur la ligne de commande donne le résultat attendu:

Essayer de créer un objet
exception Caught
code d'erreur: 80080008
Impossible de créer l'objet COM `FailingObject ': serveur d'objets est stopp ing lorsque
contacts de service OLE, il

L'objet testé "FailingObject" est un objet simple ATL COM qui utilise

HRESULT FinalConstruct() 
{ 
    return CO_E_SERVER_STOPPING; 
} 

pour simuler une erreur lors de la création d'objets. Ma meilleure estimation est (et je pourrais être complètement faux avec ceci) que dans votre cas l'erreur n'est pas jetée par la création d'objet mais par un appel COM différent quelque part dans PHP qui n'est pas alors manipulé correctement.

Vous pouvez envisager de générer un rapport de bogue pour ce problème, car vous devriez normalement être en mesure d'intercepter l'erreur.