Nochmal: FTP-Upload



  • Also mein Upload per PHP über FTP auf einen anderen Server funktioniert jetzt, allerdings habe ich noch zwei Fragen.

    1. Warum nennt er die Datei immer in so kryptische Zeichenfolgen wie: phpBLABLA um? Code sieht so aus:

    <?php
    
        if ( ( $username == "KLASSENUSERNAME" ) && ( $password == "KLASSENPASSWORT" ) )
        {
            $id = ftp_connect ( "ftp.mitglied.lycos.de" );    
            $res = ftp_login ( $id , "FTPUSERNAME" , "FTPPASSWORT" );
    
            if ( ( $id ) && ( $res ) )
            {
                $newfile = substr ( $file , strrpos ( $file , '/' ) , strlen ( $file ) - $slash );
                $res = ftp_put ( $id , "./$newfile" , "$file" , FTP_BINARY );
    
                if ( $res )
                {
                    echo "Datei wurde erfolgreich hochgeladen!";
                }
                else
                {
                    echo "Datei konnte nicht hochgeladen werden!";
                }
            }
            else
            {
                echo "Verbindung konnte nicht hergestellt werden!";
            }  
            ftp_quit ( $id );
        }
    ?>
    

    Mach ich da mit substr() irgendetwas falsch, oder gibt es andere Gründe für die komischen Dateinamen.

    Der Username für FTP und für die Klasse habe ich getrennt, immerhin sollen ja mehrere Leute auf meinen Server hochladen können, allerdings nicht alle mein FTP-Passwort wissen (sollen ja nix böses anstellen).

    Da knüpft auch schon Frage 2 an: Kann man diese PHP-Datei auch irgendwie von außerhalb downloaden und so mein Passwort auslesen?

    MfG SideWinder


  • Mod

    keine ahnung was fileist.aberderoriginaledateinameistinfile ist. aber der originale datei name ist in HTTP_POST_FILES['xxx']['name']

    wobei xxx der name des upload feldes ist.



  • Shade: Mhmm, ich sehe da nichts von POST Datei upload?!?

    SideWinder:

    Da knüpft auch schon Frage 2 an: Kann man diese PHP-Datei auch irgendwie von außerhalb downloaden und so mein Passwort auslesen?

    Solange der Server immer schön *.php Dateien parst und nie den Quellcode ausgibt (also solange er fehlerfrei funktioniert), kann das nicht passieren. Bei meinem alten Account ist es jetzt aber so, dass PHP gesperrt wurde, jetzt wird also der Quellcode direkt ausgegeben. Da der FTP Zugang auch gesperrt wurde, machts aber nichts 😉

    Am sichersten ist es eine Datei mit dem Passwort außerhalb des htdocs zu speichern und in der PHP Datei per include einzubinden. Das ist mir aber zu umständlich. Ich mache es immer so, dass ich es in eine PHP Datei packe, die in ein Unterverzeichnis und dieses noch per .htaccess schütze (deny all). So ist es doppelt geschützt.



  • Also ich habe eine HTML-Seite mit einem Formular, welche ein Feld für den Usernamen (username) eins für das Passwort (password) und eines für die Eingabe des Files ($file) - da kann man auch Browsen. Und eben den Upload-Button der das Formular per POST an ./server/upload.php weiterschickt.

    Sobald ich nicht mehr $file, sondern HTTP_POST_FILES['file']['name'] benütze funktioniert es nicht mehr.

    @Loggy: Thx, also brauch ich keine Angst haben, dass mir da jemand meinen Account löscht, etc. :).

    MfG SideWinder



  • Also du musst $_FILES['file']['tmp_name'] kopieren, aber als Namen für die Zieldatei $_FILES['file']['name'] verwenden!

    Schau dir auch das hier mal an



  • Danke, jetzt scheint es zu funktionieren.

    Allerdings bekomme ich trotz 100Mb manchmal einen Error:

    Warning: ftp_put: Transfer aborted. No space left on device in /usr/local/httpd/htdocs/kunden/web11/html/server/upload.php on line 13
    Datei konnte nicht hochgeladen werden!
    

    Keine Ahnung warum. Am Tripod-Server sind noch die vollen 100Mb verfügbar.

    Also für alle die auch sowas brauchen könnten, hier der fertige Code:

    <?php
    
        if ( ( $username == "1ehd" ) && ( $password == "domesty" ) )
        {
    
            $id = ftp_connect ( "FTPHOSTADRESS" );
    
            $res = ftp_login ( $id , "FTPUSERNAME" , "FTPPASSWORT" );
    
            if ( ( $id ) && ( $res ) )
            {
    
                $res = ftp_put ( $id , $HTTP_POST_FILES['file']['name'] , $HTTP_POST_FILES['file']['tmp_name'] , FTP_BINARY );
    
                if ( $res )
                {
                    echo "Datei wurde erfolgreich hochgeladen!";
                }
                else
                {
                    echo "Datei konnte nicht hochgeladen werden!";
                }
            }
            else
            {
                echo "Verbindung konnte nicht hergestellt werden!";
            }
    
            ftp_quit ( $id );
    
        }
        else
        {
            echo "Falscher Username bzw. Passwort!";
        }
    
    ?>
    

    MfG SideWinder



  • Einmal musst du in MAX_FILE_SIZE die maximale Größe angeben. Diese wird jedoch auch noch begrenzt durch die in der php.ini angegebene Dateigröße. Standardmäßig ist der Upload auf 2 MB begrenzt.



  • Außerdem wird die Datei ja erstmal dorthin hochgeladen, wo dein Script (falls das nicht auch tripod ist - aber dann: warum per ftp?) läuft und dann erst per FTP nochmal rumkopiert!
    Aber das MAX_FILE_SIZE ist wohl die realistischere Ursache 😉



  • Nein alle Dateien liegen auf einem Server. Und nur die Dateien die ich hochladen möchte kommen auf den Tripod-Server -> deswegen auch FTP, ansonsten hätte es ja Programmer85' Script ebenfalls getan ;).

    Danke nochmal an alle :).

    MfG SideWinder



  • Die Dateien werden dann aber erstmal auf den Server hochgeladen, wo dein Script liegt, d.h. du musst dort auch genug Platz haben (es kommt nicht nur darauf an, das du bei Tripod genug Platz hast) 😉





  • Das erklärt natürlich so einiges - argh, dummer Tripod-Server - wenn ich mir blos Paid-Space selbst leisten könnte, dort könnte ich dann auch soetwas riskieren :(.

    MfG SideWinder


  • Mod

    Original erstellt von SideWinder:
    **Das erklärt natürlich so einiges - argh, dummer Tripod-Server - wenn ich mir blos Paid-Space selbst leisten könnte, dort könnte ich dann auch soetwas riskieren :(.

    MfG SideWinder**

    warum kannst du dir keinen webspace leisten?
    5 euro im monat sollten doch drinnen sein, oder?



  • Dann müsst ich aber auf etwas anderes verzichten - im Verzichten bin ich eher gar nicht gut ;). Also mein Taschengeld ist nicht gerade so groß. Und da bleibt manchmal auch gar nichts am Ende des Monats übrig.

    Aber vielleicht kaufe ich mir jetzt so einen Webspace, mal sehen...

    MfG SideWinder


Anmelden zum Antworten