Ankündigung

Einklappen
Keine Ankündigung bisher.

Probiere nochmal hier : BLOB, PDF in Oracle DB

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probiere nochmal hier : BLOB, PDF in Oracle DB

    Halli Hallo,

    brauche mal Hilfe.

    Habe eine kleine PDF Datei auf einem Server generiert. Diese liegt jetzt in einem Verzeichnis auf dem Server.

    Jetzt muss ich die via ODBC oder OCI8 auf die DB hochladen.

    Einfach das PDF mit fopen und fgets rein laden und
    dann mit INSERT INTO reinpumpen geht nicht.

    Muss ich was besonderes beachten ?

    Gruss,

    Werner
    * * * * COMMODORE C64 BASIC V2 * * * *
    64K RAM SYSTEM 38911 BASIC BYTES FREE
    READY

  • #2
    Hm. Habe mal Code beigefügt !

    Code:
    $fp=fopen($dateiname,"r");
    $bdata=fgets($fp);
    fclose($fp);
    $conn = ocilogon("GEHEIM", "GEHEIM", "GEHEIM") or die("Fehler: Es konnte keine Verbindung zur Datenbank hergestellt werden.");
    $req = "INSERT INTO tblArchiv (AR_Objekt) VALUES (EMPTY_BLOB()) returning AR_Objekt into :data";
    $stmt = OCIParse($conn, $req);
    $lob = OCINewDescriptor($conn, OCI_D_LOB);
    OCIBindByName($stmt, ":data", $lob, -1, OCI_B_BLOB);
    OCIExecute($stmt, OCI_DEFAULT);
    if($lob->save($bdata)) {
     OCICommit($conn);
    }
    else 
    {
     echo "Probleme beim speichern des LOBs!";
    }
    OCIFreeDesc($lob);
    OCIFreeStatement($stmt);
    Bei dieser Version ist zwar ein Eintrag in der DB. Aber der Blob ist leer !??

    ?????

    HILFÄÄÄÄÄÄÄÄÄÄÄ
    * * * * COMMODORE C64 BASIC V2 * * * *
    64K RAM SYSTEM 38911 BASIC BYTES FREE
    READY

    Kommentar


    • #3
      Schon mal dies gelesen:

      16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?
      http://faq-phpfriend.de/q/q-db-blob.html

      Dabei ist es egal, ob es sich um Bilder oder PDF's handelt.

      Gruß
      phpfan

      Kommentar


      • #4
        Ich antworte mal mit einer Gegenfrage :

        "Ist das eine Antwort auf meine Frage ?"

        Nur weil es mal einer nicht für Sinnvoll gehalten hat muss es nicht falsch sein.
        Was ist denn mit Datenbankbackubs ? Wo werden dann die Dokumente gesichert ?


        Gruss,

        Werner
        * * * * COMMODORE C64 BASIC V2 * * * *
        64K RAM SYSTEM 38911 BASIC BYTES FREE
        READY

        Kommentar


        • #5
          Zitat von Solitaer
          Ich antworte mal mit einer Gegenfrage :

          "Ist das eine Antwort auf meine Frage ?"

          Nur weil es mal einer nicht für Sinnvoll gehalten hat muss es nicht falsch sein.
          Was ist denn mit Datenbankbackubs ? Wo werden dann die Dokumente gesichert ?


          Gruss,

          Werner
          Es gibt Leute die wollen halt nicht nur beim Problem selbst helfen, sondern gleich helfen, dass es richtig gemacht wird.

          Dafür muss man ein Extra-Backup machen, für die Daten im Dateisystem, was aber eh meist schneller geht via ftp oder ähnlichem, wie ein DB-Backup, aber es lohnt sich im Endeffekt.

          Tu dir selbst den gefallen investier mal 30-60 minuten und less alle threads die sich hier mit dem thema beschäftigen, bin grad zu faul sie rauszusuchen, wenn du danach immernoch binäre daten wie bilder etc in der Datenbank speichern willst, ist dir wohl nicht anders zu helfen. *g*

          mfg
          robo47
          [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
          | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

          Kommentar


          • #6
            Tja.

            Leider geht es nicht immer darum was ich möchte.

            Sondern meißt darum was ein Kunde will. Und der will halt Blobs.

            Gruss,
            * * * * COMMODORE C64 BASIC V2 * * * *
            64K RAM SYSTEM 38911 BASIC BYTES FREE
            READY

            Kommentar


            • #7
              Zitat von Solitaer
              Tja.

              Leider geht es nicht immer darum was ich möchte.

              Sondern meißt darum was ein Kunde will. Und der will halt Blobs.

              Gruss,
              Genau die Diskussion zu dem Thema hatten wir auch schonmal, ich mein du gehst ja auch nicht zu nem Automechaniker und sagst ihm wie er dein Auto zu reparieren hat, daher vieleicht mal mit dem Kunde reden.

              mfg
              robo47
              [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
              | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

              Kommentar


              • #8
                Entscheidungsfindung ist schon gefallen.

                Ich würde nur gerne mein Problem gelöst haben.
                Wenn mir da bei jemand helfen möchte gerne. Aber ich möchte keine
                neuen Ideen. PHP bietet die Möglichkeit, OCI8 bietet die Möglichkeit, Oracle bietet die Möglichkeit warum soll es dann nicht gehen.


                In sollchen Fällen mag zitiere ich immer gerne :

                UNMÖGLICH IST EIN WORT, MIT DEM MENSCHEN UM SICH WERFEN, FÜR DIE ES EINFACHER IST, DIE WELT SO ZU AKZEPTIEREN WIE SIE IST, STATT DAS RISIKO EINZUGEHEN SIE ZU VERÄNDERN.

                UNMÖGLICH IST KEINE TATSACHE, ES IST EINE MEINUNG. UNMÖGLICH IST KEINE FESTSTELLUNG. ES IST EINE HERAUSFORDERUNG. UNMÖGLICH IST POTENZIAL. UNMÖGLICH IST VERGÄNGLICH.
                Gruss,

                Werner
                * * * * COMMODORE C64 BASIC V2 * * * *
                64K RAM SYSTEM 38911 BASIC BYTES FREE
                READY

                Kommentar


                • #9
                  da ich mich mit oracle nicht auskenne mal ein paar allgemien ideen:

                  vor dem endgültigen abschicken des querys es mal ausgeben lassen?

                  var_dump($stmt);

                  ein error_reporting(E_ALL); an den anfang des scripts, vieleicht gibts ja ne fehlermeldung .....

                  mfg
                  robo47
                  [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
                  | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

                  Kommentar


                  • #10
                    Ausgeben geht. ohne prob.

                    Fehlermeldung nein !

                    Es wird ein leerer Eintrag erzeugt.

                    * * * * COMMODORE C64 BASIC V2 * * * *
                    64K RAM SYSTEM 38911 BASIC BYTES FREE
                    READY

                    Kommentar


                    • #11
                      steht was dazu im log von oracle ?
                      was meldet oracle zurück ?

                      muss leider sagen, dass ich mcih zu wenig mit oracle auskenne um da weitere tips zu haben.

                      mfg
                      robo47
                      [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
                      | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

                      Kommentar


                      • #12
                        http://forums.oracle.com/forums/thre...5149&tstart=-1

                        Kommentar


                        • #13
                          hm

                          Danke,

                          den thread hatte ich auch schon gefunden.

                          Leider arbeitet der da mit einer DB-Class.

                          und die anderen Scripts bringen auch nix.

                          Immer nur leere Blobs.

                          ????????????

                          Kann doch nicht sein das das nicht funktioniert...

                          Gruss,

                          Werner
                          * * * * COMMODORE C64 BASIC V2 * * * *
                          64K RAM SYSTEM 38911 BASIC BYTES FREE
                          READY

                          Kommentar


                          • #14
                            Bin weiter

                            Hallo,

                            bin einen Schritt weiter.

                            Habe auf der Oracle Seite ein Script gefunden das funktioniert.
                            Nun habe ich es einfach umgeschrieben und es funktioniert wieder nicht.

                            Es liegt wohl an der Information der Datei.

                            Hier mal der Oracle Code :

                            Code:
                            <?php
                            
                                    //
                                    // Sample form to upload and insert data into an ORACLE CLOB column
                                    // using PHP's Oracle 8 API.
                                    //
                                    // Based on http://www.php.net/manual/en/functio...descriptor.php
                                    // modified to work on CLOBs and use register_globals = Off.
                                    //
                                    // Before running this script, execute these statements in SQL*Plus:
                                    //   drop table myclobtab;
                                    //   create table myclobtab (c1 number, c2 clob);
                                    //
                                    // Tested with PHP 4.3.3 against Oracle 9.2
                                    //
                            
                                    if (!isset($_FILES['lob_upload'])) {
                                    ?>
                            
                                    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
                                    Upload file: <input type="file" name="lob_upload">
                                    <input type="submit" value="Upload">
                            
                                    </form>
                            
                                    <?php
                                    }
                                    else {
                            
                                      $myid = 1; // should really be a unique id e.g. a sequence number
                            
                                      $conn = OCILogon('secret', 'secret', 'secret');
                            
                                      // Delete any existing CLOB so the query at the bottom
                                      // displays the new data
                            
                                      #$query = 'DELETE FROM MYCLOBTAB';
                                      #$stmt = OCIParse ($conn, $query);
                                      #OCIExecute($stmt, OCI_COMMIT_ON_SUCCESS);
                                      #OCIFreeStatement($stmt);
                            
                                      // Insert the CLOB from PHP's temporary upload area
                            
                                      $lob = OCINewDescriptor($conn, OCI_D_LOB);
                                      $stmt = OCIParse($conn, "INSERT INTO \"tblArchiv\" (\"AR_Objekt\") VALUES(EMPTY_BLOB()) RETURNING \"AR_Objekt\" INTO :C2");
                                      OCIBindByName($stmt, ':C2', $lob, -1, OCI_B_BLOB);
                                      OCIExecute($stmt, OCI_DEFAULT);
                            
                                      // The function $lob->savefile(...) reads from the uploaded file.
                                      // If the data was already in a PHP variable $myv, the
                                      // $lob->save($myv) function could be used instead.
                                      if ($lob->savefile($_FILES['lob_upload']['tmp_name'])) {
                                        OCICommit($conn);
                                        echo "CLOB successfully uploaded\n";
                                      }
                                      else {
                                        echo "Could not upload CLOB\n";
                                      }
                                      $lob->free();
                                      OCIFreeStatement($stmt);
                            
                            
                                      OCILogoff($conn);
                                    }
                                    ?>
                            Das funktionier herforragend.

                            Wenn ich aber jetzt :



                            Code:
                             if ($lob->savefile($_FILES['lob_upload']['tmp_name'])) {
                            Ändere in

                            Code:
                             if ($lob->savefile("a.pdf") {
                            Weil die Datei ja schon auf dem Server vorhanden ist
                            dann geht es nicht mehr.

                            Hier mein abgeänderter Code :

                            Code:
                            <?php
                            
                                  
                                   
                            
                                      $myid = 1; // should really be a unique id e.g. a sequence number
                            
                                      $conn = OCILogon('secret', 'secret', 'secret');
                            
                                      // Delete any existing CLOB so the query at the bottom
                                      // displays the new data
                            
                                      #$query = 'DELETE FROM MYCLOBTAB';
                                      #$stmt = OCIParse ($conn, $query);
                                      #OCIExecute($stmt, OCI_COMMIT_ON_SUCCESS);
                                      #OCIFreeStatement($stmt);
                            
                                      // Insert the CLOB from PHP's temporary upload area
                            
                                      $lob = OCINewDescriptor($conn, OCI_D_LOB);
                                      $stmt = OCIParse($conn, "INSERT INTO \"tblArchiv\" (\"AR_Objekt\") VALUES(EMPTY_BLOB()) RETURNING \"AR_Objekt\" INTO :C2");
                                      OCIBindByName($stmt, ':C2', $lob, -1, OCI_B_BLOB);
                                      OCIExecute($stmt, OCI_DEFAULT);
                            
                                      // The function $lob->savefile(...) reads from the uploaded file.
                                      // If the data was already in a PHP variable $myv, the
                                      // $lob->save($myv) function could be used instead.
                            		  
                                      
                                     if ($lob->savefile("a.pdf")) {
                                        OCICommit($conn);
                                        echo "CLOB successfully uploaded\n";
                                      }
                                      else {
                                        echo "Could not upload CLOB\n";
                                      }
                                      $lob->free();
                                      OCIFreeStatement($stmt);
                            
                            
                                      OCILogoff($conn);
                                    
                            ?>
                            Bitte Hilfe...
                            * * * * COMMODORE C64 BASIC V2 * * * *
                            64K RAM SYSTEM 38911 BASIC BYTES FREE
                            READY

                            Kommentar


                            • #15
                              Warum funktioniert das Ganze wenn ich das File über ein Forumlar uploade. Aber wenn ich den Dateinamen angebe weil die Datei ja schon auf dem Server liegt, geht es nicht ?

                              Jemand ne Idee ?
                              * * * * COMMODORE C64 BASIC V2 * * * *
                              64K RAM SYSTEM 38911 BASIC BYTES FREE
                              READY

                              Kommentar

                              Lädt...
                              X