COM / DCOM fehler
SorgenkindMech
- php
moins
ich bin mal wieder am verzweifeln ;(
folgende situation:
es geht darum, per PHP einen labeldrucker anzusteuern, was bisher auch immer funktionierte
leider funktioniert es jetzt nicht mehr, und ich weiß nicht, warum, da sich am rechner selbst meines wissens nach nichts geändert hat
das ganze funktioniert folgendermaßen:
es wird eim com-objekt des druckers geladen
danach wird eine template-datei geladen
in dieser werdendie entsprechenden werte verändert, und dann ausgedruckt
dazu folgender php-quelltext:
<?php
ignore_user_abort(1);
if(!isset($_POST['vorlage'])) $_POST['vorlage']="rtv";
$_POST['mnr_datum']=@$_POST['fznr'].@$_POST['mnr'].@$_POST['datum'];
$obj=new COM("BrssCom.Document") or die("<script language='javascript'> alert('Klasse konnte nicht geladen werden'); </script>");
$obj->Open("c:\rtv_p_touch\".$_POST['vorlage'].".lbl") or die("<script language='javascript'> alert('Datei konnte nicht geöffnet werden!'); </script>");
if($_POST['vorlage']=="rtv")
{
$felder=array("abnr", "fgnr", "mnr_datum");
}
elseif($_POST['vorlage']=="normal")
{
$felder=array("BARCODE", "artnr", "text1", "text2", "preis");
$_POST['text1']=substr($_POST['text'],0,37);
if(strlen($_POST['text'])>28) $_POST['text2']=substr($_POST['text'],37,18);
else $_POST['text2']="";
$_POST['preis']=$_POST['preis']."€";
}
elseif($_POST['vorlage']=="name")
{
$felder=array("NAME");
}
else
{
die("<script language='javascript'> alert('Es wurde eine falsche Vorlage übergeben!'); </script>");
}
foreach($felder as $feldindex => $feld)
{
if($feld!="BARCODE")
{
$index=$obj->GetTextIndex($feld);
if($index==-1) die("<script language='javascript'> alert('Fehler beim Finden des Textes ".$feld."!'); </script>");
else
{
$obj->SetText($index, $_POST[$feld]);
if($feld=="text")
{
}
}
}
else
{
if(!$obj->SetBarcodeData(0, $_POST[$feld]))
{
die("<script language='javascript'> alert('Fehler beim Ändern des Barcodes'); </script>");
}
}
}
if(!isset($_POST['anzahl'])) $_POST['anzahl']=1;
$obj->DoPrint(0,"RTV, ".$_POST['anzahl']);
$obj->Close();
$obj=null;
?>
<script language='javascript'>
// alert("gedruckt");
window.close();
</script>
dieses script lief bisher immer einwandfrei
das Javascrip ist deshalb, weil die datei in einn quasi nicht für den user nicht sichtbaren frame geladen wird
so, und die ausgabe des scripts:
<br />
<b>Fatal error</b>: Uncaught exception 'com_exception' with message 'Error [0x80020003] Mitglied nicht gefunden.
' in C:\Daten\Roll-tech Verwaltung\rtv.php:5
Stack trace:
#0 C:\Daten\Roll-tech Verwaltung\rtv.php(5): unknown()
#1 {main}
thrown in <b>C:\Daten\Roll-tech Verwaltung\rtv.php</b> on line <b>5</b><br />
sprich das ist die zeile, wo das objekt erstellt wird ...
ich kenn ja die meldung, von wegen die klasse konnte nicht geladen werden, aber die hier hatte ich noch nich
kleine hintergrund-infos:
OS: winXPPro
PHP: 5.1.2
das com-objekt wird interaktiv ausgeführt und hat für alle vorgänge volle sicherheitsberechtigungen (musste ich damals machen, damit der IIS-Prozess darauf zugreifen kann)
achja, http-server ist IIS 5.1, PHP als ISAPI-Modul
tja, und da steh ich nun und guck dumm aus der wäsche
wär froh wenn da jemand schonmal erfahrungen mit gemacht hat
PS: habe gerade mal das Beispielscript von der doku getestet:
<?php
// Word starten
$word = new COM("word.application") or die("Konnte Word nicht instantiieren");
print "Word geladen, Version \n";
//ein leeres Dokument öffnen
$word->Documents->Add();
//irgendetwas tun
$word->Selection->TypeText("Dies ist ein Test...");
$word->Documents[1]->SaveAs("Useless test.doc");
//Word schließen
$word->Quit();
//Das Objekt freigeben
$word->Release();
$word = null;
?>
(etwas gekürzt)
ausgabe:
Word geladen, Version
Fatal error: Uncaught exception 'com_exception' with message 'Unable to lookup `Documents': Fehler beim Zugriff auf OLE-Registrierung. ' in C:\Daten\Roll-tech Verwaltung\alt\com.php:7 Stack trace: #0 C:\Daten\Roll-tech Verwaltung\alt\com.php(7): unknown() #1 {main} thrown in C:\Daten\Roll-tech Verwaltung\alt\com.php on line 7
tja ....
hoffe jemand weiß was, bis denn dan
Hallo !
dieses script lief bisher immer einwandfrei
Dieses "bisher" finde ich interessant.
Was ist denn zwischen "bisher" und jetzt passiert ?
Wurde die Komponente, ggf mit axterner Proxy/Stub-dll auch wirklich neu registriert ( regsvr32 <dll> ) ?
Fatal error: Uncaught exception 'com_exception' with message 'Unable to lookup `Documents': Fehler beim Zugriff auf OLE-Registrierung. ' in
Es gibt ole-automation-konforme und nicht-konforme Interfaces. Documents ist eine offenbar eine enumeration. Sind das IDocuments oder IDispatches ?
Gibt's da eine .tlb ?
Hast Du Word auf dem Server installiert oder nur die dll kopiert ?
Um das Problem zu isolieren - also insbesondere vom PHP zu loesen - koenntest du' mal mit einem 3-Zeiler in einer ASP -Seite versuchen.
( serverseitiges JS )
var myobj = Server.CreateObject(...);
Gruss
Holger
hallöle, danke erstmal für deine antwort
ich habe mittlerweile herausgefunden, was sich geändert hat, nämlich die PHP-Version
das script funktioniert mit PHP 5.0.2, aber nicht mit 5.1.2, werde es nachher mit 5.2.0 versuchen
übrigens das mit word war ja nur ein test, um herauszufinden, ob es mit anderen objekten auch so ist, was sich ja dann rausstellte ...
das "socuments" ist laut doku des SDKs des druckers so zu verwenden, keine ahnung warum, funktioniert ja auch mit php 5.0.2 ;)
sowohl 5.0.2 als auch 5.1.2 hatten die gleichen php-ini-einstellungen ... seltsam oder?
naja, ich werd mal weiter testen ... bis dann erstmal
Hallo !
hallöle, danke erstmal für deine antwort
ich habe mittlerweile herausgefunden, was sich geändert hat, nämlich die PHP-Version
Versionen aendern "sich" nicht, die aendert jemand. Und ich wollte wissen welchee Massnahmendurchgefuehrt wurden.
das script funktioniert mit PHP 5.0.2, aber nicht mit 5.1.2, werde es nachher mit 5.2.0 versuchen
übrigens das mit word war ja nur ein test, um herauszufinden, ob es mit anderen objekten auch so ist, was sich ja dann rausstellte ...
?!?
Na ja; sysrtematisch ist diese Art der Fehlersuche nicht.
das "socuments" ist laut doku des SDKs des druckers so zu verwenden, keine ahnung warum, funktioniert ja auch mit php 5.0.2 ;)
sowohl 5.0.2 als auch 5.1.2 hatten die gleichen php-ini-einstellungen ... seltsam oder?
naja, ich werd mal weiter testen ... bis dann erstmal
Also, Du hast nichts von dem ausprobiert was ich Dir empfohlen hatte und hast meine Rueckfragen nicht beantwortet. Bon.
Jetzt hast Du aber etwas anderes hearusgefunden und weisst wieder nicht ob das den Fehler verursacht.
Frohes Suchen !
Gruss
Holger
Versionen aendern "sich" nicht, die aendert jemand. Und ich wollte wissen welchee Massnahmendurchgefuehrt wurden.
schon, nur war mir das nichtmehr ebwusst ;)
zu deinen massnahmen:
ja es war word auf dem rechner installiert
das script funktioniert mit PHP 5.0.2, aber nicht mit 5.1.2, werde es nachher mit 5.2.0 versuchen
übrigens das mit word war ja nur ein test, um herauszufinden, ob es mit anderen objekten auch so ist, was sich ja dann rausstellte ...
?!?
Na ja; sysrtematisch ist diese Art der Fehlersuche nicht.
naja, je nachdem wie mans sieht
ich wollte erstmal ausschließen, dass es an dem einen com-objekt liegt, also habe ich ein anderes getestet
da das auch nicht ging, bin ich dazu übergegangen zu prüfen, ob es vielleicht mit der php-version zusammenhängt
Also, Du hast nichts von dem ausprobiert was ich Dir empfohlen hatte und hast meine Rueckfragen nicht beantwortet. Bon.
naja, als ich dann schon herausgefunden hatte, dass es an den verschiedenen php-versionen liegt, war für mich der fall abgeschlossen, sozusagen
fakt ist:
php 5.0.2: funktioniert alles
php 5.1.2: hab ich nichts zum funktionieren bekommen
php 5.2.0: funktioniert alles
Jetzt hast Du aber etwas anderes hearusgefunden und weisst wieder nicht ob das den Fehler verursacht.
Frohes Suchen !
ähm doch die php-version ... ;)
was genau mit der 5.1.2 im magen liegt ist mir im moment eigentlich erstmal wurscht, weil funktioniert ja jetz ;)
oder meinst du es würde sich lohnen, da weiter nachzuforschen?
Gruss
Holger
gruß
der mech ;)
Hallo !
oder meinst du es würde sich lohnen, da weiter nachzuforschen?
Das haengt davon ab, wie wichtig die Anwendung ist.
Zumindest wuerde ich eine "saubere" Systemkonfiguration anstreben :
Die ganze Installationsprodzedur sauber dokumentieren und ggf verskripten.
Zuviel Aufwand ?
Dann sag mir bitte mal aus dem Stehgreif gegen welche MSVCRT Runtime sich Deine aktuelle PHP Version bindet. Oder ist die statisch gebunden?
:-)
Welche XML Parser Version vewendet sie ? Bringt sie eine eigene mit ?
Und ADO ( aks MS Data Access Components ) ? Haben die Vorversionen von PHP vielleicht Bibliotheken nach %SYSTEMROOT%/systems32 installiert ?
Wenn Du mehrfach Software (de-)installierst hast Du mit etwas Pech am Ende einen gordischen Knoten aus lauter verschiedenen Bibliotheksversionen, den Du nie entflochten kriegst.
Gruss
Holger