<?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ü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 ö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 ö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 ü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> ";
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>