Aller eerst allemaal de beste wensen voor 2019.

Mijn INI-file ziet er als volgt uit (Dit is een fragment er uit)

[algemeen]
programmanaam = testnaam
versienummer = 0.1.1


Deze wil ik wijzigen in:

[algemeen]
programmanaam = testnaam
versienummer = 0.1.2


Het versienummer is dan dus gewijzigd.

Het aanmaken van het bestand is geen probleem, dus dacht ik het op de zelfde manier te doen.
Hiervoor heb ik een functie:

//functie om ini-bestand te maken
function write_ini($filename, $b) {
	$output = '';
	foreach ($b as $section => $settings) {
		$output .= '[' . $section . ']' . PHP_EOL;
		foreach ($settings as $key => $value) {
			$output .= $key . ' = ' . $value . PHP_EOL;
		}
		$output .= PHP_EOL;
	}
	file_put_contents($filename, $output);
	return true;
}


Met de volgende code dacht ik het muteren te kunnen doen, maar dat lijkt hij niet te doen.
Ik hoopte hiermee de volledige array die ik eerst heb uitgelezen, gemuteerd weer terug te plaatsen.


$b = array(
'algemeen'=>array(
	'programmanaam'=>$programmanaam,
	'versienummer'=>$versienummer),
....);
			
write_ini($filename, $b);

Iemand een tip?

Alvast bedankt voor de assistentie.

Vriendelijke groet,
Frits van Leeuwen
Wat meldt $_SERVER['DOCUMENT_ROOT'] in een echo ?
$_SERVER['DOCUMENT_ROOT'] = /share/Web

De PHP-bestanden staan op dat is de basis van alle websites op mijn nas. Daar achter staat staan dus de domeienen met subdomeinen
Zo is het bij deze <domeinnaam>/versie12 (Daar staan de PHP bestanden van deze versie)
Hier staat ook het bestand testnaam.ini En die wil ik muteren.
Gebruik dat eens in je functie.

[sub]Noot: Even ter info. DOCUMENT_ROOT is niet geschikt om in cronjobs te gebruiken. Mocht je dit ooit willen doen...[/sub]
Dat geeft het zelfde resultaat.
Ik heb eerst het document verwijderd. Toen de installatie gedaan. Met nieuwe data. Echter hij geeft de oude data.

Ik heb toen een nieuwe naam gegeven aan het document, Toen plaatste hij wel de nieuwe data in het document met de nieuwe naam.


Het ziet er dus naar uit dat hij een eerder document met die naam activeert.
Daardoor is een mutatie dus ook niet mogelijk.


Als ik even heel snel een blik erop werp ...

Eerst gebruik je $_GET['vernr'] om te bepalen of er een nieuwe versie is.

Zo ja, gebruik je vervolgens bij het wegschrijven gewoon weer $versienummer (dit is het oude versienummer) in plaats van $_GET['vernr'].
Ozzie PHP, Bedankt voor de opmerking. Maar nee, $Get['vernr'] wordt in een ander php bestand opgehaald en meegezonden naar install.php . Dus dat is de oude. In install.php maak zet ik het nieuwe versienummer is $versienummer Dus dat is wel goed.
Op welke regel in de code die je geplaatst hebt, wordt het gewijzigde bestand opgeslagen?
Test het eens uit in een minder complexe situaties, en vervang eerst alleen een 'a' door een 'b' bijvoorbeeld.
Deze code gebruik ik nu voor de test voor het aanmaken van het bestand

<?php
error_reporting(E_ALL);
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');

//functie om ini-bestand te maken
function write_ini($filename, $b) {
	$output = '';
	foreach ($b as $section => $settings) {
		$output .= '[' . $section . ']' . PHP_EOL;
		foreach ($settings as $key => $value) {
			$output .= $key . ' = ' . $value . PHP_EOL;
		}
		$output .= PHP_EOL;
	}
	file_put_contents($filename, $output);
	return true;
}

$filename = $_SERVER['DOCUMENT_ROOT']."/geldboom.nl/versie012/testnaam.ini";
$versienummer = "0.1.1";
$programmanaam = "testnaam";
$root = "root";
$root_password = "admin";

//gegevens voor geldboom.ini bepalen
$b = array(
'algemeen'=>array(
	'programmanaam'=>$programmanaam,
	'versienummer'=>$versienummer),
'db_verbinding'=>array(
	'host'=>'localhost',
	'gebruiker'=>'testnaam',
	'wachtwoord'=>'testnaam',
	'database'=>'db_testnaam'));

write_ini($filename, $b);
?>


Deze code gebruik ik om het bestand te muteren

<?php
error_reporting(E_ALL);
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');

//functie om ini-bestand te maken
function write_ini($filename, $b) {
	$output = '';
	foreach ($b as $section => $settings) {
		$output .= '[' . $section . ']' . PHP_EOL;
		foreach ($settings as $key => $value) {
			$output .= $key . ' = ' . $value . PHP_EOL;
		}
		$output .= PHP_EOL;
	}
	file_put_contents($filename, $output);
	return true;
}

$filename = $_SERVER['DOCUMENT_ROOT']."/geldboom.nl/versie012/testnaam.ini";
$versienummer = "0.1.2";
$programmanaam = "testnaam";
$root = "root";
$root_password = "admin";

$b = parse_ini_file($filename,true);
$b['algemeen']['versienummer'] = $versienummer;
write_ini($filename,$b); 
				
?>



Het aanmaken lukt, het muteren geeft het probleem zoals we al langere tijd hebben. Of te wijl, er wordt niets veranderd in het bestand.
Voeg in het bestand om te muteren op het eind eens dit stukje code toe:

<?php

echo '<pre>';
var_dump($b);

?>
Wat staat er nu op je scherm?

Reageren