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

  • 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>";

  • #2
    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?

    Kommentar


    • #3
      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?

      Kommentar


      • #4
        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

        Kommentar


        • #5
          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

          Kommentar


          • #6
            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?

            Kommentar


            • #7
              $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

              Kommentar


              • #8
                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

                Kommentar

                Lädt...
                X