Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit mkdir() und SAFE_MODE

Einklappen

Unconfigured Ad Widget

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

  • Problem mit mkdir() und SAFE_MODE

    Hej!

    Ich hab folgendes Problem: Ich hab ein kleines Fotoalbum, in dem ich über ein script ein neues verzeichnis anlegen kann. Sieht so aus:

    Code:
    $id=-1;
      do{$id++;}
      while(mysql_num_rows(mysql_query("SELECT * FROM abi_foto_alben WHERE id='".$id."'"))!=0);
      
      if(!is_dir("bilder/".$id."")){mkdir("bilder/".$id."",0777);}
    So dann hab ich noch ein script mit dem ich die Bilder ins Internet hochlade:

    Code:
    if(isset($_FILES["data"]) && !$_FILES["data"]["error"]){   
       move_uploaded_file($_FILES["data"]["tmp_name"], "bilder/".$_POST["album"]."/".$id.".jpg");   }
    wenn ich jetzt das bild hochladen will dann kommt eine typische SAFE_MODE fehlermeldung:
    Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 1121 is not allowed to access /home/www/web245/xyz owned by uid 33 in /home/www/web245/html/xyz/index.php on line 12

    soweit verstehe ich das noch, dass ich move_uploaded_file() nur so benutzen kann, dass das bild im selben ordner wie php gespeichert wird.

    allerdings kommt dieser fehler nicht, wenn ich über ein ftp-programm, namentlich bei mir WS_FTP, den ordner erstelle mit chmod 0777.

    Wieso geht es wenn der ordner per ftp erstellt wird, aber nicht wenn ich ihn per mkdir() erstelle??


  • #2
    Re: Problem mit mkdir() und SAFE_MODE

    Zitat von Calexico
    Wieso geht es wenn der ordner per ftp erstellt wird, aber nicht wenn ich ihn per mkdir() erstelle??
    Weil das übergeordnete Verzeichnis dem FTP-User und nicht dem Webserver gehört. Im safe_mode achtet PHP auf die UserID des Scriptes und des Verzeichnisses und legt dort den Daumen dazwischen.

    Es gibt allerdings die ftp_* Funktionen, mit denen man diese Hürde ganz locker nehmen kann.

    Kommentar


    • #3
      So hab das ganze jetzt mal nach dem Beispiel umgebastelt:

      hab ne datei ftp.php die connectet:
      Code:
      $ftp_server="ftp://ftp.web245.silverline-s11.de/";
      $ftp_user_name="user";
      $ftp_user_pass="1234";
      
      // Herstellen der Basis-Verbindung
      $conn_id = ftp_connect("$ftp_server"); 
      
      // Einloggen mit Benutzername und Kennwort
      $login_result = ftp_login($conn_id, "$ftp_user_name", "$ftp_user_pass"); 
      
      // Verbindung überprüfen
      if ((!$conn_id) || (!$login_result)) { 
              echo "Ftp-Verbindung nicht hergestellt!";
              echo "Verbindung mit $ftp_server als Benutzer $ftp_user_name nicht möglich"; 
              die; 
          }
      und schon hier geht's nicht: ich bekomme folgende fehlermeldung:

      Warning: ftp_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/www/web245/html/abi/ftp.php on line 7

      Warning: ftp_login() expects parameter 1 to be resource, boolean given in /home/www/web245/html/abi/ftp.php on line 10

      was muss ich anders machen?

      Kommentar


      • #4
        Zitat von Calexico
        So hab das ganze jetzt mal nach dem Beispiel umgebastelt:

        hab ne datei ftp.php die connectet:
        [ script ]
        und schon hier geht's nicht: ich bekomme folgende fehlermeldung:

        Warning: ftp_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/www/web245/html/abi/ftp.php on line 7

        Warning: ftp_login() expects parameter 1 to be resource, boolean given in /home/www/web245/html/abi/ftp.php on line 10

        was muss ich anders machen?
        PHP-Code:
        $ftp_server="ftp.web245.silverline-s11.de"# Hostname
        $ftp_user_name="user";
        $ftp_user_pass="1234";

        $ziel dirname(__file__) . '/upload'# Verzeichnis muß existieren

        # angenommenes Formularelement mit dem Namen 'bild'

        $quell_name $_FILES['bild']['tmp_name'];
        $ziel_name $_FILES['bild']['name'];

        // Herstellen der Basis-Verbindung
        if (! $conn = @ftp_connect("$ftp_server")) die ('Den Server gibts nicht');

        // Einloggen mit Benutzername und Kennwort
        if (! @ftp_login($conn$ftp_user_name$ftp_user_pass)) die ('Kein Login');

        if (! @
        ftp_chdir $conn$ziel)) die ('Kann nicht in Verzeichnis wechseln');

        if (! @
        ftp_fput($conn$quell_name$ziel_nameFTP_BINARY))  die ('Kann Datei nicht uploaden');

        #Quelle löschen
        @unlink($_FILES['bild']['tmp_name']); # Fehlermeldung ausknipsen. Wenn nicht gelöscht werden darf, dann bleibt es eben liegen 
        So oder so ähnlich...

        Kommentar


        • #5
          hmmm.....also ähnlich hatte ich meins auch, es ging ja noch weiter. ich hab einfach, das beispiel angewendet:

          Code:
          <?php
          $ftp_server="ftp.web245.silverline-s11.de/";
          $ftp_user_name="user";
          $ftp_user_pass="1234";
          
          // Herstellen der Basis-Verbindung
          $conn_id = ftp_connect($ftp_server); 
          
          // Einloggen mit Benutzername und Kennwort
          $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
          
          // Verbindung überprüfen
          if ((!$conn_id) || (!$login_result)) { 
                  echo "Ftp-Verbindung nicht hergestellt!";
                  echo "Verbindung mit $ftp_server als Benutzer $ftp_user_name nicht möglich"; 
                  die; 
              } 
          
          if(isset($_FILES["data"]) && !$_FILES["data"]["error"]){   
            
            $destination_file="bilder/".$_POST["album"]."/".$id.".jpg";
            $source_file=$_FILES["data"]["tmp_name"];
            
            // Upload der Datei
          $upload = ftp_put($conn_id, "$destination_file", "$source_file", FTP_BINARY); 
          
          // Upload-Status überprüfen
          if (!$upload) { 
                  Header("Location:../../index.php?path=interaktiv/fotoalbum/neu_bild&error=1".$session.""); exit;
              }
          
          // Schließen des FTP-Streams
          ftp_quit($conn_id);
          }
          ?>
          kurze fragen: was ist der unterschied zwischen ftp_put() und ftp_fput()? hat das irgendwelche auswirkungen? und muss ich in das verzeichnis wechseln bevor ich was rein kopiere?[/code]

          Kommentar


          • #6
            Zitat von Calexico
            hmmm.....also ähnlich hatte ich meins auch, es ging ja noch weiter. ich hab einfach, das beispiel angewendet:

            kurze fragen: was ist der unterschied zwischen ftp_put() und ftp_fput()? hat das irgendwelche auswirkungen?
            Einfach mal ausprobieren. Im Handbuch erscheinen beide Funktionen "auf den ersten Blick" gleich oder wenigstens ähnlich.
            und muss ich in das verzeichnis wechseln bevor ich was rein kopiere?
            Ja. Das ist bei FTP so Sitte.

            PHP-Code:
            <?php
            # ...
            // Upload-Status überprüfen
            if (!$upload) { 
                    
            Header("Location:../../index.php?path=interaktiv/fotoalbum/neu_bild&error=1".$session.""); exit;
                }
            ?>
            1. was steht in $session?
            2. fehlt da noch session_write_close() vor header()
            3. absoluten URL bei Location.
            4. warum arbeitest Du nicht alles ab und merkst Dir die Fehler in der Session?

            Kommentar


            • #7
              zu meiner variablen $session ist zu sagen, dass ich nicht mit sessions arbeite sondern nur mit der id!

              den fehler warum ich keine verbindung bekam, hab ich gefunden! $ftp_server hatte nen / drin und das darf ja nicht sein!

              jetzt hab ich das problem, dass das verzeichnis oder die datei nicht existiert:
              Warning: ftp_put(): bilder/3/1.jpg: No such file or directory in /home/www/web245/html/abi/interaktiv/fotoalbum/speichern_bild.php on line 18

              aber ich denke wenn ich vorher das verzeichnis wechsel dürfte es ja funktionieren,oder?

              Kommentar


              • #8
                Zitat von Calexico
                zu meiner variablen $session ist zu sagen, dass ich nicht mit sessions arbeite sondern nur mit der id!
                Sowas ist Unfug, auf den Luxus zu verzichten.

                den fehler warum ich keine verbindung bekam, hab ich gefunden! $ftp_server hatte nen / drin und das darf ja nicht sein!
                Das hatte ich übersehen, weil Du geschrieben hattest, Du hättest meinen Scriptvorschlag nur erweitert.

                jetzt hab ich das problem, dass das verzeichnis oder die datei nicht existiert:
                Warning: ftp_put(): bilder/3/1.jpg: No such file or directory in /home/www/web245/html/abi/interaktiv/fotoalbum/speichern_bild.php on line 18
                Korrekt. Pfade werden in PHP anders angegeben als in HTML.

                Kommentar


                • #9
                  wie werden sie denn angegeben? komme grad auf keinen grünen zweig!

                  Kommentar


                  • #10
                    Zitat von Calexico
                    wie werden sie denn angegeben?
                    Entweder absolut
                    Code:
                    /home/www/web245/html/abi/interaktiv/fotoalbum/
                    oder relativ
                    Code:
                    ./
                    Das kennzeichnet das aktuelle Verzeichnis, in dem sich das aufgerufene Script befindet.

                    Das ist kein gültiger Pfad:
                    Code:
                    bilder/3
                    Das wäre ein gültiger Pfad:
                    Code:
                    ./bilder/3

                    Kommentar


                    • #11
                      so hab das ganze jetzt global angegeben, jetzt kommt dieser fehler:
                      Warning: ftp_chdir(): /home/www/web245/html/abi/interaktiv/fotoalbum/bilder/0: No such file or directory in /home/www/web245/html/abi/interaktiv/fotoalbum/speichern_bild.php on line 19

                      also problem immer noch nicht behoben! das verzeichnis existiert, kann ich über webFTP in der Confixx ebene berprüfen. chmod ist 0777

                      Kommentar


                      • #12
                        also die bilder werden trotzdem hochgeladen nur eben in /home/www/web245/html/abi in dieses verzeichnis?!?!

                        Kommentar


                        • #13
                          Zitat von Calexico
                          so hab das ganze jetzt global angegeben, jetzt kommt dieser fehler:
                          Warning: ftp_chdir
                          Obacht! Ob Du bei FTP auf dem remote system einen absoluten Pfad angeben kannst, weiß ich (noch) nicht genau.

                          Teste erst, in welchem Verzeichnis Du Dich nach dem Connect befindest:
                          PHP-Code:
                          echo ftp_pwd ($conn); 
                          Für Verzeichniswechsel gibt es diese beiden Funktionen
                          rein: ftp_chdir($conn, $verzeichnis)
                          eine Etage höher: ftp_cdup($conn)

                          Kommentar


                          • #14
                            ich befinde mich ganz oben, d.h. der angezeigt pfad ist: /

                            da der username mit dem ich mich einloggen erst ab html/abi zugriff hat vermute ich, dass ich hier stecke.

                            darf ich jetzt keine absoluten angaben verwenden.

                            Kommentar


                            • #15
                              Zitat von Calexico
                              ich befinde mich ganz oben, d.h. der angezeigt pfad ist: /
                              OK. Dann mappt der Server das Verzeichnis.

                              darf ich jetzt keine absoluten angaben verwenden.[/quote]
                              Laß mal die absoluten Pfade bei remote weg.

                              Kommentar

                              Lädt...
                              X