[PHP5] CHMOD für aller Dateien in einem Verzeichnis ändern?

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

  • [PHP5] CHMOD für aller Dateien in einem Verzeichnis ändern?

    Hi,

    Ich möchte die chmod aller Dateien in einem bestimmten Verzeichnis ändern. Da das Ganze über eine FTP-Verbindung nicht möglich ist, möchte ich dazu das folgende PHP-Script verwenden:

    PHP-Code:

    $dir
    ="../pics";
        
    $rep=opendir($dir);
        while ( 
    $file readdir($rep) )
        {
            
    chmod($file0777);
        } 
    Leider es klappt nicht, es erscheint folgende Fehlermeldung:
    Warning: chmod() [function.chmod]: Operation not permitted in /home/httpd/...
    Warum eigentlich??

    Danke

  • #2
    Und du hast zur Fehlersuche natürlich folgendes gemacht
    PHP-Code:
    $dir="../pics";
        
    $rep=opendir($dir);
        while ( 
    $file readdir($rep) )
        {
            if(
    chmod($file0777) === false){
                echo 
    $file.'<br/>';
            }
        } 
    Welche Dateinamen werden im Fehlerfalle ausgegeben ? Ich nehme stark an, dass es sich um '.' und '..' handelt. Dazu das Manual

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Danke für die Antwort.

      Die Fehlermeldung sieht jetzt so aus:

      Warning: chmod() [function.chmod]: Operation not permitted in /home/httpd/vhosts/Domain/httpsdocs/admin/chmod.php on line 18
      .

      Warning: chmod() [function.chmod]: Operation not permitted in /home/httpd/vhosts/Domain/httpsdocs/admin/chmod.php on line 18
      ..

      Warning: chmod() [function.chmod]: No such file or directory in /home/httpd/vhosts/Domain/httpsdocs/admin/chmod.php on line 18
      _standard.jpg

      Warning: chmod() [function.chmod]: No such file or directory in /home/httpd/vhosts/Domain/httpsdocs/admin/chmod.php on line 18
      _anonym.jpg

      Warning: chmod() [function.chmod]: No such file or directory in /home/httpd/vhosts/Domain/httpsdocs/admin/chmod.php on line 18
      democracy.jpg

      usw.
      Was nun??

      Kommentar


      • #4
        Also entweder gibt's diese beiden Bildnamen nicht oder du suchst im falschen Verzeichnis. Ich lese bei dir dass das Verz ../pics lauten sollte. Die Fehlermeldung spricht aber von /admin/
        PHP-Code:
        $dir realpath('../pics/'); //ggf den abschliessenden Slash entfernen
        $rep=opendir($dir);
            while ( 
        $file readdir($rep) )
            {
                if(
        $file == '.' || $file == '..') continue;
                if(
        chmod($file0777) === false){
                    echo 
        $file.'<br/>';
                }
            } 
        Und gibt's jetzt immer noch dieselben Fehler ?

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Ich habe nun dein script (chmod.php) gleich in das Verzeichnis "pics" hochgeladen und ausgeführt.

          PHP-Code:
              $dir realpath('.'); 
              
          $rep=opendir($dir);
              while ( 
          $file readdir($rep) )
              {
                  if(
          $file == '.' || $file == '..') continue;
                  if(
          chmod($file0777) === false){
                      echo 
          $file.'<br/>';
                  }
              } 
          Es erscheint nun folgende Fehlermeldung, aber mit Ändern von chmod hat es geklappt.

          Warning: chmod() [function.chmod]: Die Operation ist nicht erlaubt in /home/httpd/vhosts/Domain/httpsdocs/pics/news/chmod.php on line 19
          hand.jpg

          Warning: chmod() [function.chmod]: Die Operation ist nicht erlaubt in /home/httpd/vhosts/Domain/httpsdocs/pics/news/chmod.php on line 19
          chmod.php
          Verstanden habe ich es aber leider nicht.
          Zuletzt geändert von bigtail; 12.11.2006, 23:22.

          Kommentar


          • #6
            Also dass er die Rechte von chmod.php nicht ändern kann dürfte daran liegen, dass dieses File zu diesem Zeitpunkt geöffnet ist und nicht nochmals geöffnet werden kann bzw Rechte verändert werden können.
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Also dass er die Rechte von chmod.php nicht ändern kann dürfte daran liegen, dass dieses File zu diesem Zeitpunkt geöffnet ist und nicht nochmals geöffnet werden kann bzw Rechte verändert werden können.
              Es klingt plausibel, aber warum müsste ich das Script (chmod.php) unbedingt in das Verzeichnis "pics" ausführen?

              Kommentar


              • #8
                Original geschrieben von bigtail
                Es klingt plausibel, aber warum müsste ich das Script (chmod.php) unbedingt in das Verzeichnis "pics" ausführen?
                Müsstest du nicht - wenn du den Pfad vernünftig angeben würdest.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Müsstest du nicht - wenn du den Pfad vernünftig angeben würdest.
                  Hauptverzeichnis: "httpsdocs"
                  Unterverzeichnisse: "admin" und "pics"

                  Die Datei "chmod.php" befindet sich in das Unterverzeichnis "admin" und muss beim Aufruf, chmod von allen Bildern aus dem (Unter)verzeichnis "pics" ändern:

                  PHP-Code:
                  $dir realpath('../pics'); //Raus aus dem "admin", rein ins "pics"
                  $rep=opendir($dir);
                  while ( 
                  $file readdir($rep) )
                      {
                          if(
                  $file == '.' || $file == '..') continue;
                          if(
                  chmod($file0777) === false){
                              echo 
                  $file.'<br/>';
                          }

                  Wäre "../pics" ein vernünftiger Pfad?

                  Gruß

                  Kommentar


                  • #10
                    Wie wär's denn, wenn du beim chmod-Aufruf den Pfad auch mal angibst?
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Etwa so?:

                      PHP-Code:
                      $dir realpath('../pics'); //Raus aus dem "admin", rein ins "pics"
                      $rep=opendir($dir);
                      while ( 
                      $file readdir($rep) )
                          {
                              if(
                      $file == '.' || $file == '..') continue;
                              if(
                      chmod('../pics/'$file0777) === false)
                             {
                                  echo 
                      $file.'<br/>';
                              }

                      Kommentar


                      • #12
                        hast es denn mal ausprobiert!

                        Kommentar


                        • #13
                          Das Berechtigungsproblem kannst du ganz einfach mit ftp_site umgehen.


                          Example:

                          PHP-Code:

                          <?php
                            
                          // Verbindung per FTP zum Server herstellen 
                            
                          $conn ftp_connect("localhost"); 
                             
                            
                          // Logindaten senden 
                            
                          ftp_login($conn"username""passwort"); 
                             
                            
                          // In das Verzeichnis wechseln, in der die zu ändernde Datei liegt, muss man aber nicht 
                            // hier muss man vom FTP-Rootverzeichnis ausgehen, nicht vom Documentroot - also nicht /var/www/html/ sondern /html, wenn das so eingestellt ist 
                            
                          ftp_chdir($conn"/goto/my/dir"); 
                             
                            
                          // Mods der Datei oder des Verzeichnisses ändern 
                            // - CHMOD ist klar, das ist der Befehl, der dem FTP Server sagt, dass er die Mods ändern soll 
                            // - 0747 sind die Mods, die geändert werden sollen - es muss immer eine 0 vorangestellt sein 
                            // - index.php ist eine Beispieldatei 
                            
                          ftp_site($conn"CHMOD 0747 index.php"); 
                             
                            
                          // Verbindung wieder trennen 
                            
                          ftp_close($conn); 
                          ?>

                          <edit>Und wenn du den Rekursiv-Parameter mit anhängst, brauchst du auch nicht mit PHP die Ordnerstruktur durchlaufen</edit>
                          Zuletzt geändert von MrJonez; 16.11.2006, 18:42.
                          The right way is wrong oder auch right != right

                          Kommentar

                          Lädt...
                          X