Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Upload Probleme

Einklappen

Neue Werbung 2019

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

  • oklaf
    hat ein Thema erstellt PHP Upload Probleme.

    PHP Upload Probleme

    Hallo miteinander,

    ich habe ein kleines Upload-Script geschrieben. Dafür habe ich mich hier im Forum und anderswo schlau gemacht. Dann habe ich verschiedene Scripte probiert. Immer wieder kommt die Meldung:

    Warning: Unable to create '3.jpg': Permission denied in <<ZIELVERZEICHNIS>> on line 44

    Warning: Unable to move <<TEMPVERZEICHNIS>>
    to '3.jpg' in <<ZIELVERZEICHNIS>> on line 44

    Auf dem Server meines Providers läuft PHP 4.1.2.

    Ich habe schon probiert über CHMOD etwas zu machen, wobei die Funktion wohl erst ab PHP 5 zur Verfügung steht.
    Auch UMASK hilft nicht weiter.

    Hat jemand eine Idee? Hier das kleine Script:

    Code:
    $uploadDir = '<<ZIELVERZEICHNIS>> ';
    $uploadFile = $uploadDir . $_FILES['userfile']['name'];
    echo "<pre>";
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadFile))
    { echo "Datei ist in Ordnung und Sie wurde erfolgreich hochgeladen.";
    echo "Hier sind die Fehler informationen:\n";
    print_r($_FILES);
    }
    else
    {
    echo "Es wurde ein Fehler gemeldet!\nHier sind die Fehler informationen:\n";
    print_r($_FILES);
    }
    echo "</pre>";
    
    echo"<form enctype=\"multipart/form-data\" action=\"upload.php\" method=\"post\">
    <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"1000000\">
    Wählen Sie eine Datei die hochgeladen werden soll: <input name=\"userfile\" type=\"file\">
    <input type=\"submit\" value=\"Upload Datei\">
    </form>";

  • David
    antwortet
    Beim Dateityp bloß nicht auf $_FILES[]['type'] oder gar die Dateiendung verlassen. Beides sind Daten, die vom Client gesendet werden. Ich kann zum Beispiel ein vbscript beim Upload als gif Datei "tarnen".
    Entweder (wenn verfügbar) PHP: Fileinfo - Manual verwenden oder PHP: mime_content_type - Manual

    Einen Kommentar schreiben:


  • oklaf
    antwortet
    $bilddatei enthält den erzeugten dateinamen. Den Teil habe ich vergessen mitzuschicken.
    Die FTP-Verbindung werde ich vom Login trennen.

    Die überprüfung des Dateiuploads auch in Bezug auf Dateityp werde ich noch einbauen. Das hatte ich, glaube ich zumindest, schon bei meinen anderen Versuchen mit drin (das ist hier bisher nicht mit aufgetaucht).

    Gruß
    oklaf

    Einen Kommentar schreiben:


  • David
    antwortet
    Ein Tipp noch: "$var" ist total überflüssig. Einfach nur $var.
    Also zum Beispiel
    PHP-Code:
    $conn_id ftp_connect($ftp_server); 
    Du testest connect und login in einem Schritt ab. Wenn die Verbindung schon fehlschlägt, wird also ftp_login mit einer ungültigen
    Verbindungsresource aufgerufen -> Warnung.
    PHP-Code:
    $conn_id ftp_connect($ftp_server);
    if (
    $conn_id===false)
    {
        exit(
    '<!--Verbindung nicht hergestellt!-->');
    }

    // Einloggen mit Benutzername und Kennwort
    $login_result ftp_login($conn_id$ftp_user$ftp_pass);
    if (
    $login_result===false)
    {
        exit(
    '<!--Verbindung nicht möglich-->');
    }

    echo 
    "<!--Verbunden-->";
    // Upload der Datei 
    Du testest übrigens auch nicht den Inhalt von $_FILES ab. Es kann passieren, dass etwas beim Upload fehl schlägt. Dann ist ein Teil von $_FILES['userfile'] vorhanden, aber die (Datei-)Daten sind gültig.
    Schau Dir dazu mal die Felder error und size bei PHP: Handling file uploads - Manual an.

    p.s.: Wo kommt eigentlich die Variable $bilddatei her?

    Einen Kommentar schreiben:


  • oklaf
    antwortet
    Danke für die Hilfe. Ich habe es jetzt mit einem FTP-Stream gelöst. Dafür musste ich nur einen FTP-User übere confixx anlegen und habe dann folgendes Script geschrieben:
    Code:
    <?php
    $ftp_server ="localhost"; //ftp server
    $ftp_user =""; //login ftp
    $ftp_pass =""; //pass ftp
    if ($_FILES)
    { //Dateiname erzeugen
    $source_file = $_FILES['userfile']['tmp_name'];
    $uploadDir = 'pic/';
    $destination_file = $uploadDir . $bilddatei;
    // Herstellen der Basis-Verbindung
    $conn_id = ftp_connect("$ftp_server");
    // Einloggen mit Benutzername und Kennwort
    $login_result = ftp_login($conn_id, "$ftp_user", "$ftp_pass");
    // Verbindung überprüfen
    if ((!$conn_id) || (!$login_result))
    { echo "<!--Verbindung nicht hergestellt!-->";
    echo "<!--Verbindung nicht möglich-->";
    die;
    }
    else
    { echo "<!--Verbunden-->";
    }
    // Upload der Datei
    $upload = ftp_put($conn_id, "$destination_file", "$source_file", FTP_BINARY);
    // Upload-Status überprüfen
    if (!$upload) 
    { echo "<!--Upload war fehlerhaft!-->";
    }
    else
    { echo "<!--Datei geschrieben-->";
    }
    // Schließen des FTP-Streams
    ftp_quit($conn_id);
    }
    ?>
    
    Dabei wird im Vorfeld der Datei ein neuer Name verpasst, zusammengesetzt aus den Zeitinformationen des Zeitstempels date().

    Über die FTP Mehtode lässt sich dann auch das Löschen des Dateien realisieren.

    Gruß
    oklaf

    Einen Kommentar schreiben:


  • Knuff
    antwortet
    Hi

    Zitat von PHP: chmod - Manual
    chmod
    (PHP 4, PHP 5)
    chmod — Changes file mode
    Also der chmod ist der befehl dass es eine datei überschreiben darf!
    Und du musst mit deinem ftp programm rechtsklick auf den ordner wo dieses Bild hinsol gehen und dann auf Properties/chmod gehen und dann am besten denn chmod 777 einstellen!

    Der chmod 777 steht für Lesen und ändern des ordners usw...

    Also wenn du nicht weiter kommst wie mann den chmod einstellt geh auf google oder hier im forum!!!!

    Auserdem däte ich des so schreiben!!!

    PHP-Code:
    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {
          
    extract($_POST);
    if(
    $_FILES['userfile']['tmp_name'] != "" and $_FILES['userfile']['size'] < 102400) {
            
    $uploaddir "zielverzeichniss";                 

                if(
    move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$_FILES['userfile']['name'])){
                echo 
    "Datei wurde hochgeladen";
                }else{
                echo 
    "Datei konnte nicht hochgeladen werden.";
                }
        
        }else{
            echo 
    "Die datei darf höchstens 100kb groß sein!<br>"
        }
    }
    else
    {
    echo
    "
    <form enctype=\"multipart/form-data\" action=\"upload.php\" method=\"post\">
    Wählen Sie eine Datei die hochgeladen werden soll: <input name=\"userfile\" type=\"file\"><input type=\"submit\" value=\"Upload Datei\">
    </form>"
    ;

    Grüße KNuff

    Einen Kommentar schreiben:


  • oklaf
    antwortet
    Ich bin echt Anfänger. Was ist mit top secret oder parent pending in Bezug auf das Verzeichnis gemeint?
    Für den Platzhalter <<ZIELVERZEICHNIS>> habe ich wahlweise den Verzeichnispfad auf dem Server (/var/...../html/...) oder den relativen Bezug vom Ort des Scriptes aus.

    Wie kann ich denn Besitzer der Datei sein? Wovon hängt das ab? Wie vergebe ich (temporär) Root-Rechte?

    Einen Kommentar schreiben:


  • David
    antwortet
    Zitat von http://de2.php.net/chmod
    chmod
    (PHP 4, PHP 5)
    chmod — Changes file mode
    Dafür muss man aber Besitzer des Verzeichnisses sein oder root Rechte haben.
    Sind die "echte" Verzeichnisnamen top secret oder patent pending?

    Einen Kommentar schreiben:

Lädt...
X