<?php
/* Autor:      Felix Stahlberg                                               */
/* E-Mail:     stahli36@googlemail.com                                       */
/* URL:        http://www.xilef-software.de/                                 */
/* This program is free software; you can redistribute it and/or modify it   */
/* under the terms of the GNU General Public License as published by the     */
/* Free Software Foundation; either version 2 of the License, or (at your    */
/* option) any later version.                                                */

/*
Konfiguration
-------------------------------------------------------------
*/
$exts=array(//Alle Dateiendungen bei denen die Datei nach Verweisen durchsucht werden sollen die dann LowerCase gesetzt werden (Reguläre Ausdrücke erlaubt)
'[ps]?htm[l]?','php[3-5]?','css','js'
);
$keywords=array(//Beinhaltet alle Schlüsselwörter die vor Verweisen stehen (Reguläre Ausdrücke nicht erlaubt)
'src=','href=','url'
);
$delimiters=array(//Zeichen die den Verweis umgeben können ( startzeichen=>endzeichen )
'"'=>'"',
'\''=>'\'',
'('=>')'
);
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>LowerCase-R</title>
<style type="text/css">
div.err{
    padding:2px;
    border:1px solid #FFFFFF;
    background-color:#FF0000;
    color:#FFFFFF;
}
</style>
</head>
<body>
<h1>LowerCase-R</h1>
<?php
    $err
=0;
    
$renamed=0;
    
$edited=0;
    
$cwd=getcwd();//Ordner in dem das Script liegt
    
function proofURI($uri)
    {
//Prüft ob $uri eine Datei ist. Wenn ja:lowercase setzen und zurückgeben. Wenn nein: false zurückgeben
        
$loweruri=strtolower($uri);
        if((
$loweruri==$uri)||(ereg('^http://',$loweruri))||(ereg('^mailto:',$loweruri))||(ereg('^javascript:',$loweruri)))
            return 
false;
        else
            if(@
file_exists($loweruri))//Geht weil das Arbeitsverzeichnis geändert wurde
                
return $loweruri;
            else return 
false;
    }
    function 
dirtolower($dir='.'){
        global 
$err,$renamed;
        
$handle=opendir($dir);
        while(
false!==($file=readdir($handle)))
            if((
$file!='.')&&($file!='..')){
                
$lowerfile=strtolower($file);
                if(
$file!=$lowerfile){//umbenennen
                    
if(@rename("$dir/$file","$dir/$lowerfile")){
                        echo 
"<li><em>$dir/$file</em> --> <em>$dir/$lowerfile</em></li>\n";
                        
$renamed++;
                    }else{
                        echo 
"<li><div class=\"err\">Konnte <em>$dir/$file</em> nicht umbenennen. Evt. Rechte richtig setzen oder von Hand umbenennen und <em>lowercase.php</em> nochmals ausf&uuml;hren.</li>\n";
                        
$err++;
                    }
                }
                if(
is_dir("$dir/$lowerfile/"))//Rekursion
                    
dirtolower("$dir/$lowerfile");
            }
        
closedir($handle);
    }
    function 
HandleDir($dir='.')
    {
//Sucht innerhalb von Dateien nach Verweisen
        
global $exts,$keywords,$delimiters,$err,$cwd,$edited;
        
$handle=opendir($dir);
        while(
false!==($file=readdir($handle)))
            if((
$file!='.')&&($file!='..')){                        
                if(
is_dir("$dir/$file/"))//Rekursion
                    
HandleDir("$dir/$file");
                elseif(
is_file("$dir/$file")){
                    
$good_ext=false;
                    foreach(
$exts as $ext)//Schauen ob gewünschte Dateiendung
                        
if(ereg('\.'.$ext.'$',$file)){//Endung gefunden
                            
$good_ext=true;
                            break;
                        }
                    if(
$good_ext){//Datei nach Pfadangaben durchsuchen und sie LowerCase setzen
                        
if(!($content=file("$dir/$file"))){
                            
$echo="<br><div class=\"err\">Konnte Datei nicht zum Lesen &ouml;ffnen!</div>\n";
                            
$err++;
                        }
                        
$echo='';
                        
chdir("$dir/");//Arbeitsverzeichnis wechseln
                        
for($i=0;isset($content[$i]);$i++)
                            foreach(
$keywords as $keyword){
                                
$pos=0;
                                while(
is_numeric($pos=strpos($content[$i],$keyword,$pos))){
                                    
$pos+=strlen($keyword);
                                    if(isset(
$delimiters[$char=substr($content[$i],$pos,1)])){
                                        
$char=$delimiters[$char];//Dem Startzeichen das Endzeichen zuweisen
                                        
$pos=$pos+1;
                                    }else
//Defaultwert (gar kein '," oder ( )
                                        
$char=' ';                                
                                    
$endpos=strpos($content[$i],$char,$pos);
                                    if((
is_numeric($endpos))&&($endpos>$pos)){
                                        
$oldURI=substr($content[$i],$pos,$endpos-$pos-0);
                                        if((
$oldURI!=($newURI=proofURI($oldURI)))&&($newURI!=false)){//Es wurde ein Kanditat gefunden
                                            
$content[$i]=substr($content[$i],0,$pos).$newURI.substr($content[$i],$endpos);
                                            
$echo.="\n<br>--> Zeile ".($i+1).": <em>$oldURI</em> -> <em>$newURI</em>"
                                        }
                                    }
                                }
                            }
                        
chdir($cwd);//Und wieder zurück ins Stammverzeichniss
                        
if($echo!='')//Änderung ausgeben und Datei speichern                            
                            
if(!($datei=@fopen("$dir/$file",'w'))){
                                echo 
"<li><strong>$dir/$file</strong>\n<div class=\"err\">Konnte Datei nicht zum Schreiben &ouml;ffnen!</div></li>\n";
                                
$err++;
                            }else{
                                foreach(
$content as $line)
                                    
fwrite($datei,$line);
                                
fclose($datei);
                                echo 
"<li><strong>$dir/$file:</strong>$echo\n</li>\n";
                                
$edited++;
                            }
                    }
                }
//ende von elseif(is_file("$dir/$file")){
                
else{//Weder Ordner noch Datei...
                    
echo "<li><div class=\"err\"><em>$dir/$file ist weder ein Ordner noch eine Datei, darum wurde es &uuml;bersprungen.</em></li>\n";
                    
$err++;
                }
            }
        
closedir($handle);
    }
    echo 
'<div style="margin-left:15px">Es werden Dateien bearbeitet, deren Endungen auf einen der folgenden RE-Pattern passen: ';
    foreach(
$exts as $ext)
        echo 
"<strong>$ext</strong>&nbsp;&nbsp;";
    echo 
'</div>
<div style="margin:15px;padding:20px;background-color:#CCCCCC;font-family:\'Courier New\', Courier, mono">'
;
    echo 
"<h2>Dateien und Ordner kleinschreiben</h2>\n<ul>";
    
dirtolower();
    echo 
"</ul>\n<h2>Dateien nach Pfadangaben durchsuchen</h2>\n<ul>";
    
HandleDir();
    echo 
"\n</ul>\n<h2>Zusammenfassung</h2>\n<ul>";
    echo 
'<li>Es wurde'.(($renamed==1)?'':'n')." <strong>$renamed</strong> Ordner und Dateien umbenannt.</li>
<li>In <strong>$edited</strong> Datei"
.(($edited==1)?'':'en')." mussten die Pfadangaben und Verweise angepasst werden.</li>";
    if(
$err==0)
        echo 
'<li>Es sind <strong>keine</strong> Fehler aufgetreten!</li>';
    else
        echo 
'<li><div class="err">Es '.(($err==1)?'ist':'sind')." <strong>$err</strong> Fehler aufgetreten!</div></li>";
    echo 
"\n</ul>";
?>
</div>
<div style="text-align:center;margin-top:20px;font-size:12px">Dieses Script ist von <a href="http://www.xilef-software.de/">Felix Stahlberg</a>.</div>
</body>
</html>