Jörk: Bilddatei auf meinem server uploaden und dann...

hi,

ich möchte meinem usern ermöglichen, dass sie ihre bilder auf meinen server hochladen und das diese dann auf meiner webseite angezeigt werden. wenn man jetzt diese seite aber aufruft soll da ein kleines bild angezeigt werden, klickt man auf das bild selber, dann wird es vergrößert.
jetzt ist mir auf mehreren webseiten aufgefallen das die bilder die in kleinformat angezeigt werden viel kleiner (kb-größe) sind als die bilder wenn man draufklickt, also wenn sie vergrößert sind. werden die irgendwie kompremiert oder werden auf den webseite sozusagen thumbs geladen???

  1. Hi,

    ja, Vorschaubildchen sind üblicherweise Thumbs (und sollten es auch sein). Wenn die Bilder direkt nach dem upload durch andere User sichtbar sein sollen, muß die Generierung der Thumbs natürlich automatisiert auf dem Server ablaufen.

    Ein paar Möglichkeiten dazu findest Du hier:

    http://www.shotgraph.com/
    http://www.phpfinder.de/archiv/scripts/?inc=overview&AreaID=66

    Gruß
    Roland

  2. Also,
    du weißt das dein Server PHP-fähig sein muss?

    Script für die User zum Hochladen: [bild_upload.html]

    <html>
     <head>
      <title>Bild-Upload</title>
     </head>

    <body bgcolor="#00002a" text="#ffffff">
      <form action='bild_upload.php' enctype='multipart/form-data'
      method='post'>
       <table align="center" width="85%">
        <tr>
         <td align="center" colspan="3">
          <input type='hidden' name='was' value='doit' class="button">
          <input type='hidden' name='action' value='upload'
          class="button">
         </td>
        </tr>
        <tr>
         <td width="40%" rowspan="2" style="vertical-align: top;">
         </td>
         <td width="20%" align="center">
          <input type='file' name='bild' value='' style="background-
          color: #7E867E; color: #ffffff; border-color: #000000; font-
          weight: bold;">
         </td>
         <td width="40%" rowspan="2" style="vertical-align: top;">
         </td>
        </tr>
        <tr>
        </tr>
        <tr>
         <td align="center" height="20" colspan="3"></td>
        </tr>
        <tr>
         <td align="center" colspan="3">
          <input type='submit' name='submit' value='Und hoch damit...'
          class="button">
         </td>
        </tr>
        <tr>
         <td align="center" height="20" colspan="3"></td>
        </tr>
        <tr>
         <td align="center" colspan="3">
          Upload-Datei auswählen
         </td>
        </tr>
       </table>
      </form>
     </body>
    </html>

    Script für die Auswertung: [bild_upload.php]

    <html>
    <head>
    <title>Bild-Upload</title>
    </head>

    <body bgcolor="#00002a" text="#ffffff">
    <?php
      if($was=="doit") {

    $size = $bild_size; // Größe der Datei

    $name = $bild_name; // Der Originalname

    $type = $bild_type; // Der MIME Type der Datei

    if(eregi("(jpg|jpeg|gif|tiff|png)$",$name)) {
        //legt die zugelassenen Bildformate fest
        if($size<100000000 AND $size!=0) {
        //legt die zugelassene Größe des Bildes fest
          copy($bild,$name); // Kopiert das Bild

    echo "Die Datei wurde erfolgreich hochgeladen.<br>";
          echo "Größe: ".$size." Byte<br>";
          echo "Name: ".$name."<br>";
          echo "MIME-Type: ".$type."<br>";
          echo "Ansehen: <a href='".$name."'>".$name."</a>";
          echo "<br><br><br>";
          echo "<a href="index.html" target="_self">Zurück zur
                Startseite</a>";
        } else {
          echo "Die Datei ist zu groß!";
        }
        } else {
        echo "Falsche Erweiterung: ".$name;
        }
      }
    ?>

    <?php
        $pic = "<img src='".$name."' alt='".$name."'><br>";
        $fp = fopen ("galerie.html","a");
        fwrite($fp,$pic);
        fclose($fp);
        $fp = fopen ("galerie.html","r");
        fclose($fp);
    ?>
    </body>
    </html>

    Kleine Erläuterung:

    1. Erste Datei unter bild_upload.html speichern.

    2. Zweite Datei unter bild_upload.php speichern.

    3. In der PHP-Datei[upload_bild.php] musst du bei
         if(eregi("(jpg|jpeg|gif|tiff|png)$",$name)) {...
         die Datei-Formate[jpg,jpeg,gif,tiff,png) durch deine Datei-
         Formate ersetzten, oder so lassen!

    4. In der PHP-Datei[upload_bild.php] musst du bei
         echo "<a href="index.html" target="_self">Zurück zur
               Startseite</a>";
         das index.html durch deine Startseite oder durch die Seite
         ersetzten, auf die der User danach kommen soll.

    5. In der PHP-Datei[upload_bild.php] musst du bei
         <?php
             $pic = "<img src='".$name."' alt='".$name."'><br>";
             $fp = fopen ("galerie.html","a");
             fwrite($fp,$pic);
             fclose($fp);
             $fp = fopen ("galerie.html","r");
             fclose($fp);
         ?>
         galerie.html durch die Seite ersetzen, auf der die Bilder
         angezeigt werden sollen!!!

    6. Setze die Serverrechte bei deinem Server auf 777 sonst gehts
         nicht!

    Bei weiteren Fragen steh ich dir gern zu Verfügung!

    --
    Nichtschecker
    webmaster@diemodellwelt.de
    http://www.diemodellwelt.de
    1. Hello,

      ############################################
                  #                                          #
                  #    Dieses Script ist gemeingefährlich    #
                  #                                          #
                  ############################################

      Script für die Auswertung: [bild_upload.php]

      <html>
      <head>
      <title>Bild-Upload</title>
      </head>

      <body bgcolor="#00002a" text="#ffffff">
      <?php
        if($was=="doit") {

      $size = $bild_size; // Größe der Datei

      $name = $bild_name; // Der Originalname

      $type = $bild_type; // Der MIME Type der Datei

      if(eregi("(jpg|jpeg|gif|tiff|png)$",$name)) {
          //legt die zugelassenen Bildformate fest
          if($size<100000000 AND $size!=0) {
          //legt die zugelassene Größe des Bildes fest
            copy($bild,$name); // Kopiert das Bild

      echo "Die Datei wurde erfolgreich hochgeladen.<br>";
            echo "Größe: ".$size." Byte<br>";
            echo "Name: ".$name."<br>";
            echo "MIME-Type: ".$type."<br>";
            echo "Ansehen: <a href='".$name."'>".$name."</a>";
            echo "<br><br><br>";
            echo "<a href="index.html" target="_self">Zurück zur
                  Startseite</a>";
          } else {
            echo "Die Datei ist zu groß!";
          }
          } else {
          echo "Falsche Erweiterung: ".$name;
          }
        }
      ?>

      <?php
          $pic = "<img src='".$name."' alt='".$name."'><br>";
          $fp = fopen ("galerie.html","a");
          fwrite($fp,$pic);
          fclose($fp);
          $fp = fopen ("galerie.html","r");
          fclose($fp);
      ?>
      </body>
      </html>

      ############################################
                  #                                          #
                  #    Dieses Script ist gemeingefährlich    #
                  #                                          #
                  ############################################

      1. Es arbeitet mit register_globals = on
         Es gibt bereits seit Jahren $_FILES[] und das hat mehrere
         Gründe! http://de.php.net/features.file-upload

      2. Es prüft nicht den Filetyp der hochgeladenen Datei
         dafür gibt es in PHP die Funktion getimagesize()
         http://de2.php.net/manual/de/function.getimagesize.php

      3. Es nimmt den Dateinamen des Bildes in den Pfad des Zielsystems
         auf. Man kann also alle Dateien in allen Pfaden kaputtschreiben,
         die der Apache beschreiben darf. Einziger Filter ist die Endung.
         Es gibt die Funktion basename()
         http://de2.php.net/manual/de/function.basename.php, mit der
         man den gültigen Namensanteil aus dem übertragenen "Namen" extra-
         hieren kann und ihn dann mit einem _festgelegten_ Zielverzeichnis
         zu einem Pfad kombinieren sollte!

      4. Es prüft nicht vorher, ob die Datei bereits vorhanden ist und
         wem sie gehört. Nur der "Uploder" einer Datei (und der Admin)
         sollte diese wieder entfernen / überschreiben dürfen

      5. Sonderzeichen im Bildnamen werden nicht maskiert
         >       echo "Name: ".$name."<br>";

      6. Der vom Client gemeldete Mime-Type ist vollkommen unerheblich
         auf Linuxsystemen gibt es dafür die Systemfunktion file (Programm)
         das man über den system() -Befehl aufrufen kann
         http://de.php.net/manual/de/function.system.php
         Jeder gute Provider sollte dieses Programm im safe_mode_exec_dir
         des Users bereitstellen (siehe php.ini) und safe_mode.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      1. ###################
        #gemeingefährlich?#
        ###################
        Ich will hier ja jetzt keinen Konflikt starten, aber
        gemeingefährlich ist das Script nicht!!!

        Meinetwegen kannst du prüfen ob die Datei vorhanden ist!
        [file_exists] aber das Script funktioniert einwandfrei!!!

        Sonst mach du halt mal einen anderen Vorschlag, ich wollt
        nur nicht mit "geh auf ... und bastels dir" kommen, sondern
        ich wollt mal ein fertiges Script abliefern! Fast alle hier
        geben einem Verweise auf irgendwelche Seiten, die der User, der
        eine präzise Frage gestellt hat nicht versteht!
        Nicht jeder kann PHP, JavaScript und die ganze andere Scheiße!!!

        MfG Philip

        --
        Nichtschecker
        webmaster@diemodellwelt.de
        http://www.diemodellwelt.de
      2. Und noch was!
        Ich schreib meine Scripte normalerweiße nicht für
        Linux!

        --
        Nichtschecker
        webmaster@diemodellwelt.de
        http://www.diemodellwelt.de
        1. Hello,

          Und noch was!
          Ich schreib meine Scripte normalerweiße nicht für
          Linux!

          Was interessiert MICH das? Ich habe nur geschrieben, dass es bei Linux (Unix) bereits ein Testprogramm für den Mime-Type gibt. Wenn es das für Windows nicht gibt, dann solltest Du eine eigene Funktion für PHP entwickeln. Die fehlt uns sowieso ganz dringend.

          Mich interessiert nur, dass hier jemand ein Script abliefert, das gemeingefährlich ist. Ein leichtgläubiger Verwender reißt sich damit riesige Sicherheitslücken in sein System. Und wenn Du nun immer noch behaupten solltest, dass dieses Script als Verwendungsvorschlag und nicht nur als Abschreckung gilt, dann bezeichne ich auch Dich als grob fahrlässig.

          Ich habe hier auch schon Lösungen angeboten, bei denen die Anderen ganz schnell halt geschrien haben. Und das Haltschrein war gut so!

          Ich denke, auch Du musst Dir das gefallen lassen.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          1. Jajaja,
            ich verstehe, mein Script ist ein Sceiß und
            es ist zu nichts gut!

            Tut mir leid das ich ein so "gemeingefährliches" Script ins Forum
            stell!

            --
            Nichtschecker
            webmaster@diemodellwelt.de
            http://www.diemodellwelt.de
            1. hi,

              Jajaja,
              ich verstehe, mein Script ist ein Sceiß und
              es ist zu nichts gut!

              offenbar hast du nicht verstanden, sonst würdest du ja jetzt nicht versuchen, sarkastisch zu sein.

              tom hat dir eine ganze reihe von gründen genannt, aus denen er dein script für abzulehnend hält.

              wenn du diese nicht durch schlüssige gegenargumente entkräften kannst, dann dürfte er wohl recht haben,

              Tut mir leid das ich ein so "gemeingefährliches" Script ins Forum
              stell!

              generell werden "vorgekaute" lösungen hier sowieso nur ungerne gesehen - aber wenn überhaupt, dann sollten sie schon nahezu perfekt sein, und das ist dein vorschlag nun mal nicht.
              akzeptiere das bitte.

              gruss,
              wahsaga