DEV Community

Ashok Mohanakumar
Ashok Mohanakumar

Posted on

How to read dot files with PHP?

Is there a practice of using dot files to store config info and constants in php? If so, how do I parse them? If not, then what would be a good way to isolate and store sensitive info like db passwords, or other config info?

Latest comments (6)

Collapse
 
kip13 profile image
kip • Edited

Don't forget add to .gitignore(if you use git) this dot files !

Collapse
 
ashokcodes profile image
Ashok Mohanakumar

Yes yes...always :D

Collapse
 
vlasales profile image
Vlastimil Pospichal • Edited

.htconfig.ini

[MySQL]
dsn = "mysql:host=localhost;dbname=myDatabase"
user = "username"
password = "Password"

index.php

<?php
$config = parse_ini_file('.htconfig.ini' , true);
$db = new MyPDO($config['MySQL']);
Collapse
 
ashokcodes profile image
Ashok Mohanakumar

Wow! thanks, I looked into this. It looks better than using normal dot files since there is a built in function to read ini files. Thanks a lot

Collapse
 
matheus profile image
Matheus Calegaro

Yes, there is! Some frameworks like Laravel and Symfony have .env file support out of the box.

In your project, you could use vlucas/phpdotenv, which does exactly what you want and it's pretty simple to implement, check it out:

1 - Install it using Composer by typing the following command on your terminal:

composer require vlucas/phpdotenv

2 - Now let's configure it on your application's starting point (I'll assume it is index.php):

<?php
// index.php

include 'vendor/autoload.php';

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

// your code goes here...

3 - Cool, we're almost there! Now create the .env file at your project's root directory and populate it with your configs like this:

DB_USER="user"
DB_PASSWORD="ultraSecurePassword"
DB_NAME="awesome_db"
FOO="bar"

4 - Finally, to retrieve the env values:

<?php
// db.php (naming things is hard)

$user = env('DB_USER');
// OR
$user = getenv('DB_USER');
// OR
$user = $_ENV['DB_USER'];
// OR EVEN
$user = $_SERVER['DB_USER'];

Hope it helps! ;)
(if there's any typo, feel free to correct me, i'll appreciate)

Collapse
 
ashokcodes profile image
Ashok Mohanakumar

Awesome! Everything I was looking for!!! Thanks a bunch