Franco: Script macht nicht ganz, was es soll?

Hallo,

da ich in meinem Projekt erst jetzt mit einer "echten" Versionsverwaltung anfange, möchte ich allen .php-Dateien einen Kommentarheader an den Anfang setzen.

Dazu dachte ich mir, schreibe ich ein kleines php-script, was diese Aufgabe rekursiv erfüllen soll:

  
<?  
$dir = openDir("test");  
while ($file = readdir($dir)) {  
if ($file != "." && $file != "..") {  
if (strstr($file, ".php")) {  
$name = explode(".", $file);  
$datei = file_get_contents("test/$file");  
file_put_contents("test/$file", str_replace('<?', "<?\r\n  
//==================================================  
//Text...  
//\$Id:  
//Text...  
//==================================================\r\n", $datei));  
}  
  }  
    }  
closedir($dir);  
echo ("fertig ;-)");  
?>  

Dazu 2 Fragen:

  1. Hat jemand eine bessere Lösung als meine Obige?
  2. Das Script scheint zu funktionieren, allerdings schreibt es in einige wenige Dateien nicht

//==================================================
//Text...
//$Id:
//Text...
//==================================================

sondern dasselbe mit diesem Quadrat (das Teil, was entsteht, wenn man Zeilenumbrüche als Binärdatei öffnet) hinter den Zeiln.

Weiß jemand, wie das kommt?

Grüße, Frank

  1. Dazu dachte ich mir, schreibe ich ein kleines php-script, was diese Aufgabe rekursiv erfüllen soll:

    oops, das script arbeitet gar nicht rekursiv :-(

  2. Hi,

    [code lang=php]
    <?

    Verbesserungsvorschlag: verwende keine short open tags fuer PHP.

    Und Du solltest noch den Zweig einbauen, der die Unterverzeichnisse beruecksichtigt.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Verbesserungsvorschlag: verwende keine short open tags fuer PHP.

      Ok. Das könnte ich ja jetzt endlich mal in einem mitmachen, wenn ich eh schon suche und ersetze ;-)

      Und Du solltest noch den Zweig einbauen, der die Unterverzeichnisse beruecksichtigt.

      Habe ich auch schon gemerkt... und denke auch schon darüber nach, wie...

      Und was sagst Du zu den kleinen Quadraten? (Haben die nen Namen?)

      Grüße, Frank

  3. Hi,

    1. Das Script scheint zu funktionieren, allerdings schreibt es in einige wenige Dateien nicht

    //==================================================
    //Text...
    //$Id:
    //Text...
    //==================================================

    sondern dasselbe mit diesem Quadrat (das Teil, was entsteht, wenn man Zeilenumbrüche als Binärdatei öffnet) hinter den Zeiln.

    das dürfte daran liegen, dass dein Script gemischte Zeilenumbrüche schreibt: Explizite in der Form CR, LF (0D 0A), und weitere in der Form, wie sie im Quellcode stehen. Das ist je nach System entweder nochmal CF, LF (Windows; unwahrscheinlich, dann hättest du einfach Leerzeilen im Code), oder ein einzelnes LF (Unix, dann hast du insgesamt CR, LF, LF).

    Ciao,
     Martin

    --
    Heutzutage gilt ein Mann schon dann als Gentleman, wenn er wenigstens die Zigarette aus dem Mund nimmt, bevor er eine Frau küsst.
      (Barbra Streisand, US-Schauspielerin)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. das dürfte daran liegen, dass dein Script gemischte Zeilenumbrüche schreibt: Explizite in der Form CR, LF (0D 0A), und weitere in der Form, wie sie im Quellcode stehen. Das ist je nach System entweder nochmal CF, LF (Windows; unwahrscheinlich, dann hättest du einfach Leerzeilen im Code), oder ein einzelnes LF (Unix, dann hast du insgesamt CR, LF, LF).

      Hallo Martin,

      habe leider in keiner Weise verstanden, was Du mir damit sagen willst.

      Was muss ich denn in meinem inzwischen rekursiv funktionierenden Script ändern, damit ich diese Vierecke nicht mehr habe?

      Haben die keinen Namen??

      Dann will ich sie ja alleine deshalb schon nicht ;-)

        
      <?php  
      function dir_rekursiv($verzeichnis)  
      {  
          $handle =  opendir($verzeichnis);  
          while ($datei = readdir($handle))  
          {  
              if ($datei != "." && $datei != "..")  
              {  
                  if (is_dir($verzeichnis.$datei)) // Wenn Verzeichniseintrag ein Verzeichnis ist  
                  {  
                      // Erneuter Funktionsaufruf, um das aktuelle Verzeichnis auszulesen  
                      dir_rekursiv($verzeichnis.$datei.'/');  
                  }  
                  else  
                  {  
                      // Wenn Verzeichnis-Eintrag eine Datei ist, diese ausgeben  
                      //echo $verzeichnis.$datei.'<br />';  
        
      if (strstr($verzeichnis.$datei, ".php")) {  
      $name = explode(".", $verzeichnis.$datei);  
      $dateiinhalt = file_get_contents("".$verzeichnis.$datei."");  
      file_put_contents("".$verzeichnis.$datei."", str_replace('<?', "<?php\r\n  
      //==================================================  
      //Text...  
      //\$Id:  
      //Text...  
      //==================================================\r\n", $dateiinhalt));  
      }  
        
                      }  
              }  
          }  
          closedir($handle);  
      }  
        
      dir_rekursiv('test'.'/');  
        
      echo ("fertig ;-)");  
        
      ?>  
        
      Grüße, Frank  
      
      
      1. Hi,

        das dürfte daran liegen, dass dein Script gemischte Zeilenumbrüche schreibt: Explizite in der Form CR, LF (0D 0A), und weitere in der Form, wie sie im Quellcode stehen.

        habe leider in keiner Weise verstanden, was Du mir damit sagen willst.

        Was ist denn daran unverständlich?

        file_put_contents("".$verzeichnis.$datei."", str_replace('<?', "<?php\r\n

        //==================================================
        //Text...
        //$Id:
        //Text...
        //==================================================\r\n", $dateiinhalt));
        }

          
        Hier hast du zum Teil Zeilenumbrüche eingefügt, in dem du dafür die PHP-Steuerzeichen \r\n verwendet hast.  
        Es gibt aber auch noch andere Zeilenumbrüche in dem Textliteral, dass du hier erzeugt - die, die du in deinem Editor eingegeben hast, und die jetzt „unsichtbar“ die Zeilen voneinander trennen.  
          
        Erst mal ist sowieso nicht ersichtlich, warum du hier Zeilenumbrüche auf zwei verschiedene Arten in den Text einbaust;  
        Und wenn auf deinem System der Zeilenumbruch durch ein anderes Zeichen/Zeichensequenz dargestellt wird als durch CRLF bzw. hexadezimal 0D0A, dann hast du damit auch noch gleich zwei verschiedene „Arten“ von Zeilenumbrüchen in dem Ergebnis, welches du in die Datei wegschreibst.  
          
        MfG ChrisB  
          
        
        -- 
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        
        1. Hallo Chris,

          file_put_contents("".$verzeichnis.$datei."", str_replace('<?', "<?php\r\n

          //==================================================
          //Text...
          //$Id:
          //Text...
          //==================================================\r\n", $dateiinhalt));
          }

          
          >   
            
          
          > Erst mal ist sowieso nicht ersichtlich, warum du hier Zeilenumbrüche auf zwei verschiedene Arten in den Text einbaust;  
          > Und wenn auf deinem System der Zeilenumbruch durch ein anderes Zeichen/Zeichensequenz dargestellt wird als durch CRLF bzw. hexadezimal 0D0A, dann hast du damit auch noch gleich zwei verschiedene „Arten“ von Zeilenumbrüchen in dem Ergebnis, welches du in die Datei wegschreibst.  
          >   
            
            
          Ich habe nun jeweils denm einen bzw. den anderen Zeilenumbruch mal weggelassen.  
            
          Das Ergebniss ist dasselbe. Immer wieder diese namenlosen Vierecke am Ende der Zeile. \*hmm\*  
            
          Was also muß ich tun, damit die wegbleiben und nur ein ganz normaler Unix-Zeilenumbruch entsteht?  
            
          Grüße, Frank
          
          1. moin,

            Das Ergebniss ist dasselbe. Immer wieder diese namenlosen Vierecke am Ende der Zeile. *hmm*

            Guck dir mal diese namenlosen Vierecke mit einem Hexeditor an...

            Was also muß ich tun, damit die wegbleiben und nur ein ganz normaler Unix-Zeilenumbruch entsteht?

            guck dir mal alle deine Dateien mit einem Hexeditor an. Vermutlich sind die nicht alle im gleichen Format gespeichert, was Zeilenumbrüche angeht.

            Hotti