• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

[PHP] Mit PHP in .ini schreiben

Chriis

Dithmarscher Paradiesapfel
Registriert
25.01.10
Beiträge
1.467
Liebe ATer,

ich bin gerade dabei, via PHP eine .ini Datei zu ändern.
Ich möchte in meiner ini

Power = on

setzen.
Meine ini sieht derzeit erst mal so aus:

Code:
[Beamer]
Power = on
Input = hdmi2


[BeamerStatus]
Power = on
Input = hdmi4

Dafür habe ich mir nun lange geschaut, wie ich das via PHP machen kann - ja, es muss online über einen Webbrowser gehen... Per Klick auf einen Button.

Folgendes Script ist dann dabei raus gekommen:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>PHP Button</title>
</head>


<body>


<?PHP


function schreibeini()
{
    $ini = parse_ini_file('Test.ini', true);
	$ini["Beamer"]["Power"] = "off";
	$new_ini = fopen('Test.ini', 'w'); 


foreach($ini AS $section_name => $section_values) 
{ 
  	fwrite($new_ini, "[$section_name]\r\n"); 
   
  	foreach($section_values AS $key => $value) 
  	{ 
    	fwrite($new_ini, "$key = $value\r\n"); 
  	} 
   
  	fwrite($new_ini, "\r\n"); 
} 
	fclose($new_ini); 
	
}
?>




    <script type="text/javascript">
    function phpfunktion()
    {
        document.write("<?PHP schreibeini();?>");
		location.reload(true);
    }
    </script>




<input type="button" value="klick" onclick="phpfunktion();">




</body>
</html>

Leider funktioniert das nicht so, wie ich mir das vorstelle...

Kann mir jemand von Euch vielleicht sagen, wo der Fehler liegt?

Beste Grüße und einen schönen Abend,
Chris
 

Chriis

Dithmarscher Paradiesapfel
Registriert
25.01.10
Beiträge
1.467
Nichts...

Gerade funktioniert es auch interessanter Weise!
Wenn ich manuell Power = on setze, setzt mir das Script bei Kopfdruck wieder auf off.
Eben hat der die anderen Einträge teilweise (?) ausgenullt, also kein Value wieder ausgegeben...
 

Chriis

Dithmarscher Paradiesapfel
Registriert
25.01.10
Beiträge
1.467
Beispiel:

Aus

Code:
[Beamer]
Power = off
Input = hdmi


[Status]
PowerStatus = none
InputStatus = none

wird:

Code:
[Beamer]
Power = on
Input = hdmi


[Status]
PowerStatus = 
InputStatus =
 

wdominik

Weißer Winterglockenapfel
Registriert
15.01.10
Beiträge
880
Code:
function phpfunktion()
{
    document.write("<?PHP schreibeini();?>");
    location.reload(true);
}
Das kann so nicht funktionieren. PHP wird auf dem Server ausgeführt und generiert ein HTML-Dokument welches dann der Client empfängt. Wenn du jetzt auf der Clientseite PHP-Code nachträglich in dieses Dokument einfügst wird dieser schlichtweg ignoriert, da die serverseitige Bearbeitung bereits abgeschlossen ist. Auch der Reload ändert daran nichts, da der Funktionsaufruf lediglich in dem Dokument im Browser vorhanden ist, nicht aber auf dem Server.
Um diese Funktionsweise zu realisieren müsstest du in JavaScript über XMLHttpRequest eine weitere HTTP-Anfrage an deinen Server schicken, welcher dann die Speicherung der Daten auslöst. (Oder auch schlichtweg einen gewöhnlichen HTTP-Aufruf ohne AJAX).

Ich würde zunächst einmal ein PHP-Skript schreiben welches einen POST-Aufruf mit Parametern reagiert. (POST darum, da Daten verändert werden – aber wenn dir eine Einhaltung der HTTP-Spezifikation nicht so wichtig ist kannst du auch GET verwenden.)

Also z. B.
beamer.php mit Parameter power=off
beamer.php mit Parameter power=on
welche beide die Konfiguration entsprechend anpassen, und einen Statuscode (oder Erfolgs-/Fehlermeldung) zurückgeben.

Diese kannst du dann schonmal auf ihre Funktion testen.

Dann kümmerst du dich um den Client-Code, hier erstellst du eine Javascript-Funktion welche über XMLHttpRequest die PHP-Datei mit entsprechendem Parameter aufruft und den Statuscode auswertet. (Alles gut gegangen vs. Fehler)
 
Zuletzt bearbeitet:

U_nix$_@

Tokyo Rose
Registriert
25.10.12
Beiträge
66
Hi,

keine gute Idee einen Server als rootuser laufen zu lassen, bzw. als User welcher die php.ini beschreiben kann. Das Thema Sicherheit hat sich dann erstmal erledigt. Die php.ini dient auch zum absichern des ganzen. Aber jeder wie er will sag ich mir immer.:)

PS: Schau einfach mal was die logs sagen. Sowas müsste eigentlich drinnen stehen.
 

wdominik

Weißer Winterglockenapfel
Registriert
15.01.10
Beiträge
880
Ich glaube das hat mit der php.ini nichts zu tun, er will nur in irgendeine .ini-Datei schreiben. ;)
 

U_nix$_@

Tokyo Rose
Registriert
25.10.12
Beiträge
66
Hi,

stimmt wohl. Hatte mir die Codeblocks nicht angesehen. Bei dem Inhalt scheint es sich natürlich nicht um die php.ini zu handeln.......
 

Chriis

Dithmarscher Paradiesapfel
Registriert
25.01.10
Beiträge
1.467
Nene, es ist so, dass da eine komplett eigene .ini Datei geschrieben wird! Nicht die php.ini! ;)

EDIT: Ja genau ;)
 

Chriis

Dithmarscher Paradiesapfel
Registriert
25.01.10
Beiträge
1.467
Ich habs übrigens schon! Ich werde später mal die Lösung posten! ;)