[PHP] Uploadskript will nicht so richtig

Pilly

Lt. Commander
Registriert
Juli 2004
Beiträge
1.268
Ich weiß nicht, wo hier der Fehler in dem Uploadskript liegt. Kann mit evtl. jemand helfen?

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <title>Upload Skript</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  </head>
  <body>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
      <input type="file" name="datei" /><br />
      <input type="submit" value="Upload beginnen" />
    </form> 
    
    <?php
    //Formular auswerten
    if (!empty($_FILES['datei'])) {
     
      $filename=$_FILES['datei']['name'];
      if (copy($_FILES['datei'], "$_SERVER['PHP_SELF']/files")) {
      echo "Upload war erfolgreich";
      }
      else {
      echo "Upload war leider nicht erfolgreich. ".
           "Versuche es nocheinmal oder kontaktiere den Webmaster.";
      }
     
    }
    ?>
  </body>
</html>
 
Wenn du was uploaden willst musst du den einleitenden Form-Tag so ergänzen:
PHP:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">

EDIT: Hups, irgendwie hab dich da den zweiten Post übersehen. Hab aber noch einen Fehler gefunden:
PHP:
if (copy($_FILES['datei'], "$_SERVER['PHP_SELF']/files")) {
"$_SERVER['PHP_SELF']/files" ergibt z.B. "beispiel.php/files", das ist wohl nicht beabsichtigt.
 
Zuletzt bearbeitet:
Habe jetzt eure beiden Tipps angewandt. Wenigstens versucht er jetzt die Datei hochzuladen. Nur klappen tut dies nicht. Ich habe das Zielverzeichnis einfach mal leergelassen, da die Datei in den selber Ordner soll.
Ich bekomme nach dem Absenden folgene Fehlermeldung:

Warning: copy(Array) [function.copy]: failed to open stream: No such file or directory in E:\server\xampp\htdocs\privat\projekte\uploadbank\upload.php on line 19
 
Hallo,

die Datei bekommt beim Hochladen einen temporären Namen, liegt also mit dem Namen
PHP:
$_FILES['datei']['tmp_name']
auf dem Server. Um sie zu kopieren solltest du also
PHP:
copy($_FILES['datei']['tmp_name'], $ziel)
verwendet werden, oder noch besser, weil extra dafür vorgesehen:
PHP:
move_uploaded_file($_FILES['datei']['tmp_name'], $ziel)

Gruß Tobias
 
Zuletzt bearbeitet:
Es klappt irgendwie immernoch nicht so richtig.

Hier mal den aktuellen Quelltext:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <title>Upload Skript</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  </head>
  <body>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" 
     enctype="multipart/form-data">
      <input type="file" name="datei" /><br />
      <input type="submit" value="Upload beginnen" />
    </form> 
    
    <?php
    //Formular auswerten
    if (!empty($_FILES['datei'])) {
     
      $ziel="http://127.0.0.1/privat/projekte/uploadbank/";
      if (move_uploaded_file($_FILES['datei']['tmp_name'], $ziel)) {
      echo "Upload war erfolgreich";
      }
      else {
      echo "Upload war leider nicht erfolgreich. ".
           "Versuche es nocheinmal oder kontaktiere den Webmaster.";
      }
     
    }
    ?>
  </body>
</html>

Ich erhalte dann nachdem ich die Datei ausgewählt habe und auf Uploaden geklickt habe, folgende Fehlermeldungen:

Warning: move_uploaded_file(http://127.0.0.1/privat/projekte/uploadbank/) [function.move-uploaded-file]: failed to open stream: HTTP wrapper does not support writeable connections. in E:\server\xampp\htdocs\privat\projekte\uploadbank\upload.php on line 19

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'E:\server\xampp\tmp\php44.tmp' to 'http://127.0.0.1/privat/projekte/uploadbank/' in E:\server\xampp\htdocs\privat\projekte\uploadbank\upload.php on line 19
Upload war leider nicht erfolgreich. Versuche es nocheinmal oder kontaktiere den Webmaster


Weiß jemand Rat?
Wäre sehr nett!

Pilly
 
Hallo,

das Ziel sollte kein HTTP - Stream sein, sondern ein lokaler Pfad. Also zum Beispiel:
PHP:
$ziel = './' . $_FILES['datei']['name']

sein, um die Datei in das aktuelle Verzeichnis (also das in dem dein Script liegt) mit dem original Namen zu kopieren.

EDIT: Ich seh grad der Server läuft auf Windows, also musst du unter Umständen den / durch \ ersetzen.


Gruß Tobias
 
Zuletzt bearbeitet:
Und du darfst nicht vergessen, per FTP die Dateiattribute des Verzeichnisses auf 777 zu stellen, damit das nicht schreibgeschützt ist.
 
Zurück
Oben