Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Bilder aus MySQL und im Filesystem speichern

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Bilder aus MySQL und im Filesystem speichern

    Hallo,

    ich habe in einer MySQL-DB eine Tabelle mit JPEG's
    und eine zweite Tabelle mit zugehörigen Personendaten.
    Jetzt möchte ich mit einem PHP Script alle Bilder auslesen, Nachnamen als Dateinamen vergeben und im Filesystem als JPEG abspeichern.

    Dazu benutze ich erstens die Datei showpic.php

    PHP-Code:
      $host "1.2.3.4";$user "xxx";$pass "yyy";$data "zzz";

      
    $CID mysqli_connect($host,$user,$pass);
      
    $DID mysqli_select_db($CID,$data);
        
      
    $id $_GET['id'];
      if(!
    $id) exit;

      
    $SQL="SELECT B_Data, B_Type FROM BILD WHERE B_P_Nr = $id";
      
      
    $result mysqli_query($CID,$SQL);
      if(!
    $result) exit;

      
    $row=mysqli_fetch_array($result,MYSQL_ASSOC);
      
    header("Content-type: {$row['B_Type']}");
      echo 
    $row['B_Data']; 
    um die Bilder aus der Datenbank darstellen zu können und zweitens das script schreiben.php

    PHP-Code:
      $host "1.2.3.4";$user "xxx";$pass "yyy";$data "zzz";

      
    $SQL "SELECT B_P_Nr,CONCAT(P_Nachname,'.jpg') ";
      
    $SQL.= "FROM PERSON INNER JOIN BILD ON P_Nr = B_P_Nr ";
      
      
    $CID mysqli_connect($host,$user,$pass);
      
    $DID mysqli_select_db($CID,$data);
      
    $RID mysqli_query($CID,$SQL);
        
       while(
    $ERG mysqli_fetch_array($RID,MYSQL_NUM))
           {
           
           
    /* Testzeile zur Ausgabe im Browser*/
           
    echo "<img src='showpic.php?id=$ERG[0]' />";

           
    ob_start();
           
    $fp fopen("showpic.php?id=$ERG[0]""rb");
           
    fpassthru($fp);
           
    fclose($fp);
           
    $file ob_get_contents();
           
    ob_end_clean();

           
    $fp fopen("$ERG[1]""wb+");
           
    fwrite($fp$file);
           
    fclose($fp);
     
           } 
    um auf das Filesystem des WEB-Servers (xampp-lite)
    zu schreiben.
    Die Bilder werden nun richtig aus der DB gelesen (weil sie mit der Testausgabe korrekt dargestellt werden).
    Im Verzeichnis liegen dann aber nur unbrauchbare Dateien (allerdings mit korrektem Dateinamen).
    Wenn ich anstelle von showpic.php ein Testbild.jpg (aus dem Dateisystem) lese und schreibe funktioniert das Script.
    Wer kann mir helfen ?


  • #2
    Wieso schreibst Du nicht gleich die Daten aus der DB ins File?
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Zitat von rimba Beitrag anzeigen
      PHP-Code:
             $fp fopen("showpic.php?id=$ERG[0]""rb"); 
      PHP glaubt, bei "showpic.php?id=$ERG[0]" handelt es sich um eine lokale Datei und sucht im Dateisystem eine Datei dieses Namens.

      Du glaubst, bei bei "showpic.php?id=$ERG[0]" handelt es sich um eine URL, auf die mittels einer HTTP-Anfrage zugegriffem wird.

      Einer von euch beiden irrt sich.
      Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

      Kommentar


      • #4
        okay, und wie könnt ich meinen Irrtum dann auflösen oder beseitigen?

        Kommentar


        • #5
          PHP-Code:
          $fp fopen("http://example.com/showpic.php?id=$ERG[0]""rb"); 
          Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

          Kommentar


          • #6
            na dann doch so einfach.hat prima funktioniert.
            Vielen Dank (gibt also doch keine schlaflose Arbeitsnacht)

            Kommentar


            • #7
              Zitat von nikosch Beitrag anzeigen
              Wieso schreibst Du nicht gleich die Daten aus der DB ins File?
              Diese Frage bleibt... oder ist die URL tatsächlich extern (und warum läuft sie dann mit ID's aus der lokalen Datenbank)?
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Zitat von lstegelitz Beitrag anzeigen
                Diese Frage bleibt... oder ist die URL tatsächlich extern
                Kann ja eigentlich nicht - wenn er den Pfad relativ angibt, um das Bild im Browser anzeigen zu lassen.

                Kommentar


                • #9
                  Ich vermute es wird gerade umgestellt von Speicherung in der Datenbank auf Speicherung im Dateisystem.
                  Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

                  Kommentar


                  • #10
                    Du gehst da ein wenig arg kompliziert vor...

                    PHP-Code:
                      $SQL "SELECT B_Data,B_P_Nr,CONCAT(P_Nachname,'.jpg') AS B_Name";

                    //...

                       
                    while($ERG mysqli_fetch_array($RID,MYSQL_NUM))
                           {
                                
                    file_put_contents($ERG['B_Name'], $ERG['B_Data']);
                           } 
                    So abgeändert sollte es auch funktionieren und du reduzierst den gesamten Schleifeninhalt auf eine Zeile und gewinnst massig Performance wiel nicht für jedes Bild ein neuer HTTP-Request gestartet wird.
                    "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                    Kommentar


                    • #11
                      ist ja wirklich noch einfacher (und schneller).
                      besten dank.

                      man darf nur nicht vergessen MYSQL_NUM in MYSQL_ASSOC zu ändern

                      PHP-Code:
                      while($ERG mysqli_fetch_array($RID,MYSQL_ASSOC))
                             {
                                  
                      file_put_contents($ERG['B_Name'], $ERG['B_Data']);
                             } 

                      Kommentar

                      Lädt...
                      X