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

Wie kan me hierin bijstaan?

Index.php
<!DOCTYPE html>
<html>
    <head>
		<title>Basisbestand</title>
		<link rel="stylesheet" type="text/css" href="css/style.css">    
	</head>
	
	<body>
	    <header>
		</header>
		<content>
			<?php
				try {
					//gegevens binnenhalen
					$a = fopen("bestand.ini", "r");
					$b = file("bestand.ini");
						$programmanaam = $b[0];
						$versie = $b[1];
						$hst = $b[2];
						$user = $b[3];
						$pass = $b[4];
						$db = $b[5];
					fclose($a);
				} catch (PDOException $e) {
					die("(1) DB ERROR: ". $e->getMessage());
				}
				
				//database openen
				try {
					$mysql="mysql:dbname=" . $db . ";host=" . $hst;
					echo $mysql . "<br>";
					$dbh = new PDO('$mysql', $user, $pass);
					$dbh->setAttribute( PDO::ATTR_PERSISTENT, TRUE );
					$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
				} catch (PDOException $e) {
					die("(2) DB ERROR: ". $e->getMessage());
				}
			?> 
		</content>
		<footer>
		</footer>
    </body>
</html>



Bestand.ini
Test
0.1.0.alpha.8
localhost
Test
Test
db_test

- waar hoort die true bij? bij parse_ini_file? of bij print_r?
- waar staat test.ini (wat is de locatie ten opzichte van de pagina van bovenstaande broncode)?
- hoe ziet test.ini er inhoudelijk uit?
- wat gebeurt er als je bovenaan je pagina het volgende toevoegt:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>

krijg je in dat geval foutmeldingen?
De true hoort bij parse_ini_file, want er staan secties in.

Het bestand staat daar waar hij eigenlijk niet moet staan volgens dit forum. Maar daar wil ik later aan werken. Het staat naast de index.php (In de root dus)

Na het toevoegen van die code, krijg ik deze melding:

Fatal error: Call to undefined function  print_r() in /share/MD0_DATA/Web/test.nl/index.php on line 17


De inhoud van Test.ini is:

[algemene instellingen]
programmanaam     = Test
versie         = 0.1.0.alpha.8

[connectie]
host         = localhost
user        = Test
pass         = Test
database     = db_test
Maar wat zegt print_r() op je parse_ini_file?
Die zou normaal gesproken een associatieve array moeten geven. omdat je sections ook in je array wilt verwerken.
Sorry Ariën, ik was nog net niet helemaal klaar met het beantwoorden van de vraag van Thomas. Ik heb mijn antwoord nog even aangevuld.
Ik zou graag iets in beeld krijgen, waarmee ik de array kan bekijken. Dan weet ik daarna ook weer hoe ik weer verder moet.
Nu krijg ik dus met Thoms z'n aanvulling in de code de melding:

Fatal error: Call to undefined function  print_r() in /share/MD0_DATA/Web/test.nl/index.php on line 17
Huh?
print_r() is gewoon een bestaande functie in PHP 4,5,6 en 7.
precies, dus ik dacht ook,... als ik het zo doe, dan moet het lukken. Maar helaas...Dus ik snap het niet.
Ik vind het ook vreemd. Of je hebt een vreemde PHP-versie waar iemand die functie er moedwillig uitgesloopt heeft. Want ik kan me niks anders indenken. Zelf op Google kom ik niks relevants tegen.

Misschien heeft de server het moeilijk met geheugen. Ik heb ooit een keer meegemaakt dat in een dergelijk geval ook vreemde foutmeldingen te zien waren.
Welke PHP-versie heb je eigenlijk?

Ik zou ik eens kijken of een reboot helpt, en als dat niet helpt een klacht/vraag bij de helpdesk van de fabrikant van je NAS te openen. (welke heb je?)

print_r() is gewoon een vaste PHP-functie die er al heel lang in zit, en ik zie geen bepaalde voorwaarden waarom dit niet zou werken (soms zijn functies Windows/Linux only, om maar wat te noemen).
Is het niet een beter idee om een webserver op je PC te gebruiken? Denkend aan XAMPP? Dan heb je geen vreemde PHP-versie met rare fratsen... ;-)

[size=xsmall]Toevoeging op 17/08/2017 17:35:44:[/size]

Laat anders je code nog eens zien. Misschien heb je een vreemd spatie-achtig karakter voor je print_r staan.
Desnoods even die regel opnieuw typen.
PHP Version 5.6.30

Ik gebruik de NAS als PHP server, want dan kan mijn vrouw er ook bij op verschillende delen in het huis.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?> 
<!DOCTYPE html>
<html>
    <head>
		<title>Basisbestand Test</title>
		<link rel="stylesheet" type="text/css" href="css/style.css">    
	</head>
	
	<body>
	    <header>
		</header>
		<content>
			<?php
				$b = print_r(parse_ini_file("test.ini",true),true);
				echo $b;
				//database openen
				echo $b['algemeen']['programmanaam'];
			?>
		</content>
		<footer>
		</footer>
    </body>
</html>


Reageren