Ik zou het pad nog een keer controleren :p.
Link gekopieerd
Ik heb ook sterk mijn twijfels over het pad. Gebruik anders eens het volledige pad.
Ik weet dat de schijvenstructuur op een QNAP er best exotisch uitziet, dus ik zou daar toch even naar kijken.
Link gekopieerd
Het zou kunnen zijn dat het pad is, maar in de zelfde php file schrijf ik met de zelfde code de ini-file weg. Deze roep ik op ik geeft $versienummer een andere waarde en schrijf deze met de zelfde techniek weg. Ik stel in beide gevallen geen pad in. De eerste keer schrijven lukt dus wel.
Maar zoals ik in mijn laatste berichte aan gaf, ik had nog wat anders waarvan ik denk dat hen nog gekker maakt.
Als ik een php-file wijzig en naar de zelfde directory verplaats gaat het goed. Dan zijn de wijzigingen actief. Maar als ik dat doe met de ini-file, dan lijkt dat niet te werken.
Als ik daar de ini-file echt weg gooi, dan is die weg lijkt mij. Een echt gewijzigde ini-fle die ik ergens anders vandaan haal zet ik op de plek van de verwijderde ini-file, met de zelfde naam, en ik check de gegevens en zie de inhoud van de verwijderde file. Ik vermoed dat ik dat probleem moet oplossen om in php het gewenste effect te krijgen. Ik hoop hier vanavond naar te kunnen zoeken.
Even voor de goede orde, op de QNAP heb ik een partitie die Share heet, Daar staat een mapping over heen, dat spreek ik aan met een driveletter.
En er is een partitie die Web heet en daarin staan de websites die ik gebruik. En daar dus ook de php en ini-files waar ik het hier over heb.
Link gekopieerd
Gebruik anders iets anders, doe het in PHP zoals @Rob voorstelt, of sla het bijvoorbeeld op als JSON. Maar dan blijft waarschijnlijk het probleem met het geklooi met bestanden.
Link gekopieerd
De vraag is eigenlijk, waarom gebruik je een .ini-bestand, en geen JSON, XML of normale variabelen/defines?
Link gekopieerd
Frits van Leeuwen op 06/01/2019 18:18:10
Ik stel in beide gevallen geen pad in.
Zit je dan niet de ene keer in een andere "working directory"? Probeer het eens met een absoluut pad (gewoon bij $_SERVER['DOCUMENT_ROOT'] beginnen).
Een JSON of XML moet overigens ook elke keer geparsed worden. Puur PHP heeft dat nadeel niet, en tegenwoordig wordt het zelfs netjes voor je in de opcode cache bewaard (= supersnel).
Link gekopieerd
Rob Doemaarwat, Ik doe helemaal niets met het wisselen van directories. Dus dat lijkt me sterk. Maar uitsluiten kan ik het ook niet. Dat zou ik dan op de één of andere manier moeten testen. Maar hoe weet ik ook niet.
Het idee te beginnen met $_SERVER['DOCUMENT_ROOT'] lijkt me wel wat. Maar ik heb geen idee hoe.
Ariën, Ik vind het duidelijkst om instellingen, die bij het starten van php pagina gebruikt moeten of kunnen worden, vanuit een ini bestand in te lezen en te gebruiken. Het zijn instellingen die soms door bepaalde gebruikers mogen worden gewijzigd om zo het starten te veranderen.
Thomas van den Heuvel, Een JSON ken ik niet, en XML geeft inderdaad ook naar mijn idee het zelfde probleem. Mijn opvatting is dat data niet in een PHP bestand thuis hoort, tenzij het vaste gegevens zijn. Dat is in dit geval niet zo.
Link gekopieerd
$_SERVER['DOCUMENT_ROOT'] geeft gewoon het pad naar je web-root.
Als je niet weet wat je ermee kunt: Echo het dan, en kijk wat je er precies mee moet doen ;-)
Link gekopieerd
Staat de code waarmee je het versienummer wijzigt in hetzelfde bestand als je de eerste keer gebruikt?
Kun je even de complete code laten zien die je nu gebruikt?
Link gekopieerd
Antwoord op de vraag is: Ja. Bij deze de hele code. Dan is dat ook te zien.
<?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;
}
$programmanaam = "testnaam";
$versienummer = "0.1.2.α.0";
$root = "root";
$root_password = "admin";
$filename = "testnaam.ini";
if (isset($_GET['vernr'])) { //versienummer wijkt af.
if ($_GET['vernr']!=substr($versienummer, 0,5)){
$b = parse_ini_file($filename,true);
// er moet geupdate worden!
$verbergregel_1 = "class = verbergregel"; //hiermee verberg je het gedeelte als er op install is gedrukt.
$verbergregel_2 = "class = verbergregel"; //hiermee verberg je het gedeelte als er niet op install of update is gedrukt.
$verbergregel_3 = ""; //hiermee toon je het gedeelte als er op update is gedrukt.
$verbergregel_4 = "class = verbergregel"; // verberg hiermee het eindresultaat.
//gegevens uit testnaam.ini lezen
if (isset($_POST['knop_update'])){
if($_POST['knop_update']) {
$b = parse_ini_file($filename,true);
$b['algemeen']['versienummer'] = $versienummer;
write_ini($filename,$b);
// check verbinding
if ($connect) { // wel verbinding
$goed = true;
//connect sql database
$connectdb = mysqli_connect($b['db_verbinding']['host'], $b['db_verbinding']['gebruiker'], $b['db_verbinding']['wachtwoord'], $b['db_verbinding']['database']);
if(!$connectdb){
$goed = false;
die('Kan geen verbinding maken: '.mysqli_connect_error());
} else {
echo "Verbinding met de database is gemaakt.<BR>";
}
} else {
$goed = false;
die("Connection failed: " . mysqli_connect_error());
}
}//einde update module
}
}else{
echo "Er is geen UPDATE!!!<BR>";//dit kan die niet weergeven als het goed is
}
} else {
// er is nog niets, dus een installatie is hier nodig
$verbergregel_1 = "class = verbergregel"; //hiermee verberg je het gedeelte als er op install is gedrukt.
$verbergregel_2 = ""; //hiermee toon je het gedeelte als er niet op install of update is gedrukt.
$verbergregel_3 = "class = verbergregel"; //hiermee verberg je het gedeelte als er op update is gedrukt.
$verbergregel_4 = "class = verbergregel"; // verberg hiermee het eindresultaat.
//gegevens voor testnaam.ini bepalen
$b = array(
'algemeen'=>array(
'programmanaam'=>$programmanaam,
'versienummer'=>$versienummer),
'db_verbinding'=>array(
'host'=>'localhost',
'gebruiker'=>'testnaam',
'wachtwoord'=>'testnaam',
'database'=>'db_testnaam'));
if (isset($_POST['knop_install'])){
if($_POST['knop_install']) {
$verbergregel_1 = ""; //dit toon je als er op install is gedrukt.
$verbergregel_2 = "class = verbergregel"; //hiermee verberg je het gedeelte dat je toont als er niet op install of update is gedrukt.
$verbergregel_3 = "class = verbergregel"; //hiermee verberg je het gedeelte dat je toont als er op update is gedrukt.
$verbergregel_4 = "class = verbergregel"; // verberg hiermee het eindresultaat.
//maak ini-bestand
$root = $_POST['Inp_User'];
$root_password = $_POST['Inp_Password'];
$b['db_verbinding']['host'] = $_POST['Inp_Host'];
$b['db_verbinding']['database'] = $_POST['Inp_DB'];
$b['db_verbinding']['gebruiker'] = $_POST['DB_User'];
$b['db_verbinding']['wachtwoord'] = $_POST['DB_Password'];
write_ini($filename, $b);
// maak verbinding
$connect = mysqli_connect($b['db_verbinding']['host'], $root, $root_password);
// check verbinding
if ($connect) { // wel verbinding
$goed = true;
// maak database
$sql = "CREATE DATABASE IF NOT EXISTS " . $b['db_verbinding']['database'];
if ($connect->query($sql) === TRUE) { // database is aangemaakt
echo "Database -" . $b['db_verbinding']['database'] . "- is succesvol aangemaakt.<BR>";
// create user
$sql = "CREATE USER '" . $b['db_verbinding']['gebruiker'] . "'@'" . $b['db_verbinding']['host'] . "' IDENTIFIED BY '" . $b['db_verbinding']['wachtwoord'] . "';";
if ($connect->query($sql) === TRUE) { // gebruiker is aangemaakt
echo "Gebruiker " . $b['db_verbinding']['gebruiker'] . " is succesvol aangemaakt.<BR>";
// grant additional
$sql = "GRANT ALL PRIVILEGES ON *.* TO '" . $b['db_verbinding']['gebruiker'] . "'@'" . $b['db_verbinding']['host'] . "';";
if ($connect->query($sql) === TRUE) { // gebruikers rechten toegekend
echo "De gebruiker " . $b['db_verbinding']['gebruiker'] . " heeft de rechten gekregen.<BR>";
} else {
$goed = false;
echo "Het toekennen van de rechten is niet goed gegaan.<BR>";
}
} else {
$goed = false;
echo "Het aanmaken van de gebruiker " . $b['db_verbinding']['gebruiker'] . " is niet goed gegaan.<BR>";
}
} else {
echo "Fout bij aanmaken van database " . $b['db_verbinding']['database'] . ": " . $connect->error . "<BR>";
}
} else { // geen verbinding
$goed = false;
die("Connection failed: " . mysqli_connect_error());
}
if ($goed) {
//connect sql database
$connectdb = mysqli_connect($b['db_verbinding']['host'], $b['db_verbinding']['gebruiker'], $b['db_verbinding']['wachtwoord'], $b['db_verbinding']['database']);
if(!$connectdb){
die('Kan geen verbinding maken: '.mysqli_connect_error());
} else {
echo "Verbinding met de database is gemaakt.<BR>";
}
//tabel_administraties
$sql = "CREATE TABLE tabel_administraties (administraties_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
administraties_naam VARCHAR(255) NOT NULL,
administraties_straat VARCHAR(255),
administraties_huisnr VARCHAR(10),
administraties_postcode VARCHAR(7),
administraties_plaats VARCHAR(255),
administraties_telefoonnr VARCHAR(15),
administraties_kvk VARCHAR(10),
administraties_btwnr VARCHAR(14),
administraties_website VARCHAR(128),
administraties_email VARCHAR(128),
administraties_reg_date TIMESTAMP)";
if (mysqli_query($connectdb, $sql)) {
echo "Tabel tabel_administraties is aangemaakt.<BR>";
} else {
echo "Tabel tabel_administraties is niet aangemaakt. " . $connectdb->error . "<BR>";
}
//tabel_journaalposten
$sql = "CREATE TABLE tabel_journaalposten(journaalposten_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
journaalposten_administratie INT(6) NOT NULL,
journaalposten_datum DATE NOT NULL,
journaalposten_nummer INT(3),
journaalposten_bedrag NUMERIC(10,2),
journaalposten_omschrijving VARCHAR(255),
journaalposten_inkomsten BOOLEAN,
journaalposten_btw_1 NUMERIC(5,2),
journaalposten_btw_2 NUMERIC(5,2),
journaalposten_debetrek_1 VARCHAR(5),
journaalposten_creditrek_1 VARCHAR(5),
journaalposten_debetrek_2 VARCHAR(5),
journaalposten_creditrek_2 VARCHAR(5),
journaalposten_debetrek_3 VARCHAR(5),
journaalposten_creditrek_3 VARCHAR(5),
journaalposten_reg_date TIMESTAMP)";
if (mysqli_query($connectdb, $sql)) {
echo "Tabel tabel_journaalposten is aangemaakt.<BR>";
} else {
echo "Tabel tabel_journaalposten is niet aangemaakt." . $connectdb->error . "<BR>";
}
} else {
$melding = "Er ging iets mis!";
}
} else {
$verbergregel_1 = "class = verbergregel"; //hiermee verberg je het gedeelte dat je toont als er op install is gedrukt.
$verbergregel_2 = ""; //hiermee toon je als er niet op install of update is gedrukt.
$verbergregel_3 = "class = verbergregel"; //hiermee verberg je het gedeelte dat je toont als er op update is gedrukt.
$verbergregel_4 = "class = verbergregel"; // verberg hiermee het eindresultaat.
}
}
}
if (isset($_POST['knop_update']) or isset($_POST['knop_install'])) {
if (($_POST['knop_update']) or ($_POST['knop_install'])){
/*
switch($_GET['vernr']){
case "0.1.1"; // update naar versie 0.1.2
//tabel_instellingen
$sql = "CREATE TABLE tabel_instellingen(instellingen_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
instellingen_administratie INT(6) NOT NULL,
instellingen_sorteer_jp_datum BOOLEAN,
instellingen_sorteer_jp_nummer BOOLEAN,
instellingen_reg_date TIMESTAMP)";
if (mysqli_query($connectdb, $sql)) {
echo "Tabel tabel_instellingen is aangemaakt.<BR>";
} else {
echo "Tabel tabel_instellingen is niet aangemaakt." . $connectdb->error . "<BR>";
}
//tabel_btw
$sql = "CREATE TABLE tabel_btw(btw_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
btw_omschrijving VARCHAR(55),
btw_percentage NUMERIC(5,2),
btw_datum_ingang DATE,
btw_datum_einde DATE,
btw_reg_date TIMESTAMP)";
if (mysqli_query($connectdb, $sql)) {
echo "Tabel tabel_btw is aangemaakt.<BR>";
} else {
echo "Tabel tabel_btw is niet aangemaakt." . $connectdb->error . "<BR>";
}
case "0.1.2"; // update naar versie 0.1.3
//Hier is (nog) geen update voor
}*/
$verbergregel_1 = "class = verbergregel"; //hiermee verberg je het gedeelte dat je toont als er op install is gedrukt.
$verbergregel_2 = "class = verbergregel"; //hiermee verberg je het gedeelte dat je toont als er niet op install of update is gedrukt.
$verbergregel_3 = "class = verbergregel"; //hiermee verberg je het gedeelte dat je toont als er op update is gedrukt.
$verbergregel_4 = ""; // verberg hiermee het eindresultaat.
}
}
?><!DOCTYPE html>
<html>
<head>
<title>testnaam installatie</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<table class="empty">
<tr>
<td width="270" class="vak1">
</td>
<td class="programmadeel">
<form action="install.php" method="post">
<table>
<tr <?php echo $verbergregel_1; ?>><td>
<table>
<tr class="form1"><td colspan="2">
<h1>Installatie van <?php echo $programmanaam . " versie " . $versienummer; ?></h1>
<p>Voor het gebruik van het boekhoudprogramma <?php echo $programmanaam; ?>, is het van belang dat er een database geïnstalleerd wordt.</p>
<p>Vul daarom op deze pagina de gevraagde gegevens in.</p>
</td></tr>
<tr><td><br></td><td></td></tr>
<tr class="form1"><td align="right">
<div class="pf">Host-gebruiker : </div></td><td> : <B><?php echo $_POST['Inp_User']; ?></B></td></tr>
<tr class="form1"><td align="right">
<div class="pf">Host Wachtwoord : </div></td><td> : <B><?php echo $_POST['Inp_Password']; ?></B></td></tr>
<tr class="form1"><td align="right">
<div class="pf">Host-adres : </div></td><td> : <B><?php echo $_POST['Inp_Host']; ?></B></td></tr>
<tr class="form1"><td align="right">
<div class="pf">Database naam : </div></td><td> : <B><?php echo $_POST['Inp_DB']; ?></B></td></tr>
<tr class="form1"><td align="right">
<div class="pf">DB-gebruiker : </div></td><td> : <B><?php echo $_POST['DB_User']; ?></B></td></tr>
<tr class="form1"><td align="right">
<div class="pf">DB Wachtwoord : </div></td><td> : <B><?php echo $_POST['DB_Password']; ?></B></td></tr>
<tr><td>
<p><button type="submit" formaction=index.php>Click hier om te beginnen</button></p></td></tr>
</table>
</td></tr>
<tr <?php echo $verbergregel_2; ?>><td>
<table>
<tr class="form1"><td align="center" colspan="2">
<h1>Installatie van <?php echo $programmanaam . " versie " . $versienummer; ?></h1>
<p>Voor het gebruik van het boekhoudprogramma <?php echo $programmanaam; ?>, is het van belang dat er een database geïnstalleerd wordt.</p>
<p>Vul daarom op deze pagina de gevraagde gegevens in.</p>
</td></tr>
<tr><td><br></td><td></td></tr>
<tr class="form1"><td align="right">
<div class="pf">Host-gebruiker : </div></td><td><input type="text" id="Inp_User" name="Inp_User" value="<?php echo $root; ?>" tabindex="1"></td></tr>
<tr class="form1"><td align="right">
<div class="pf">Host Wachtwoord : </div></td><td><input type="password" id="Inp_Password" name="Inp_Password" value="<?php echo $root_password; ?>" tabindex="2"></td></tr>
<tr class="form1"><td align="right">
<div class="pf">Host-adres : </div></td><td><input type="text" id="Inp_Host" name="Inp_Host" value="<?php echo $b['db_verbinding']['host']; ?>" tabindex="3"></td></tr>
<tr class="form1"><td align="right">
<div class="pf">Database naam : </div></td><td><input type="text" id="Inp_DB" name="Inp_DB" value="<?php echo $b['db_verbinding']['database']; ?>" tabindex="4"></td></tr>
<tr class="form1"><td align="right">
<div class="pf">DB-gebruiker : </div></td><td><input type="text" id="DB_User" name="DB_User" value="<?php echo $b['db_verbinding']['gebruiker']; ?>" tabindex="5"></td></tr>
<tr class="form1"><td align="right">
<div class="pf">DB Wachtwoord : </div></td><td><input type="password" id="DB_Password" name="DB_Password" value="<?php echo $b['db_verbinding']['wachtwoord']; ?>" tabindex="6"></td></tr>
<tr><td align="right">
<input type="reset" value="Default instellingen" id="knop_reset" name="knop_reset" alt="Alle velden terug zetten in de default waarde" tabindex="7">
</td><td align="left">
<input type="submit" value="Installeren"; id="knop_install" name="knop_install" alt="Installatie starten" tabindex="8">
</td></tr>
</table>
</td></tr>
<tr <?php echo $verbergregel_3; ?>><td>
<table>
<tr class="form1"><td align="center" colspan="2">
<h1>Update van <?php echo $programmanaam . " versie " . $b['algemeen']['versienummer'] . " naar versie " . $versienummer; ?></h1>
<p>Voor het gebruik van het boekhoudprogramma <?php echo $programmanaam; ?>, is het van belang dat er de database geupdate wordt.</p>
<p>Controleer deze gegevens en druk op <b>update</b>.</p>
</td></tr>
<tr><td><br></td><td></td></tr>
<tr class="form1"><td align="right">
<div class="pf">Host-adres : </div></td><td align="left"><?php echo $b['db_verbinding']['host']; ?></td></tr>
<tr class="form1"><td align="right">
<div class="pf">Database naam : </div></td><td align="left"><?php echo $b['db_verbinding']['database']; ?></td></tr>
<tr class="form1"><td align="right">
<div class="pf">DB-gebruiker : </div></td><td align="left"><?php echo $b['db_verbinding']['gebruiker']; ?></td></tr>
<tr class="form1"><td align="right">
<div class="pf">DB Wachtwoord : </div></td><td align="left"><?php echo $b['db_verbinding']['wachtwoord']; ?></td></tr>
<tr><td><br></td><td></td></tr>
<tr><td align="center" colspan="2">
<input type="submit" value="update"; id="knop_update" name="knop_update" alt="update starten" tabindex="8">
</td></tr>
</table>
</td></tr>
<tr <?php echo $verbergregel_4; ?>><td align="center" colspan="2">
<table>
<tr class="form1"><td align="center">
<h1>Update naar <?php echo $programmanaam . " versie " . $versienummer; ?> is voltooid</h1>
<p>Om het boekhoudprogramma <?php echo $programmanaam; ?> in gebruik te nemen,</p>
<p>druk je op de onderstaand knop.</p>
</td></tr><tr><td><BR></td></tr>
<tr><td align="center">
<a href="index.php"><button>Start testnaamhost (versie <?php echo $versienummer?> )</button></a>
</td></tr>
</table>
</td></tr>
</table>
</form>
</td>
</tr>
</table>
</body>
</html>
Link gekopieerd