PHP Script

nick25

Well-known member
ID: 205997
L
30 Mai 2009
512
23
suche ein php script/schnipsel, das automatsch in jeder php datei oben in der ersten zeile ein copyright einfügt.

die verzeichnissstrucktur ist so:

Unbenannt9f8bb.jpg


hat vieleicht jemand was rumliegen oder hat eine url? google spuckt nichts vernünftiges aus

vielen dank
 
Alternativ: mit einer FOR/EACH-Schleife die Verzeichnisstruktur auslesen, Datei lesen, Copyright schreiben, alten Inhalt anhängen.

Und: Struktur, Projekte
 
Auf Unix-Systemen am schnellsten auf der Kommandozeile:
Code:
[FONT="Courier New"]find . -name \*.php -exec sed -i.bak -e 1iCopyright\ 2014  "{}" \;[/FONT]


Für mehrere Dateitypen:
Code:
[FONT="Courier New"]for type in css html js php xml
do
find . -name \*.$type -exec sed -i.bak -e 1iCopyright\ 2014  "{}" \;
done[/FONT]


Wenn man .bak wegläßt wird kein Backup der bearbeiteten Datei(en) angelegt.
 
Zuletzt bearbeitet:
Alternativ: mit einer FOR/EACH-Schleife die Verzeichnisstruktur auslesen, Datei lesen, Copyright schreiben, alten Inhalt anhängen.

Und: Struktur, Projekte

Das habe ich schon probiert. irgendwie funktioniert das nicht. deshalb fragte ich ja nach irgendwas fertiges.

Auf Unix-Systemen am schnellsten auf der Kommandozeile:
Code:
[FONT="Courier New"]find . -name \*.php -exec sed -i.bak -e 1iCopyright\ 2014  "{}" \;[/FONT]


Für mehrere Dateitypen:
Code:
[FONT="Courier New"]for type in css html js php xml
do
find . -name \*.$type -exec sed -i.bak -e 1iCopyright\ 2014  "{}" \;
done[/FONT]


Wenn man .bak wegläßt wird kein Backup der bearbeiteten Datei(en) angelegt.

vielen dank apolle, für unix kann ich es nicht brauchen. es soll php sein
 
ich habe es jetzt so gelöst:

PHP:
<?php

function verzeichnis($dir = "./") {
    if(!$dh = opendir($dir)) return false;
   
    if(substr($dir, -1) != "/") $dir .= "/";
    $files = array();
   
    while($file = readdir($dh)) {
        $path = $dir . $file;
        if($file == "." || $file == "..") continue;
       
        if(is_dir($path)) {
            if(!$sub = verzeichnis($path)) continue;
           
            $files = array_merge($files, $sub);
        }
        else {
            $files[] = $path;
        }
    }
   
    closedir($dh);
    sort($files);
    return $files;
}
$dir = verzeichnis("./alt/");
$php = preg_grep("/\.(php?p)$/i", $dir);

foreach($php as $path) 
{
    $inhalt = file_get_contents( $path ); 
    $copyr = '
    <?php 
    /**
    *
    *    
    *   hier kommt das Copyright hin.
    */
    ?>
    
    '.$inhalt.'';
    
        $path1 = str_replace ( 'alt', 'neu', $path );
        $datei = fopen($path1,"w");
        fwrite($datei, $copyr);
        echo $path.' geschrieben <br>'; 
}
?>

er schreibt die neuen datein im ordner "neu" nicht. wo liegt der fehler?
 
Mit fopen() können nur Dateien in vorhandenen Verzeichnissen angelegt werden, wenn das Zielverzeichnis nicht existiert schlägt der Aufruf fehl. Der Rest funktionuckelt.

edit: Funktionuckelt nur fast: Außerdem muß '?p' (Zeile 28, preg_grep) raus. (Über das 'Warum?' denke ich aber frühestens beim nächsten Brinkhoffs nach. Oder auch nicht...)
 
Zuletzt bearbeitet:
edit: Funktionuckelt nur fast: Außerdem muß '?p' (Zeile 28, preg_grep) raus. (Über das 'Warum?' denke ich aber frühestens beim nächsten Brinkhoffs nach. Oder auch nicht...)

verstehe ich nicht. wieso muß das raus?

könntest du mir sagen wie ich es hinbekomme das er anhand der variable $path die neuen php dateien und verzeichnisse schreibt?
 
verstehe ich nicht. wieso muß das raus?
Kann ich nur raten, aber wenn es drin steht bekomme ich 'ne Fehlermeldung. Vlt wissen die preg_grep-Profis dazu mehr.

könntest du mir sagen wie ich es hinbekomme das er anhand der variable $path die neuen php dateien und verzeichnisse schreibt?
Entweder legst Du schon während der Suche alle Verzeichnisse an oder Du fügst unmittelbar vor fopen() eine Schleife ein die die in $path enthaltenen Verzeichnisse erstellt.

Für Variante 1 reicht ein mkdir-Aufruf im auf if(is_dir($path)) folgenden Block, uU gibt es unter ./neu dann aber einen Haufen leerer Verzeichnisse:

mkdir(str_replace ( 'alt', 'neu', $path ));

Variante 2 ist aufwendiger, hat aber den Vorteil, daß nur Verzeichnisse angelegt werden in denen zu bearbeitende Dateien gefunden wurden. Aus './alt/diese/Datei/liegt/ganz/woanders.html' müssten dazu folgende "Aufrufe" generiert werden:

mkdir neu/diese
mkdir neu/diese/Datei
mkdir neu/diese/Datei/liegt
mkdir neu/diese/Datei/liegt/ganz
fopen neu/diese/Datei/liegt/ganz/woanders.html
 
vielen dank, jetzt klappt es.

wer es brauchen kann.

PHP:
<?php

function verzeichnis($dir = "./") {
    if(!$dh = opendir($dir)) return false;
   
    if(substr($dir, -1) != "/") $dir .= "/";
    $files = array();
   
    while($file = readdir($dh)) {
        $path = $dir . $file;
        if($file == "." || $file == "..") continue;
       
        if(is_dir($path)) {
            if(!$sub = verzeichnis($path)) continue;
           
            $files = array_merge($files, $sub);
        }
        else {
            $files[] = $path;
        }
    }
   
    closedir($dh);
    sort($files);
    return $files;
}
$dir = verzeichnis("./alt/");
$php = preg_grep("/\.(php)$/i", $dir);

foreach($php as $path) 
{
    $inhalt = file_get_contents( $path ); 
    $copyr = '
    <?php 
    /**
    *
    *    12345
    *   hier kommt das Copyright hin
    */
    ?>
    
    '.$inhalt.'';
    
        $path1 = str_replace ( 'alt', 'neu', $path );
        $dirname = dirname($path1);
        
        if (file_exists($dirname)) 
        {
            //echo "Die Datei $dirname existiert";
        } 
        else 
        {
            mkdir($dirname, 0777, true);
        }
        
        $datei = fopen($path1,"w");
        fwrite($datei, $copyr);
        echo $path.' geschrieben <br>'; 

}
?>