Warum kostenlos registrieren?

Nur als registriertes Mitglied hast Du vollen Zugriff auf alle Funktionen unserer Website. So kannst Du eigene Fragen stellen und hast die volle Übersicht über neue interessante Themen im Forum.
Jetzt kostenlos registrieren.

Login


Datei Upload in PHP

Programmier-Tipps und -Tricks. Artikel zum Thema Java, PHP, C++, Delphi, VB, etc.

Datei Upload in PHP

Beitragvon CoolCasimir am 29.10.2004, 17:04

Hi all,

viele Leute haben Interesse an einem Dateiupload in PHP, jedenfalls bin ich schon oft darauf angesprochen worden.
Da ich ein solches Uploadscript mal verfasst habe, will ich es niemandem länger vorenthalten.

Getestet habe ich dieses auf Linux und auf Windows Webservern mit PHP 4 - 5 allerdings ohne Safemodus. Es kam jeweils der Apache zum Einsatz.
Tested Browsers: IE 6.0; Firefox 1.0; Opera Version 7.54
Kommentare sind vorhanden, ob allerdings jemand verteht was ich damit meine ist fraglich :wink:

Hier das Script:
P.S. Schaut auch hier: http://www.informationsarchiv.net/foren ... 12423.html
Code: Alles auswählen
<?php
/*
  Diese Datei muss in einem Verzeichnis sein in dem sich ein weiteres mit dem Namen "web" befindet.
  Das Verzeichnis "web" muss die entsprechenden Rechte haben (chmod 777).
  Written by Christian Fedder 08.02.2004 Hamburg Germany
*/
?>
<HTML>
<HEAD>
<TITLE>Uploadscript by Christian Fedder 2004</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<SCRIPT language=JavaScript>
<!--
function sicher(){
//Diese Funktion ist für die Formulare, aber eigentlich überflüssig.
var antwort;
antwort=confirm("Bist Du sicher, dass Du alle Felder wieder löschen willst?");
if (antwort==true){
    return antwort;
  }
  else{
  return antwort;
  }
  }
//-->
</script>
<style>
<!--
body {
   SCROLLBAR-FACE-COLOR: #666666; SCROLLBAR-HIGHLIGHT-COLOR: #333333; SCROLLBAR-SHADOW-COLOR: #333333; SCROLLBAR-3DLIGHT-COLOR: #344556; SCROLLBAR-ARROW-COLOR: #fefefe; SCROLLBAR-TRACK-COLOR: #000011; SCROLLBAR-DARKSHADOW-COLOR: #333333;
}

input, textarea, select, file {
   border: 1px solid #333333;
   background: #cccccc;
   font: bold 11px Verdana, Arial, Helvetica, sans-serif;
   color: #333333;

}
td {
   font: bold 14px Verdana, Arial, Helvetica, sans-serif;
   color: #999999;
}
a:link {
   color: #FFFFFF;
   text-decoration: none;
}
a:visited {
   color: #FFFFFF;
   text-decoration: none;
}
a:hover {
   color: #999999;
   text-decoration: none;
}
a:active {
   color: #666666;
}
//-->
</style>
</HEAD>
<BODY BGCOLOR=#000000>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 align="left" bordercolor="#333333" width="700">
   <TR>
          <td>
            <div align="center"><font size="6">Datei Upload</font</div><br>
          </td>
    <tr>
    <td>
<?php
// Dateiupload
//------------------------------------------------------------------------------------------------------------------------------------
if ($flag==1) //Wenn das Formular abgeschickt wurde.
{
    //Datei checken
    //--------------------------------------------------------
    //Erst die Größe
    if($datei_size>200000) {$fehler.="Datei ist zu groß!<br>";}
    //Dann der Typ
    if(($datei_type != 'text/html' && $datei) && ($datei_type != 'image/jpeg' && $datei) && ($datei_type != 'image/pjpeg' && $datei) && ($datei_type != 'image/gif' && $datei)) {$fehler.="Falscher Dateityp! " .$datei_type. "<br>" ;} //Typen können natürlich geändert werden
    //Und dann checken ob überhaupt eine Datei ausgewählt wurde
    if(!$datei){$fehler.="Keine Datei gewählt!<br>";}
    //Das Ganze in die Variable $fehler
    //--------------------------------------------------------
    if($fehler) //Bei Fehlern, Meldung ausgeben
    {
        $meldung="<h2 align='center'><font color='#880000'>" .$fehler. "</font></h2>"; //Die Fehlermeldung etwas verschönern  ;-)
        unset($flag); //Variable $flag wieder zurück setzten
        echo $meldung; //Fehlermeldung ausgeben
    }
    else
    {
      //Keine Fehler? Dann Datei hochladen
      //--------------------------------------------------------------------
      $writeurl = "";
      if ($uvz2 != "")
      {
          $writeurl = "/".$uvz2;
      }
       $uvz = "web$writeurl"; //Verzeichnisname (ist immer "web")
       //Die Verzeichnisnamen kommen aus dem Formular weiter unten
       if (!file_exists($uvz)) //Wenn nicht vorhanden, dann anlegen
       {
           mkdir($uvz,0755); //mit den entsprechenden Rechten versehen
       }
       $name=$uvz."/".$datei_name;

       copy($datei, $name); //Kopieren der Datei auf den Server
       //Anzeigen der Dateigröße
       $sizer = $datei_size;
       $ending = "Byte";
       if ($sizer > 1000)
       {
           //Berechnung der Dateigröße in KB
        $sizer = $sizer / 1000;
           $sizer = number_format($sizer,2,",",".");
           $ending = "KB";
       }
    // Ausgabe der Informationen
       echo "<font size='3'>Information:</font><br>";
       echo "Dateityp: $datei_type <br>";
       echo "Gr&ouml;&szlig;e: $sizer $ending<br>";
       echo "Dateiname: $datei_name<br>";
       echo "<font color='#ffffff'>Datei wurde erfolgreich hochgeladen!</font><br>";
       echo "<br><a href='$_SERVER[PHP_SELF]?$_SERVER[QUERY_STRING]'> <<< Zurück</a> (Nach 3 Sekunden automatisch.)<br><br>";
      echo "<script language='JavaScript'>
         var gWindowCloseWait = 3;
         function zurueck()
         {
            window.location = (\"$_SERVER[PHP_SELF]?$_SERVER[QUERY_STRING]\");
         }
         window.setTimeout(\"zurueck()\", gWindowCloseWait*1000);
         </script>";
    }
    //--------------------------------------------------------------------
}
//------------------------------------------------------------------------------------------------------------------------------------


// Verzeichnis anlegen
//------------------------------------------------------------------------------------------------------------------------------------
if ($flag2==1)
    {
        if(!$verzname){$fehler.="Kein Verzeichnis eingegeben!<br>";} //Wurde ein Verzeichnis eingegeben?
   if ($verzname)
   {
      if(!eregi("^[a-zA-Z0-9]+$",$verzname)){$fehler.="Ungültige Zeichen im Verzeichnisnamen<br>
      (Nur a-z und 0-9 erlaubt)<br>";} //Zeichen des anzulegenden Verzeichnisses prüfen
   }
      if($fehler)
      {
          $meldung="<h2 align='center'><font color='#880000'>" .$fehler. "</font></h2>"; //Fehlermeldung verschönern ;-)
              unset($flag2); //Variable $flag2 wieder zurück setzten
              echo $meldung; //Fehlermeldug ausgeben
      }
      else //Wenn es keine Fehler gab
      {
             mkdir("web/".$verzname); //Dann kann das Verzeichnis angelegt werden
               echo "<font size='4'>Verzeichnis '$verzname' wurde erstellt!</font>";
      }

    }
//------------------------------------------------------------------------------------------------------------------------------------



// Der Anfang der Seite
//------------------------------------------------------------------------------------------------------------------------------------
if(!$flag) //Die Variablen $flag und $flag2 bekommen erst mit dem Abschicken des einen oder des anderen Formulares einen Wert.
        //Wird das Formular für den Dateiupload abgeschickt ist es $flag bei den Verzeichnissen ist es $flag2.. wer hätte das gedacht.
{
        //Nun kommt HTML mit einem ganz kleinen Teil PHP
     ?>
        <form action='<? echo $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; ?>' method='post' enctype='multipart/form-data' name='form1' id="form1" onReset="return sicher()">
        <!-- Die Formaction besteht aus der aktuellen Datei und einer Variable hinter dem "?" Hier wird ein mögliches Unterverzeichnis
       angegeben in dem wir uns vielleicht gerade befinden. Denn dort soll die Datei ja auch rein.  //-->
     <input type="hidden" name="flag" id="flag" value=1><!-- Hier kommt das versteckte Feld. Es bekommt den Wert 1 und wird in PHP
                                  dann als variable gesehen //-->
        <div align="center">
        <table border="0" cellpadding="0" cellspacing="0" width="400" bordercolor="#ffffff" style="border-collapse: collapse">
        <tr>
        <td colspan="2">Datei wählen und abschicken<br>
        <font size="1">Mögliche Dateitypen: *.html *.jpg *.gif<br>
        Maximal 200 KB pro Datei.</font></td>
        </tr>
        <tr>
          <td width="54">Datei:</td>
          <td>
                    <input name="datei" type="file" id="datei" size="30" value='<? echo $datei; ?>'>
                  </td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td><input type="submit" name="Submit" value="Hochladen"> <input type="reset" name="Reset" value="Zurücksetzen">
          </td>
        </tr>
    </table>
        </div>
      </form>
      <?php
   //Nun das formular für die Verzeichnisse. Das erscheint nur, wenn man in dem Hauptverzeichnis ist...
      //Sonst könnte man ja unendlich viele Verzeichnisse anlegen.
      if ($uvz2 == "")
      {
      ?>
      <form action='<? echo $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; ?>' method='post' enctype='multipart/form-data' name='form2' id="form2" onReset="return sicher()">
          <input type="hidden" name="flag2" id="flag2" value=1>
        <div align="center">
        <table border="0" cellpadding="0" width="400" cellspacing="0" bordercolor="#ffffff" style="border-collapse: collapse">
        <tr>
        <td colspan="2">Verzeichnis anlegen</td>
        </tr>
        <tr>
          <td width="54">Name:</td>
          <td>
                    <input name="verzname" type="text" id="verzname" size="30" value="">
                  </td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td><input type="submit" name="Submit" value="Anlegen"> <input type="reset" name="Reset" value="Zurücksetzen">
          </td>
        </tr>
        </table>
        </div>
      </form>
      <?php
      }
      }
   //Nun erst mal eine JavaScript Funktion welche noch benötigt wird.
      echo " <script language='JavaScript'>
      function del(url, datei) {
         if( confirm(\"Soll die Datei '\" + datei + \"' wirklich gelöscht werden?\") )   window.location = url;
      }
      </script>";
      $writeurl = "";
      //Wo sind wir? Haupt oder Unterverzeichnis?
      if ($uvz2)
      {
          $writeurl = "/".$uvz2;
          echo "<a href='$PHP_SELF'><< Home</a><br>";
      }
      $uvz="web$writeurl"; // Das Hauptverzeichnis ist immer /web
       if (!file_exists($uvz)) //Wenn nicht vorhanden, dann anlegen
       {
           mkdir($uvz,0755);
       }
      if ($sent==1) //Wenn Datei gelöscht werden soll.... Weiter unten.
      {
          $name = urldecode($name);
          $pfad = $uvz."/".$name;
          @unlink($pfad); //Pfad zusammenbasteln ;-)
        if ($uvz2 != "")
        {
           echo " <script language='JavaScript'>
             window.location = ('upload.php?uvz2=$uvz2') </script>";  //Und wieder dahin zurück wo wir waren
        }
        else
        {
           echo " <script language='JavaScript'>
             window.location = ('upload.php') </script>";   //Und wieder dahin zurück wo wir waren
        }
      }
      echo "<font size='3'>Aktuelles Verzeichnis:<br>
      <a href='$uvz' target='_blank'>/$uvz</a><p align='center'>Bisher hochgeladene Dateien:<br><hr width='400' color='#ffffff'></p></font><ol>";
      //Anzeigen des Verzeichnisses und es folgt das Anzeigen der hochgeladenen Dateien
   $i = 1;
      $verzeichnis = opendir($uvz);

      while ($file = readdir($verzeichnis)) //Verzeichnis auslesen
      {
          if (is_file($uvz."/".$file))
          {
              echo "<li><a href='$uvz/$file' target='_blank'>$file</a> - - "; //Datei(en) anzeigen
              $file = urlencode($file);
              echo " <a href=\"javascript:del('$PHP_SELF?sent=1&name=$file&uvz2=$uvz2','".urldecode($file)."')\"> <font color='#880000'>L&ouml;schen<hr></font></a></li>";
        //Möglichkeit zum Löschen der Datei. Die JavaScriptfunktion del ist hierbei eine Abfrage ob wirklich gelöscht werden soll.
        //Klickt man ja, wird die URL übergeben mit der Variable $sent=1  Dieses wurde weiter oben ja bereits abgefragt.
              $i++;
          }
      }
      if ($i == 1)
      {
          echo "Keine Dateien vorhanden";
      }
      closedir($verzeichnis);
      echo "</ol>";

if ($uvz2 == "")
{
//Das Gleiche für die Verzeichnisse nochmal
if ($sent2==1)
      {
          shell_exec(rmdir($name));
          echo " <script language='JavaScript'>
          window.location = ('upload.php') </script>";
      }
echo " <script language='JavaScript'>
      function del2(url, verzeichnis) {
         if( confirm(\"Soll Das Verzeichnis '\" + verzeichnis + \"' wirklich gelöscht werden?\") )   window.location = url;
      }
      </script>";
echo "<font size='3'><p align='center'>Bisher angelegte Verzeichnisse:<br><hr width='400' color='#ffffff'></p></font><ol>";
  //Auslesen der Verzeichnisse
  $dirlist=array();
  $writeurl = "";
      if ($uvz2)
      {
          $writeurl = "/".$uvz2;
      }
  $dir = "web$writeurl";
  $dh=opendir($dir);
  if ($dh)
  {
  $i=1;
   while ($filename=readdir($dh))
   {
     if (is_dir($dir."/".$filename) && $filename != "." && $filename != "..")
     {
       echo "<li><a href='$PHP_SELF?uvz2=$filename'>../".$dir."/".$filename."</a> - - ";
       echo " <a href=\"javascript:del2('$PHP_SELF?sent2=1&name=".$dir."/".$filename."','$filename')\"> <font color='#880000'>L&ouml;schen (Nur wenn leer.)<hr></font></a></li>";
    //Ausgabe der Verzeichnisliste, wieder mit Möglichkeit zum Löschen.
       $i++;
     }
   }
   if ($i == 1)
      {
          echo "Keine Verzeichnisse vorhanden";
      }
   closedir($dh);
  }
  else
  {
   //Fehlermeldung
   echo "Ein FEHLER ist aufgetreten und keiner weiß warum.... :-D";
  }
echo "</ol>";
}
//------------------------------------------------------------------------------------------------------------------------------------

// by Christian Fedder 08.02.2004 Hamburg Germany
  ?>
    </TD>
   </TR>
</TABLE>
<!-- by Christian Fedder 08.02.2004 Hamburg Germany //-->
</BODY>
</HTML>


EDIT: Viel Spaß beim Testen! Bitte Feedback, ob es jemand zum laufen bekommen hat. (Bei mir geht es)
Zuletzt geändert von CoolCasimir am 21.12.2004, 15:50, insgesamt 11-mal geändert.
CoolCasimir
Moderator
 
Beiträge: 2194
Registriert: 14.01.2004, 14:07
Wohnort: Hansestadt Hamburg


Nachtrag

Beitragvon CoolCasimir am 11.11.2004, 12:05

Nachtrag zu diesem Script.
Habe es nun mal auf einem Windows-Webserver getestet und es funktioniert auch hier. Na gut, da habe ich mich geirrt.
CoolCasimir
Moderator
 
Beiträge: 2194
Registriert: 14.01.2004, 14:07
Wohnort: Hansestadt Hamburg

Dateiendungen beim Upload festlegen

Beitragvon yakazaa am 12.11.2004, 12:53

Hallo, hab folgende Zeile:

Code: Alles auswählen
if(($datei_type != 'image/doc' && $datei) && ($datei_type != 'image/pdf' && $datei) && ($datei_type != 'image/pjpeg' && $datei) && ($datei_type != 'image/gif' && $datei)) {$fehler.="Falscher Dateityp!<br>";}


GIF und JPG dateien sind kein prob, leider macht er das mit den word doc Dateien und den pdfs nicht... wer weiss hilfe ?!
yakazaa
 

Beitragvon Zeitgeist am 12.11.2004, 13:09

if(($datei_type != 'image/doc' && $datei) && ($datei_type != 'image/pdf' && $datei)


anstatt 'image/doc' und 'image/pdf' 'text/doc' und 'text/pdf' :?:
Zeitgeist
 
Beiträge: 401
Registriert: 08.11.2004, 11:26
Wohnort: Berlin

Beitragvon yakazaa am 12.11.2004, 13:29

funktioniert leider beides nicht
yakazaa
 

Beitragvon CoolCasimir am 12.11.2004, 15:25

Kommentiere doch einfach die Zeile:
Code: Alles auswählen
copy($datei, $name); //Kopieren der Datei auf den Server
aus und lasse Dir mit
Code: Alles auswählen
echo $datei_type;
den Dateityp anzeigen. Und schon weißt Du was Du da eintragen musst.
CoolCasimir
Moderator
 
Beiträge: 2194
Registriert: 14.01.2004, 14:07
Wohnort: Hansestadt Hamburg

hmm...

Beitragvon psycho_steve am 17.11.2004, 00:15

hi!

ich bin ein absoluter anfänger im php bereich aber ich bräuchte unbedingt ein upload formular für meine freunde.

also ich hab das versucht, aber irgendwie funktioniert das nicht.

was muss ich mit diesen // machen?
ich mein muss ich den text, den du gschriben hast weglöschen?
und eine andere frage: welchen editor beutzt ihr?

thx und grüße!
steff
psycho_steve
 

Re: hmm...

Beitragvon CoolCasimir am 17.11.2004, 15:54

psycho_steve hat geschrieben:hi!

ich bin ein absoluter anfänger im php bereich aber ich bräuchte unbedingt ein upload formular für meine freunde.

also ich hab das versucht, aber irgendwie funktioniert das nicht.

was muss ich mit diesen // machen?
ich mein muss ich den text, den du gschriben hast weglöschen?
und eine andere frage: welchen editor beutzt ihr?

thx und grüße!
steff

Der Text hinter den // wird vom Webserver als Kommentar erkannt und ignoriert, kannst Du also alles stehen lassen. Als Editor teste ich gerade PHP Designer 2005... gefällt mir bisher ganz gut.
CoolCasimir
Moderator
 
Beiträge: 2194
Registriert: 14.01.2004, 14:07
Wohnort: Hansestadt Hamburg

­

Beitragvon psycho_steve am 17.11.2004, 16:19

danke, hab mir das programm runtergeladen.

ich hätt aber noch eine ganz wesentliche frage (tut mir leid dass ich so dumm bin :oops: :mrgreen: ):

also, wenn ich den quellcode jetzt kopier und in dem programm einfüge. als was muss ich das dann speichern und wie soll die datei heißen?
und was muss ich mit der datei "upload.php" machen?

window.location = ('upload.php')


?

es tut mir leid, aber ich möchte das wirklich wissen :mrgreen:

naja, danke schon mal im voraus.
psycho_steve
 

Beitragvon CoolCasimir am 19.11.2004, 13:06

Wo fügst Du was ein? Du musst einfach den gesamten Quelltext kopieren und in eine neue Datei einfügen und diese upload.php nennen. Diese Datei legst Du Dir in irgendein Verzeichnis Deines Webservers und richtest ein Unterverzeichnis namens web ein mit den Rechten 777. Natürlich kannst Du die upload.php ändern wie Du willst... also Farben, Aussehen etc.
Schick mir mal einen Link, wenn Du es hinbekommen hast.
CoolCasimir
Moderator
 
Beiträge: 2194
Registriert: 14.01.2004, 14:07
Wohnort: Hansestadt Hamburg

Beitragvon psychosteve am 19.11.2004, 18:09

danke, ich habs jetzt hinbekommen.
nur mein problem ist, dass ich draufkommen bin, dass es bei home.pages.at die chmod 777 rechte nicht für free members gibt.
kennt ihr zufällig einen gratis webspace anbieter wo man die rechte dazu hat?
das wäre echt super :)
psychosteve
 

Beitragvon CoolCasimir am 20.11.2004, 16:12

Da kann ich Dir leider nichts sagen... Ich habe meinen eigenen Server, nur ist er im Moment defekt.
CoolCasimir
Moderator
 
Beiträge: 2194
Registriert: 14.01.2004, 14:07
Wohnort: Hansestadt Hamburg

Beitragvon psychosteve am 20.11.2004, 18:14

hmm...ich werds mal hier versuchen.
vielen dank trotzdem für alles Bild
psychosteve
 

Beitragvon CoolCasimir am 20.11.2004, 18:58

Und denk dran, ich will einen Link zu der Seite haben :-)
CoolCasimir
Moderator
 
Beiträge: 2194
Registriert: 14.01.2004, 14:07
Wohnort: Hansestadt Hamburg

Beitragvon OhMySweet am 23.11.2004, 15:08

Super funzt das hab ich gesucht! Ach ja und in Sachen Dateityp rausfinden einfach bei der Fehlermeldung zu Falscher Dateityp

$datei_type

einfügen und schon hat man's.
Ich erwähne das nur, weil ICH (was ja nichts heisst) die Methode 2 o. 3 Beiträge vor mir nicht verstanden habe. ;)
OhMySweet
 

Nächste


Ähnliche Themen


Zurück zu Artikel Softwareprogrammierung

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste