[PHP5] Problem bei Datei-Upload

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

  • [PHP5] Problem bei Datei-Upload

    Hallöchen,

    hab mir aus Studiengründen zuletzt etwas PHP beigebracht, dabei hatte ich auch einen Upload programmiert, der auch funktioniert.
    Jetzt bin ich dabei, für meine private Homepage ebenfalls einen Upload zu programmieren, jedoch passiert jetzt etwas merkwürdiges:

    Der Upload funktioniert regelmäßig erst im zweiten Versuch (bei jeder neuen Datei), obwohl schon beim ersten Mal is_uploaded_file positiv ausfällt. Aber nach move_uploaded_file ist die hochgeladene Datei nicht an ihrem Platz, sondern wie gesagt erst beim zweiten Mal. Bin ziemlich ratlos, hab das ganze Problem auch schon auf ein Test-Skript reduziert:

    PHP-Code:
    <?php
    echo $_FILES['datei']['name'].'<br>';
    echo 
    $_FILES['datei']['tmp_name'].'<br>';
    echo 
    $_FILES['datei']['size'].'<br>';
    $datei=urlencode($_FILES['datei']['name']);
    echo 
    $datei.'<br>';
     if (
    is_uploaded_file($_FILES['datei']['tmp_name']))
      {
    move_uploaded_file($_FILES['datei']['tmp_name'],$datei);
      echo 
    'test';}
    ?>
    Hat jemand eine Idee, woran es liegen könnte? Das Formular und auch das Skript sind zu dem, was ich vorher gemacht habe, und was funktioniert hat, eigentlich identisch. Besonders komisch ist, dass es funktioniert, nur halt beim zweiten Mal. Entweder müsste es doch immer oder nie funktionieren (schließlich wird die temporäre Datei ja auch jedesmal nach Ablauf des Skripts gelöscht).

  • #2
    könnte mit der PHP-Version zusammenhängen.

    move_uploaded_file() prüft nebenbei sowieso, ob die Datei gültig ist, von daher brauchst is_uploaded_file() nicht unbedingt.

    Im Fehlerfall gibt dir move_uploaded_file() auch FALSE zurück und u.u. auch 'ne Warnung.

    Kommentar


    • #3
      Erstmal danke für die Antwort.

      Der Witz ist, dass ich alles auf dem gleichen Server (Apache2 virtuell, also http://localhost/) habe mit der gleichen PHP-Version.
      Ich habe das Test-Skript jetzt im gleichen Ordner wie das Projekt, wo der Upload funktioniert - altes Projekt funktioniert, Test-Skript nicht (mit den gleichen Bilddateien). Und das bei de facto gleicher Syntax.

      Zu deinem Hinweis:
      Beim ersten Versuch, wo die Datei nicht "ans Ziel kommt", liefert move_uploaded_file trotzdem TRUE - das hab ich in diesem Test-Skript nicht untersucht, in meinem neuen Projekt aber schon. Erst file_exists($datei) liefert hinterher FALSE.

      Kommentar


      • #4

        da muss ich mal drüber meditieren...

        Kommentar


        • #5
          Ja, das Smiley trifft es schon ganz gut... Ist nur ärgerlich, weil ich studienbedingt nicht so viel Zeit hab. Hab jetzt den Comunity-Bereich (natürlich ziemlich simpel, ohne Datenbank, rein textdateibasiert) für meine neue Seite fertig samt Bilder-Galerien, Avatar usw. - wenn nur der Upload gleich funzen würde, sonst ist es nervig, weil jeder Nutzer nach der Registrierung sich erstmal einloggen muss und im Profil den Avatar nochmal neu hochladen muss.

          Kommentar


          • #6
            So jetzt ist die Verwirrung perfekt:

            In dem alten funktionierenden Projekt wird die hochgeladene Datei in einen immer gleichen Unterordner "images" abgelegt.
            Hab jetzt das Test-Skript so umgebaut, dass das Bild in den gleichen Unterordner geschoben wird, und jetzt geht es...
            Hatte auch schon vorher überlegt, ob es an Schreibrechten für bestimmte Ordner liegen könnte, aber a) gab's damit vorher auch keine Probleme und b) dürfte es dann ja nie funktionieren.

            Kommentar


            • #7
              Auch auf die Gefahr hin zu nerven:

              Hab jetzt die ganzen Dateien, die ich versucht habe hochzuladen im Ordner C:/Programme/Apache/Apache2 gefunden, also einen Ordner oberhalb von htdocs. Tja, welch eine Überraschung. Wie kommen die dahin?
              Zuletzt geändert von Spectator; 13.06.2005, 21:06.

              Kommentar


              • #8
                php manual sagt:
                $_FILES['userfile']['name']
                Der ursprüngliche Dateiname auf der Client Maschine.
                benenn die dateien mal nicht so, wie sie ursprünglich geheißen haben, sondern... k.a. durchlaufend nacht timestamp oder so und verschieb sie dann.

                (schuss ins blaue)

                edit:

                oder verschiebe nach
                PHP-Code:
                $_SERVER['DOCUMENT_ROOT'].$_FILES['userfile']['name'
                Zuletzt geändert von ankh; 13.06.2005, 21:17.

                Kommentar


                • #9
                  Nochmal danke, dass du dich da so reinkniest.

                  Das mit dem Dateinamen hat damit glaube ich nix zu tun. Document-Root immer davor zu setzen ist ne gute Idee. Aber ich hab's jetzt so gemacht wie in dem funktionierenden Projekt, nämlich in den Ordner zu verschieben ohne vorher reinzuwechseln. Damit funktioniert's. Das ist die Hauptsache. Aber ist mir trotzdem ein Rätsel, dürfte eigentlich nicht sein, dass der von htdocs noch eins höher wechselt, wo er eigentlich nie hinkommen kann, und dann wieder nicht...

                  Egal, funzt erstmal so... Wenn dich die Seite im Ergebnis interessieren sollte, kann ich dir hoffentlich bald mal die Domain präsentieren... auch wenn's billig ist.

                  Kommentar

                  Lädt...
                  X