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?

    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.

      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"); 

          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)?

              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.

                  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.

                    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