config datei per php ändern
Römi 01.05.2004 - 22:30 613 5
Römi
Hausmeister
|
Ich will meine config.php von einem script aus umschreiben können. ich hab mal etwas code von hier geklaut: http://www.overclockers.at/showthre...light=php+queryEs funktioniert auch halbwegs, aber ich hab das Problem dass teilweise die Datei nachher verwurschtelt ist, zB sind die letzen paar zeilen doppelt oder ich hab auf einmal 2 ?> am ende. Ich check nicht wo ich den Fehler hab... glaub entweder passt eine abfrage und schleife irgendwie nicht oder das <? macht ihm zu schaffen. <?php
$target="$_SERVER[DOCUMENT_ROOT]/mm2/test";
//datei einlesen
$datei = fopen("$target","r") or die("Error: Could not open file!");
$data = fread($datei, filesize("$target"));
fclose($datei);
$all = explode("\n",$data);
//die zu ersetzenden sachen, getrennt nach Variablenname und Wert mit "" sofern nötig
$var1 = array('$db_servername', '$mm_root', '$unauthorizedmessage', '$ftp_server');
$value1 = array('"FALSE"','"shit!!"','"FALSE"','"FALSE"');
function update($var,$value){
$ausgabe = "";
global $all;
if(count($var) != count($value)){
die("FATAL ERROR");
}
for($a=0; $a<count($all); $a++){ //foreach($all as $line) {
$line = $all["$a"];
if (trim($line) == "") { //leerzeien
continue;
}
if ($line[0]=="#" ||
($line[0]=="/" && $line[1]=="/") ||
($line[0]=="<" && $line[1]=="?") ||
($line[0]=="?" && $line[1]==">") ) { // Kommentare usw
$ausgabe = $ausgabe.$line."\n"; //werden übernommen
continue;
}
$trimmed = trim($line); //alle sonderzeichen weg
for($i=0; $i<count($var); $i++){ //ersetzen
if( strstr($trimmed,"$var[$i]=") && $trimmed[strlen($trimmed)-1] == ";") {
$newline = "$var[$i]=$value[$i];";
break;
}
else {
$newline = $line; //sonst den ursprünglichen inhalt
}
}
$ausgabe = $ausgabe.$newline."\n";
}
return $ausgabe; //ausgabe als string
}
$ausgabe = update($var1,$value1);
echo $ausgabe;
//schreiben
$datei = fopen("$target","r+") or die("Error: Could not open file!");
fwrite($datei,$ausgabe);
fclose($datei);
?>
hier die Testdaten <?
//--------------------------------------------Variablen für den Datenbankzugriff-
$unauthorizedmessage="Das Passwort ist falsch.";
$db_servername="localhost";
$db_username="root";
$db_password="";
$db_dbname="m";
//-------------------------------------------------------------------------------
//-------------------------------------------------Variablen für das News-System-
$enable_comments=false; //<---- Sollen Kommentare möglich sein
$max_news_items=3; //<-- Anzahl der Nachrichten pro Seite
//-------------------------------------------------------------------------------
$mm_root="./../";
$ftp_server="guest";
$ftp_user_name="sitdown";
$ftp_user_pass="beaguest";
?>
Bearbeitet von Römi am 02.05.2004, 10:41
|
atrox
in fairy dust... I trust!
|
ich würde gleich die text-ersetzungen mittels regex verwenden: //die zu ersetzenden sachen, getrennt nach Variablenname und Wert mit "" sofern
$var1 = array('$db_servername', '$mm_root', '$unauthorizedmessage', '$ftp_server');
$value1 = array('"FALSE"','"shit!!"','"FALSE"','"FALSE"');
// zum testen
$filename="occonfig.test";
// regex zusammenstellen
$r_var1=preg_replace('/^\$(.*)$/',"/^([ \t]*[$]\$1=)([^;]*);/im",$var1);
$r_value1=preg_replace("/^(.*)$/","\\$1\$1;",$value1);
$filecontent= implode("\n",file($filename)); // oder mit file_get_contents() lesen
// regex alle aufeinmal anwenden
$filecontent=preg_replace($r_var1,$r_value1,$filecontent);
// file schreiben - zb mit:
// file_put_contents($filename,$filecontent);
// bzw zum testen anzeigen:
echo "<PRE>";
echo htmlentities($filecontent);
file_{get|put}_contents geht erst ab php 4.3
Bearbeitet von atrox am 02.05.2004, 00:46
|
Römi
Hausmeister
|
hoi... thx! muss ich gleich probieren... was es da alles für funktionen gibt  Edit: passt nicht ganz, kommt sowas raus: "FALSE""FALSE"; "FALSE""FALSE"; $db_username="root"; $db_password=""; ... um die zeit pack ichs nimmer, schau ich mir morgen nochmal an.
Bearbeitet von Römi am 02.05.2004, 00:32
|
atrox
in fairy dust... I trust!
|
anscheinend verschluckt die board-software doppelte \\ bei der verwendung von [php], habs auf [code] umgestellt, jetzt sollte es passen.
|
kleinerChemiker
Here to stay
|
nimm am ende folgendes: echo $ausgabe;
//schreiben
$datei = fopen("$target","w+") or die("Error: Could not open file!");
fwrite($datei,$ausgabe);
fclose($datei);
damit wird die datei auf länge 0 gesetzt. MIK
|
Römi
Hausmeister
|
Schein jetzt beides zu funktionieren DANKE leute
|