Upload Script Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Upload Script Problem

    Huhu,

    Ich habe ein Upload Script welches es erlauben soll Bilddateien hochzuladen.
    Wenn ich die Datei, editavatar.php, direkt über den Browser aufrufe,also so:
    Und die Fehlermeldung einmal in Live:
    Klick

    funktioniert alles wunderbar. Rufe ich es allerdings so auf:

    Klick2

    kommt folgende Fehlermeldung:
    Warning: move_uploaded_file(uploads/2bad.jpg) [function.move-uploaded-file]: failed to open stream:
    No such file or directory in /opt/lampp/htdocs/bad/avatar/editavatar.php on line 43

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phphAPoyY'
    to 'uploads/2bad.jpg' in /opt/lampp/htdocs/bad/avatar/editavatar.php on line 43

    Woran kann das liegen? Durch das includen von dem file in die index.php? Das Script geht ja nur warum nich wenn es includiert wird?
    Ich hänge mal das Script an:

    PHP-Code:

    <?php

    /* Maximale Dateigröße wird festgelegt */
    define('MAX_FILE_SIZE'10240);

    if(
    array_key_exists('upload'$_POST)){

    /* Der Pfad wird festgelegt */
    define('UPL_FLD','uploads/');
        
    $flext pathinfo($_FILES['datei']['name']);
    $ext strtolower($flext['extension']);

    $file str_replace('','_',$_POST['uploadbildname'].'.'.$ext);
    $file strtolower($file);

    $maxfs number_format(MAX_FILE_SIZE/10241).'KB';
    $fsize false;

    if (
    $_FILES['datei']['size'] > && $_FILES['datei']['size'] <= MAX_FILE_SIZE){
        
        
    $fsize true;
    }

    $filetype = array('image/gif''image/jpeg''image/pjpeg''image/png');
    $ftype false;
        
    foreach(
    $filetype as $type){

        if(
    $type == $_FILES['datei']['type']){
                
            
    $ftype true;
            break;
        }
    }
        
    if (
    $ftype && $fsize && $_POST['uploadbildname'] != ''){
     
        switch(
    $_FILES['datei']['error']){
        
            case 
    0:
                
            
    $upload move_uploaded_file($_FILES['datei']['tmp_name'], UPL_FLD.$file);
            
            if(
    $upload){
                
                
    $msg 'Avatar erfolgreich hochgeladen!';
                
            } else { 
            
                
    $msg 'Fehler.<br> Bitte erneut versuchen!';
                
            }
            break;
            
            case 
    3:
            
    $msg 'Fehler. Bitte erneut versuchen!';
            break;
            
            default:
            
    $msg 'Fehler - Bitte wenden Sie sich an den Adminstrator!';
        }

    }elseif (
    $_FILES['datei']['error'] == 4) {
            
        
    $msg 'Bitte Datei auswählen!';
            
    } elseif (
    $_POST['uploadbildname'] == "") {
                
        
    $msg 'Bitte Bildname eingeben!';

    } else {

        
    $msg $_FILES['datei']['name'].' kann nicht hochgeladen werden.';
                
                if(!
    $ftype){
                    
    $msg .= ' Erlaubte File Typen sind: .gif, .jpg, .png <br>';
                    }
                    
                if(!
    $ftype){
                        
                    
    $msg .= 'Die Maximal erlaubte Dateigr&ouml;sse ist '.$maxfs;
                }
    }
    }

    ?>
    <?php 
    if(isset($msg)){ echo $msg;} ?>
    <form action="<?php $PHP_SELF ?>" method="post" enctype="multipart/form-data">
    <table width="400" border="0">
    <tr>
    <td width="98">Bildname:</td>
    <td width="31">&nbsp;</td>
    <td width="249"><input type="text" size="25" maxlength="150" name="uploadbildname" 
    value="" /></td>
    </tr>
    <tr>
    <td>Bilddatei:</td>
    <td>&nbsp;</td>
    <td><input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_FILE_SIZE?>" />
    <input type="file" name="datei" value="" /></td>
    </tr>
    </table>
    <br />
    <center><input type="submit" name="upload" value="Hochladen" /></center>
    </form>

    Falls noch der Code der index.php benötigt wird kann ich diesen auch noch posten.
    Danke für die Hilfe schonmal im Vorraus
    Zuletzt geändert von 2Bad4You; 27.04.2008, 12:15.

  • #2
    1. du und PHP habe unterschiedliche Vorstellungen, wo den Uploadordner liegt oder zu liegen hat. PHP findet ihn nicht.
    2. Dein $PHP_SELF ist so zum Glück wirkungslos. Sonst würde es den Script für XSS Attacken Öffnen.
    Wir werden alle sterben

    Kommentar


    • #3
      Ok erstmal Vielen Dank für die superschnelle Hilfe. Eigentlich ganz klar warum es nicht funktioniert hat^^, weil das Script ja in eine andre Datei includiert wurde und ich ja auch so die Pfadangabe ändern musste. Danke für den Tipp dafür.

      So und heisst das ich kann das
      PHP-Code:
      <? $PHP_SELF ?>
      einfach weglassen bzw hat es auf ein Formular wie dieses keine Auswirkung? Oder sollte mal generell in Formularen auf das
      PHP-Code:
      <? $PHP_SELF ?>
      verzichten?

      Kommentar


      • #4
        Und nochmal: PHP_SELF öffnet dein Script für XSS Attacken!
        Willst du das? wohl nein!
        Also: weglassen!!
        Das action Attribut ist ein Pflichtattribut, muß also vorhanden sein!
        Es darf aber auch leer bleiben. Lasse es leer, wenn es irgend geht.

        PHP-Code:
        action="<?php $PHP_SELF ?>" // wirkungslos
        action="<?php echo $PHP_SELF ?>" // wirkt, aber nur mit register_globals=on
        action="<?php echo $_SERVER['PHP_SELF'?>" // wirkt immer
        action="<?php echo $_SERVER['SCRIPT_NAME'?>" // meist sicherer 
        action="" // wohl die beste Variante
        Zuletzt geändert von combie; 27.04.2008, 12:31.
        Wir werden alle sterben

        Kommentar


        • #5
          action="" // wohl die beste Variante
          Das beste ist eigentlich immer ein Ziel anzugeben:
          Code:
          action      %URI;          [i]#REQUIRED[/i]   -- server-side form handler --
          Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

          Kommentar


          • #6
            Ein Browser hat das action Attribut aus eigener Kraft mit einer gültigen URI zu füllen. Zumindest machen das alle....

            Dieses Attribut fix vorzubelegen ist nicht falsch.
            Aber PHP_SELF einzusetzen, ist wenigstens "dumm".
            Wir werden alle sterben

            Kommentar

            Lädt...
            X