Door
Frits van Leeuwen
op 14-08-2017 21:08
gewijzigd op 14-08-2017 21:16
8.423 views
Hallo allemaal,
Ik kom er niet uit. Ik zoek al een hele tijd, maar het wordt me niet duidelijk.
Ik heb in een installatie een database "db_test" laten maken met een user "Test" (ww="Test") en het tekst bestand.ini. In bestand.ini staat alle informatie die nodig is voor het vervolg. Ik heb het gecheckt en dat klopt allemaal.
Bij het openen/starten van "Index.php", haal ik de uit "bestand.ini" binnen, en ik geef ze aan variabelen. Dan wil ik de database activeren en het aantal records tellen dat in de tabel [tabel_administratires] staat. Aan dit laatste durf ik niet goed te beginnen, omdat ik deze melding krijg:
mysql:dbname=db_test ;host=localhost
(2) DB ERROR: invalid data source name
Het wordt een interessante discussie. Maar al met al weet ik dus eigenlijk nog niet goed of er een goed werkbare functie is om een ini-bestand te schrijven. Ik heb mijn installatie zo herschreven dat ik een array kan wegschrijven.
De code om mijn array voor een eerste maal te vullen is de volgende:
Mijn code zou op-sich moeten werken, hoewel er nog wel sprake is van een locking-probleem zoals Ben zegt.
maar of die procedure echt nodig is, betwijfel ik. Tenzij je met meerdere mensen massaal tegelijkertijd config-files zit te schrijven.
Het is immers ook een stuk code die ik uit mijn archief gehaald heb.
Ik kreeg er een foutmelding op. Dus ik ben gaan zoeken. Voor als nog heb ik geen fout kunnen ontdekken. Ik haal de functies nu regel voor regel over. Natuurlijk kijk ik naar de commandostructuur. En na iedere kopieerslag test ik weer.
Inmiddels weer een stapje verder.
Ik heb de array naar een ini-bestand kunnen schrijven. Ik heb de functies die Ariën schreef, samengevoegd en terug gebracht in de code. Nu geen losse functie meer. Dat kan ik misschien later wel weer invoeren.
Maar hoe krijg ik nu categorie-kopen er in? Moet ik daarvoor een aparte schrijfopdracht maken? En na een categorie een lege regel. Ook een losse schrijfopdracht? Of werkt dat anders in combinatie met een array?
Voor nu is het weer genoeg. slaap lekker allemaal en tot de volgende keer.
Geweldig. Hier leer ik weer veel van. dank je wel.
Ik was zo ver dat ik met mijn array $b[host] kon inzetten als ik die variabele nodig heb. Maar hoe werkt dat met deze zelfde variabele in een array met een array er in?
Maar waarom werk je in eerste instantie met .ini bestanden? Waarom geen configuratiebestand rechtstreeks in PHP? Dit lijkt mij enorm omslachtig. Wat is de meerwaarde van gebruik van een .ini bestand boven een andere constructie? Regel je hier ook andere configuratie in, of alleen maar die van je database?
Ik denk dat je het jezelf alleen maar moeilijk(er) aan het maken bent op dit moment. En daarbij mogelijk uit het oog verliest wat belangrijk(er) is.
>> Ik was zo ver dat ik met mijn array $b[host] kon inzetten als ik die variabele nodig heb. Maar hoe werkt dat met deze zelfde variabele in een array met een array er in?
Door $b['database']['host'] te gebruiken. Die quotes moet je niet vergeten, dat levert alleen maar gezeur op.
Ik moet wel zeggen dat ik het eens met met Thomas, maar volgens mij is dit ook al eerder aangehaald in het topic.
NB: Om uit parse_ini_file dezelfde array terug te krijgen als die je in de genoemde functie stopt kun je het 2e argument op true zetten, dus $config = parse_ini_file('je_bestand.ini', true);
Het punt is dat ini-files niet door PHP geparsed worden, en dus als tekst gewoon te lezen zijn. Dus je moet ze verplicht buiten de webroot tonen.
Bij bestanden met een .php extentie hoeft dit niet, omdat de variabelen en waardes gewoon door de PHP-parser gaan, en de output dan toch leeg is. Hoewel het als extra veiligheidslaag wel aan te raden is om het alsnog buiten de webroot te zetten.
Bovendien kan je de instellingen ook in een PHP-array zetten zodat je ze kan gebruiken bij debugging bijvoorbeeld.