bob0108 Geschrieben 16. Januar 2006 Teilen Geschrieben 16. Januar 2006 Hallo, ich habe ein Problem mit Oracle interMedia. Ich weiß nicht wie ich mir die Bilder mit PHP ausgeben lassen kann die ich in der Datenbank gespeichert habe. Ich habe die Tabelle 'tbl_picture' erstellt: create tbl_picture ( picid number(8) not null, bild ordsys.ordimage not null, constraint pk_tbl_pic primary key (picid)); Ich habe in der Tabelle erfolgreich ein Bild gespeichert. Wie kann ich das Bild jetzt aus der Datenbank ausgeben lassen. Ich sitze schon zwei Tage daran und weiß einfach nicht mehr wo mein Fehler liegt. Kann mir jemand weiterhelfen oder weiß jemand einen guten Link wo alles erklärt wird. Das hier hab ich als Grundlage genommen: http://www.knebler.de/Hilfe-PHP/Oracle_Intermedia_mit_PHP_nutzen_.php3 Vielen Dank. Christian Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 16. Januar 2006 Teilen Geschrieben 16. Januar 2006 die im von dir angegebenen tutorial beschriebe funktion GetPicture liefert dir nach übergabe der bildnummer (IN_sessionid) den mimetype (OUT_Mimetype) als call by reference-parameter und den blob als returnwert. mit dem beschriebenen $BinaryBild = $blob->load(); werden dann in die php-variable $BinaryBild die raw-daten der bilddateidatei abgelegt und können mit der php-funktion echo in den ausgabepuffer geschrieben werden. voraussetzung ist, dass das aufrufende php-script den content-type richtig setzt, sodass der client (sprich, browser) auch was damit anfangen kann: header ("Content-Type: ".$sMimetag); echo $BinaryBild; im übrigen sollte es völlig egal sein, ob deine bilddaten über die ORDSYS (also oracle intermedia) verarbeitet werden oder nicht - es sind alles ohnehin daten typ BLOB oder CLOB. deine grundlage ist gut - bekommst du irgendwelche fehlermeldungen oder weisst du nicht wie du das implementieren kannst? s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bob0108 Geschrieben 17. Januar 2006 Autor Teilen Geschrieben 17. Januar 2006 Hallo, erstmal vielen Dank für deine schnelle Antwort. Wenn ich das Programm laufen lassen kommt leider nie eine Fehlermeldung. Alles läuft fehlerfrei durch nur am Ende wird kein Bild im Browser angezeigt. Ich habe mich zwar an die Vorgaben aus dem Tutorial gehalten aber vielleicht liegt es daran das beim speichern des Bildes in der Datenbank ein Fehler gemacht wurde. Hier ist mein Quellcode Teil1. Am Ende von diesem Script wird die Datei data_get aufgerufen die dann das Bild ausgeben soll. /* data_save */ /* Ab hier wird mit dem Speichern des Bildes in der DB begonnen */ ... $blob = OCINewDescriptor ($oraSession,OCI_D_LOB); $sql ="DECLARE iimage ordsys.ordimage; iblob BLOB; BEGIN INSERT INTO TBL_PICTURE (TITEL,FNAME,FHEIGHT,FWIDTH,FSIZE,FTYPE,PICTURE) VALUES ('$titel','$fname','$fheight','$fwidth','$fsize','$ftype', ordsys.ordimage(ordsys.ordsource(EMPTY_BLOB(), NULL, NULL, NULL, SYSDATE, 1), NULL, NULL, NULL, NULL, NULL, NULL, NULL) ); SELECT PICTURE INTO iimage FROM TBL_PICTURE WHERE TITEL = '$titel' FOR UPDATE; iblob := iimage.source.localData; :extblob := iblob; END;"; $sql = strtr($sql,chr(13).chr(10)," "); $oraParse=oci_parse($oraSession,$sql); oci_bind_by_name($oraParse,':extblob',&$blob,-1,OCI_B_BLOB); oci_execute($oraParse,OCI_DEFAULT); $blob->save($fname); oci_free_statement($oraParse); ocifreedesc($blob); /* Gültigkeitsprüfung der eingefügten Daten */ $sql=" DECLARE iImage ORDSys.ORDImage; BEGIN SELECT PICTURE INTO iImage FROM TBL_PICTURE WHERE TITEL = '$titel FOR UPDATE; iImage.process('scale=1'); iImage.setproperties; UPDATE TBL_PICTURE SET PICTURE=iImage WHERE TITEL = '$titel'; END;"; $sql = strtr ($ql,chr(13).chr(10)," "); $oraParse=oci_parse($oraSession,$sql); if (@OCIExecute ($oraParse,OCI_DEFAULT)) { ?> <script type="text/javascript"> alert("Bild erfolgreich hochgeladen!"); </script> <? oci_commit($oraSession); } else { ?> <script type="text/javascript"> alert("Unbekanntes Bildformat!"); </script> <? oci_rollback($oraSession); } oci_free_statement($oraParse); } } ?> <script type="text/javascript"> parent.funktion.location.href="head_add.php<?echo $send?>"; document.location.href ="data_list.php<?echo $send?>"; </script> <?php } /*____________________________________________________________________ JavaScript zum Abschicken des Formulars 'input' _____________________________________________________________________*/ ?> <script type="text/javascript" src="../javascript/_load_javascript_edit_picture_form.js"></script> <?php /*____________________________________________________________________ content_data() Seiteninhalt --> Formular zum Anlegen eines neuen Bildes und zum Bearbeiten von vorhandenen Bildern _____________________________________________________________________*/ function content_data() { require("../require/require_dbconnect.php"); global $send; if ($_GET["id"]!=0) { $id = $_GET["id"]; $cur = oci_new_cursor($oraSession); $sql = oci_parse($oraSession, "begin getPictureList.get_picture(:bind1,:getpicture_cv); end;"); oci_bind_by_name($sql, ":bind1", $id,32); oci_bind_by_name($sql, ":getpicture_cv",&$cur,-1,OCI_B_CURSOR); oci_execute($sql); oci_execute($cur); ocifetchinto($cur,&$getpicture_cv); $picid = $getpicture_cv[0]; $folder = $getpicture_cv[2]; $fname = $getpicture_cv[3]; $fheight = $getpicture_cv[4]; $fwidth = $getpicture_cv[5]; $fsize = $getpicture_cv[6]; $ftype = $getpicture_cv[7]; $fformat = $getpicture_cv[8]; $date_new = $getpicture_cv[9]; } ?> <form name="input" action="<? $self ?>?action=upload" method="post" enctype="multipart/form-data" onSubmit="return check()"> <table id="sub-table" width=650 cellpadding="0" cellspacing="0" border="0"> <tr><td> </td></tr> <tr> <td width=150 height="30">Arbeitstitel</td> <td width=500 height="30"> <input id="formbutton" type="text" name="arbeitstitel" value="<? echo $titel?>"> </td> </tr> <tr> <td width=150 height="30">Ordner</td> <td width=500 height="30"> <select name="range" size="1" id="formbutton"> <option id="formbutton"></option> <? require("../require/require_dbconnect.php"); $cur = oci_new_cursor($oraSession); $sql = oci_parse($oraSession, "begin getFolderList.list_folder(:listfolder_cv); end;"); oci_bind_by_name($sql, ":listfolder_cv",&$cur,-1,OCI_B_CURSOR); oci_execute($sql); oci_execute($cur); while (ocifetchinto($cur,&$listfolder_cv)) { $folderid = $listfolder_cv[0]; $ordner = $listfolder_cv[1]; ?> <option id="formbutton" name="auswahl" value="<? echo $folderid?>"><? echo $ordner?></option> <? } ?> </select> </td> </tr> <tr> <td width=150 height="30">Bilddatei</td> <td width=500 height="30"> <input type="hidden" name="MAX_FILES_SIZE" value="38000"> <input id="formbutton" type="file" name="datei"><br /> <input type="hidden" name="id" value="<?echo $_GET["id"]?>"> <input type="hidden" name="sid" value="<?echo $_GET["sid"]?>"> <input type="hidden" name="filename" value="<?echo $fname?>"> <input type="hidden" name="filesize" value="<?echo $fsize?>"> <input type="hidden" name="fileheight" value="<?echo $fheight?>"> <input type="hidden" name="filewidth" value="<?echo $fwidth?>"> <input type="hidden" name="filetype" value="<?echo $ftype?>"> <input type="hidden" name="action" value="update"> </td> </tr> <?php if ($fname!=""){ ?> <tr > <td width="150" height="24">Original Name<br /> der Bilddatei</td> <td height="24"><? echo $fname;?> </td> </tr> <tr> <td width="150"> </td> <td width="500"> <img src="data_get.php?id=<?echo $_GET["id"];?>" width="20%"> </td> </tr> ... Teil2 $oraSession = OCILogon("scott","tiger","oracleDB") or die("Es konnte keine Verbindung zur Datenbank hergestellt werden!"); $sSessionid = $_GET["id"]; session_cache_limiter("nocache"); $sMimetag = ""; $blob = OCINewDescriptor ($oraSession,OCI_D_LOB); $stmt = " DECLARE sMimeTag VARCHAR2(10); BEGIN :extblob:=GetPicture($sSessionid,'224'); :sMimetag:=sMimeTag; END; "; $stmt = strtr ($stmt,chr(13).chr(10)," "); $oraParse=OCIParse($oraSession,$stmt); OCIBindByName ($oraParse,':extblob',&$blob,-1,OCI_B_BLOB); OCIBindByName ($oraParse,':sMimetag',&$sMimetag,10); OCIExecute ($oraParse,OCI_DEFAULT); $BinaryBild = $blob->load(); OCIFreeStatement ($oraParse); OCICommit ($oraSession); OCILogOff ($oraSession); header ("Content-Type: ".$sMimetag); echo $BinaryBild; Die Funktion getPicture hab ich vom Tutorial übernommen. Kennst du vielleicht auch eine gute Seite in der das Speichern und Anzeigen von Bildern im Browser gut beschrieben ist? Vielen Dank,Christian Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 17. Januar 2006 Teilen Geschrieben 17. Januar 2006 if ([B][COLOR="Red"]@[/COLOR][/B]OCIExecute ($oraParse,OCI_DEFAULT)) { kannst du bitte mal das @ wegnehmen und nochmals ein bild raufladen. das @ unterdrückt nämlich seitens php allfällige fehlermeldungen. weiters würde ich verifizieren, ob im feld PICTURE wirklich daten vorhanden sind. nimm ein tool, das dir die daten anzeigt, z.b. toad oder den enterprise manager. du kannst dort z.b. auch ein sql-statement absetzen, das dir mit LENGTH die grösse der rohen bilddaten ausgibt o.ä. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bob0108 Geschrieben 17. Januar 2006 Autor Teilen Geschrieben 17. Januar 2006 Habe anstatt den TOAD mit dem PL/SQL Developer geschaut ob ein Bild in der Datenbank gespeichert ist. NEIN, kein Bild. Dank deinem Tipp weiß ich jetzt wenigstens das der Fehler nicht an der Ausgabe liegt. Weißt du wo der Fehler liegen könnte beim speichern des Bildes? Der Quellcode ist immer noch genause wie in meinem letzten Beitrag. zum @ Zeichen: habe das @ Zeichen weggemacht aber da kamen keine Fehlermeldungen und das Ergebnis ist nach wie vor das gleiche, kein Bild. Aber der Tipp war trotzdem gut,jetzt weiß ich wenigstens mal wofür das @ Zeichen in PHP steht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 17. Januar 2006 Teilen Geschrieben 17. Januar 2006 ich kann dir nur anbieten, wenn ich mal zeit habe, das script bei mir auszuprobieren ... muss aber erst schauen, ob ich intermedia zum laufen bekomme, und das wird sicher nicht vor ende jänner sein. versuche aber mal, zumindest $sql und $cur mit "echo" zu versehen, und poste die ausgabezeilen mal hier ... es könnte z.b. auch daran liegen, dass standardmässig zu wenige freie cursor zur verfügung stehen (das kann auch stillschweigend ohne fehlermeldungen passieren) noch ein lösungsvorschlag wäre, dass du die session mit "trace" verfolgst und die resultierenden tracefiles begutachtest und noch einen blick auch das alert_log wirfst. mehr wüsste ich jetzt aus dem stegreif auch nicht. :floet: s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bob0108 Geschrieben 17. Januar 2006 Autor Teilen Geschrieben 17. Januar 2006 habe jetzt eine PHP Fehlermeldung: ociexecute() [function.ociexecute]: ORA-29400: Data Cartridge-Fehler IMG-00705: Eingabeformat wird nicht unterstützt oder ist fehlerhaft ORA-06512: in "ORDSYS.ORDIMERRORCODES", Zeile 0 ORA-06512: in "ORDSYS.ORDIMG_PKG", Zeile 115 ORA-06512: in "ORDSYS.ORDIMG_PKG", Zeile 447 ORA-06512: in "ORDSYS.ORDIMAGE", Zeile 53 ORA-06512: in Zeile 10 in C:\Programme\xampp\htdocs\mycms\einfuegen.php on line 83 kannst du damit was anfangen? Das Format des Bildes war .jpg. Habe aber nicht nur ein Bild sondern verschiedene Bilder ausprobiert, auch andere Formate. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 17. Januar 2006 Teilen Geschrieben 17. Januar 2006 ORA-29400: Data Cartridge-Fehler IMG-00705: Eingabeformat wird nicht unterstützt oder ist fehlerhaft juhu, sowas aussagekräftiges wollte ich welche formate hast du versucht? TIFF, JPG, GIF, PNG? welches format hat dein JPG - ist das RGB oder CMYK? mach mal bitte ein "select * from v$version" damit ich die version sehe. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bob0108 Geschrieben 17. Januar 2006 Autor Teilen Geschrieben 17. Januar 2006 habe png und jpg probiert. das jpg bild ist rgb! SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production PL/SQL Release 9.2.0.1.0 - Production CORE 9.2.0.1.0 Production TNS for 32-bit Windows: Version 9.2.0.1.0 - Production NLSRTL Version 9.2.0.1.0 - Production Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 17. Januar 2006 Teilen Geschrieben 17. Januar 2006 schade, laut bug database bei metalink gibt es nur zwei bugs betreffend intermedia, aber jeweils bei 9.2.0.3 und 9.2.0.4. ich würde mal eine iTar aufmachen bzw. mich mit dem support kurzschliessen, vielleicht raten die ja zu einem upgrade/patch. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bob0108 Geschrieben 17. Januar 2006 Autor Teilen Geschrieben 17. Januar 2006 Naja, ich probier halt mal weiter mein Glück, aber was ist iTar? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 17. Januar 2006 Teilen Geschrieben 17. Januar 2006 Technical Assistance Request - oracle's bezeichnung für eine supportanfrage. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.