XML-Datei lesen und selbige wieder speichern (SimpleXML)

DeMoehn_sm

Grünschnabel
Hallo liebe Benutzer/-innen,
bin gerade an einem ganz kleinen Code-Schnipsel am arbeiten.

Dabei möchte ich mit simpleXML eine XML-Datei lesen (funktioniert einwandfrei) und danach etwas am Inhalt der Datei ändern und diese wieder speichern (funktioniert nur unter anderem Dateinamen).

Der Grund wieso es nicht funktioniert ist mir auch klar.
Ich lade mit
PHP:
$xml = simplexml_load_file($file);
die Datei
PHP:
$file
, welche ich nach dem lesen nicht mehr schließe. Somit kann ich diese auch nicht überschreiben
HTML:
"Operation not permitted"
.

Lustigerweise kann ich auf meinem lokalen Server die Datei zunächst mit
PHP:
fclose($file);
schließen und dann mit
PHP:
file_put_contents($file, $xml_data);
die neue XML schreiben.

Ich hänge euch mal den kompletten Code dran.
Müsst ihr ja nicht lesen, erwies sich aber oft als Hilfe wenn er da ist.

Ich bräuchte also entweder einen Rat wie man diesen "SimpleXML-Stream" schließt oder wie ich es sonst erledigen kann.

Workaround-Idee: zunächst $file duplizieren, dann $file_dupl lesen und $file überschreiben? <-- sinnvoll?

Ich hoffe auf Tipps, Links, Hilfestellungen oder Codeschnipsel.

Mfg
DeMoehn

PHP:
// -- XML Laden und Lesen
$file = 'myXML.xml';

if (file_exists($file)) {
	$xml = simplexml_load_file($file);

	// Benutzer (sichtbar)
	$users_visible_conf['amount'] = $xml->users_visible[0]->number;
	$users_visible_conf['time'] = $xml->users_visible[0]->timeT;
} else {
	exit('Konnte Datei nicht laden.');
}

fclose($file); // <-- geht nur lokal

// -- XML speichern
$xml = xmlwriter_open_memory();
xmlwriter_start_document($xml,"1.0");

xmlwriter_start_element($xml,"user");
	xmlwriter_start_element($xml,"users_visible");
		xmlwriter_write_element($xml,"number", $fake_users_visible_conf['amount']);
		xmlwriter_write_element($xml,"timeT", $fake_users_visible_conf['time']);
	xmlwriter_end_element($xml);
xmlwriter_end_element($xml);

xmlwriter_end_document($xml);
$xml_data=xmlwriter_output_memory($xml);

file_put_contents($file, $xml_data);
 
[phpf]fclose[/phpf] schließt ja auch nur einen Dateihandle, der über [phpf]fopen[/phpf] geöffnet wurde. Da das bei dir nicht passiert...
 
[phpf]fclose[/phpf] schließt ja auch nur einen Dateihandle, der über [phpf]fopen[/phpf] geöffnet wurde. Da das bei dir nicht passiert...

Das war mir auch bewusst.
Aber aus der Not heraus probiert man eben mal jeglichen Mist und dieser hatte eben (zumindest schien es so) lokal funktioniert.

@Sven Mintel: die Methode asXML ist ja eigentlich sehr schön.

Hab das ganze nun so geändert:
PHP:
// Benutzer (sichtbar)
$xml->users_visible[0]->number = $users_visible_conf['amount'];
$xml->users_visible[0]->timeT = $users_visible_conf['time'];
	
$xml->asXML($file);

Funktioniert auch wunderbar...
Lokal :(

Auf dem Server bekomme ich diese Meldung
HTML:
Warning: SimpleXMLElement::asXML(myXML.xml) [simplexmlelement.asxml]: failed to open stream: Operation not permitted in /www/htdocs/w008bbad/subdomains/neu/forum/myXML/users.php on line 74

Der ganze Ordner "myXML" und alle Dateien darin (zunächst) sind auf 777.
Woran kann es liegen? :(

MfG

EDIT: Och neee! Hatte die Rechte auf "7777". Auf "0777" klappt nun alles.
Danke für den Tipp mit "asXML()".
 
Zurück