1. Dashboard
  2. Artikel
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. HTML - Webmaster Forum
  2. Programmierung - Entwickler Forum
  3. PHP Forum - Apache - CGI - Perl - JavaScript und Co.

Upload-Fehler

  • mathe_is_GEIL!
  • 7. November 2007 um 22:09
  • mathe_is_GEIL!
    Teeny
    Beiträge
    18
    • 7. November 2007 um 22:09
    • #1

    Hi!
    Ich habe folgendes Problem:
    Ich habe mithilfe von PHP und eines Formulars ein Uploadscript gebastelt:

    PHP
    <form method="post" enctype="multipart/form-data" action="<?php echo $PHP_SELF; php?>">
     <input type="hidden" name="MAX_FILE_SIZE" value="400000">
     
    Datei-Upload
    
    
    
    
     <input name="userfile" type="file" size=20>
    
    
    
    
     <input type="submit" name="action" value="Upload">
    </form>
    Alles anzeigen


    Und hier das Script, dass ausgeführt wird, wenn eine Datei hochgeladen wurde:

    Code
    $time=time();
    $file = $HTTP_POST_FILES['userfile']['name'];
    $temp = $HTTP_POST_FILES['userfile']['tmp_name'];
    $path_parts = pathinfo($file);
    $filename = "file_" . $time . "." . $path_parts["extension"];
    copy($temp, '/useruploads/'.$filename);


    Auf meinem lokalen Apache-Server funktioniert das prima, doch wenn ich das auf dem externen Server laufen lasse gib's 'nen Fehler:

    Code
    Warning: copy(): open_basedir restriction in effect. File(/tmp/phpPsQbiG) is not within the allowed path(s): (/home/httpd/webs/-Benutzername-) in ...


    Das heißt wohl soviel wie: "Du darfst nicht auf den Temp-Ordner dieses Servers zugreifen, in dem deine hochgeladene Datei liegt, weil das außerhalb deines eigenen Bereichs liegt!" (Falls die Datei überhaupt hochgeladen wurde...)

    Gibt es eine möglichkeit das zu umgehen?

    Mathe ist geil!!

  • DarkSyranus
    Shogun
    Beiträge
    3.446
    • 7. November 2007 um 22:25
    • #2
    Code
    copy($temp, 'useruploads/'.$filename);

    Du solltest jedoch move_uploaded_file() benutzen, das ist wesentlich kompfortabler und einfacher.

    [Blockierte Grafik: http://img28.imageshack.us/img28/7551/anleitungt.jpg]

  • mathe_is_GEIL!
    Teeny
    Beiträge
    18
    • 7. November 2007 um 22:32
    • #3

    OK, habs geändert. Dadurch hat sich die Fehlermeldung etwas verändert:

    Code
    Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 568 is not allowed to access / owned by uid 0 in ...

    EDIT:
    Hab grad das hier gefunden:

    Code
    Anmerkung: Wenn Safe Mode aktiviert ist, überprüft PHP, ob die Dateien/Verzeichnisse die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
    
    
        Anmerkung: move_uploaded_file() ist von den normalen Safe Mode UID-Einschränkungen nicht betroffen. Dies ist nicht unsicher, da move_uploaded_file() nur mit via PHP hochgeladenen Dateien arbeitet.


    Was bedeutet das?

    Mathe ist geil!!

  • DarkSyranus
    Shogun
    Beiträge
    3.446
    • 7. November 2007 um 22:39
    • #4

    Welche werte hast du der Funktion übergeben?
    Es scheint so, als würdest du auf den root Ordner des Servers zugreifen wollen (Linux Verzeichnisstränge sind ein wenig anders als die der Windose :wink: ).

    Beispiel:
    ('ordner/datei.xyz')
    Läuft unter Windows.
    Läuft unter linux.

    ('/ordner/datei.xyz')
    Könnte unter Windows laufen (weis ich grad nicht genau).
    Läuft unter Linux definitiv nicht so, wie man es gerne hätte ;)

    Falls du also ein / am Anfang des Pfades hast, entferne den mal.

    [Blockierte Grafik: http://img28.imageshack.us/img28/7551/anleitungt.jpg]

  • mathe_is_GEIL!
    Teeny
    Beiträge
    18
    • 7. November 2007 um 23:12
    • #5

    JAAAAAAAAAAAA! :lol:
    Das war es!!
    Digges dankeschön! :D

    Edit:
    Hab ich das also richtig verstanden? Der Server erlaubt es eigentlich nicht, dass ich Dateien außerhalb meines bereiches kopiere, aber wenn ich sie mit move_uploaded_file verschiebe sieht er ein, dass das MEINE ist?

    Mathe ist geil!!

  • DarkSyranus
    Shogun
    Beiträge
    3.446
    • 8. November 2007 um 07:31
    • #6

    Jup.
    Datei die hochgeladen wurden, sind erstmal in einem temporären Ordner.
    Daraus kann man sie nicht mit copy() holen, mit move_uploaded_file() jedoch schon.
    Das etwas wie /ordner nicht geht hängt mit dem Dateisystem unter Linux zusammen, womit ich jetzt hier jedoch keinen langweilen will :wink:

    [Blockierte Grafik: http://img28.imageshack.us/img28/7551/anleitungt.jpg]

Tags

  • hilfe
  • server
  • http
  • file
  • windows
  • post
  • funktion
  • problem
  • input
  • code
  • php
  • fehler
  • upload
  • ordner
  • datei
  • benutzer
  • ränge
  • dose
  • files
  • root
  • temp
  • linux
  • copy
  • name
  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
Zitat speichern