"We are back" « oc.at

config datei per php ändern

Römi 01.05.2004 - 22:30 613 5
Posts

Römi

Hausmeister
Avatar
Registered: Feb 2001
Location: Bez. Tulln
Posts: 5370
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+query

Es 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.

Code: PHP
<?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
Code: PHP
<?
//--------------------------------------------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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
ich würde gleich die text-ersetzungen mittels regex verwenden:
Code:
//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
Avatar
Registered: Feb 2001
Location: Bez. Tulln
Posts: 5370
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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
anscheinend verschluckt die board-software doppelte \\ bei der verwendung von [php], habs auf [code] umgestellt, jetzt sollte es passen.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4328
nimm am ende folgendes:

Code: PHP
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
Avatar
Registered: Feb 2001
Location: Bez. Tulln
Posts: 5370
Schein jetzt beides zu funktionieren

DANKE leute :)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz