Edgar S.: Problem mit File-Upload

Hallo liebe Leute!

Ich hoffe es gibt ein paar PHP-ler unter euch, die
folgendes (vermutlich ganz kleines) Problem lösen können.

Also, ich möchte einen simplen File-Upload mit PHP
machen. Das Formular in der 1. Datei, nennen wir sie
Upload.php3, lautet:

---------------------------------

<FORM ENCTYPE="multipart/form-data" ACTION="Process.php3" METHOD=POST>

<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000">

Send this file: <INPUT NAME="userfile" TYPE="file">

<INPUT TYPE="submit" VALUE="Send File">

</form>

---------------------------------

Soweit so gut.
Im empfangenden Script, Process.php3, steht:

---------------------------------

<?

echo "File: $userfile <br>";
echo "Remote File: $userfile_name <br>";
echo "Size: $userfile_size <br>";
echo "Type: $userfile_type <br>";

$testname = "endlich.gif";
copy($userfile, $testname);

?>

---------------------------------

So und hier taucht das Problem auf, die Datei
wird tatsächlich übertragen und das Script oben
weiß auch tatsächlich den

Remote File-Namen ($userfile_name) und den
Type ($userfile_type)

zu berichten. Aber

File ($username) und
Size ($userfile_size)

sind beides leer! Und daher schlägt
natürlich auch jeder weitere Copy-Befehl fehl...

Das Verzeichnis in dem sich die Scripte befinden
hat die Rechte 777, daran kanns wohl auch nicht liegen.

Hat jemand eine Idee was hier nicht stimmt?

Vielen Dank!

Viele Grüße,
Edgar

  1. Hallo,

    Remote File-Namen ($userfile_name) und den
    Type ($userfile_type)

    zu berichten. Aber

    File ($username) und
    Size ($userfile_size)

    sind beides leer! Und daher schlägt
    natürlich auch jeder weitere Copy-Befehl fehl...

    Ich nehm mal an daß du uns da was unterschlagen hast (irgendwo mußt du ja $userfile_size / _type definiert haben) :-)

    den copy befehl den du anwendest bringt dir so gar nix.

    Du mußt das file aus dem TMP verzeichniss in ein dir genehmes verzeichniss kopiern.

    zb. folgendes skript leistet mir gute dienste:

    if ($ufile!="none"){
      $ext=GetImageSize($ufile) or die('<h1>Das ist kein jpg oder gif Bild!!</h1><a href="javascript:history.back()">zurück...</a>');
      if ($ext[2]=="1"){
       $extension=".gif";
      }else{
       $extension=".jpg";
      }
      $dest="$dest$name$extension";
      if (copy($ufile,$dest)){
       echo "Bild gesendet";
      }else{
       echo "FEHLER! Das Bild konnte nicht kopiert werden!";
      }
    }else{ //if ($ufile!="none"){
      echo "Sie haben kein Cover ausgewählt!<br><a href="javascript:history.back();">zurück...</a>";
    }

    wobei $ufile wie unschwer zu erraten ist das übertragene file ist.

    hope that helps

    lg Ludwig

    1. Hi Ludwig,

      Ich nehm mal an daß du uns da was unterschlagen hast (irgendwo mußt du ja $userfile_size / _type definiert haben) :-)

      den copy befehl den du anwendest bringt dir so gar nix.

      Du mußt das file aus dem TMP verzeichniss in ein dir genehmes verzeichniss kopiern.

      »»

      Nein, so was würde ich doch nie tun ;)

      Im Ernst, username_size und _type und _name (Remote-Name! Leider
      nicht der Name des Files auf dem Server) scheinen nicht definiert
      werden zu müssen! So habe ich das der PHP-Docu entnommen.

      Wenn ich das richtig sehe, macht dein copy-Befehl im Grunde nichts
      anderes als meiner, nur mit dem entscheidenden Unterschied,
      daß bei dir "ufile" (bzw. bei mir "userfile") nicht leer ist!

      Wie sieht denn bei dir das sendende Script aus? Unterscheidet sich das
      von meinem?

      Auf jeden Fall vielen Dank.

      Edgar

      1. Hallo,

        Im Ernst, username_size und _type und _name (Remote-Name! Leider
        nicht der Name des Files auf dem Server) scheinen nicht definiert
        werden zu müssen! So habe ich das der PHP-Docu entnommen.

        Hab grad im "Krause" buch nachgeschlagen, ich nehm mal an du hast dein skript von da :o)

        War erstaunt, das $variable_name gibt es tatsächlich... gibt halt immer noch sachen die ich nicht kenne :-)

        bislang war für sowas bei mir immer die befehle filesize() und filetype() angesagt.

        Versuch es mal mit den beiden, vielleicht kommst du dahinter wo was schiefläuft. Evt. kann es auch sein daß das file zu groß ist?

        Wie sieht denn bei dir das sendende Script aus? Unterscheidet sich das
        von meinem?

        Kaum, bis auf ein paar zusätzliche input text felder.

        lg
        Ludwig

        1. Hi,

          Hab grad im "Krause" buch nachgeschlagen, ich nehm mal an du hast dein skript von da :o)

          Das entstammt natürlich alles meiner eigenen kreativen Feder! ;)
          Nein, das stammt aus dem PHP-Kapitel in der MySQL-HTML-Docu und
          aus der "offiziellen"? HTML PHP-Docu. Aber wer weiß wer da von
          wem abschreibt...

          War erstaunt, das $variable_name gibt es tatsächlich... gibt halt immer noch sachen die ich nicht kenne :-)

          bislang war für sowas bei mir immer die befehle filesize() und filetype() angesagt.

          Schön gell? Und im nächsten Script gleich wieder 2 Zeilen gespart ;)

          Versuch es mal mit den beiden, vielleicht kommst du dahinter wo was schiefläuft. Evt. kann es auch sein daß das file zu groß ist?

          Danke ich werd mal weiter rumprobieren...

          Viele Grüße,
          Edgar

  2. Hallo

    Habe dein Programm local bei mir getestet.
    Bei mir gab es keine Probleme.
    Kann ja sein das das PHP nicht alle informationen liefert.
    Einfach mal das phpinfo() ausführen.

    Viel Glück

    1. Hi,

      vielen Dank für den Tip

      Ich hatte phpinfo() zwar schon mal angeschaut, aber nichts
      verdächtiges gefunden.

      Jetzt habe ich nochmal genauer hingeschaut und tatsächlich
      einen möglichen Fehler gefunden: Die Umgebungs-Variable upload_tmp_dir
      ist von meinem Provider nicht gesetzt worden!

      Ich habe direkt eine Mail an Ihn geschickt. Hoffen wir
      mal, daß das die Ursache ist...

      Viele Grüße,
      Edgar