PHP class for working with INI files

Helper class for working with INI files. The class implements the Builder design pattern. In the presented class, there is an implementation of functionality for working with INI files. The basic functionality includes creating, adding and reading sections, adding and removing keys and other functionality.


First of all, you need to declare variables that are responsible for the file structure, file path and scan type:

/**
 * @var array  ini 
*/
private array $structure = [];
/**
 * @var int  
*/
private int $scannerMode;
/**
 * @var string   
*/
private string $path;

In the constructor of the method, specify the path to the file (for creation) and the type of scan, and also call the method for obtaining the file structure:

public function __construct(string $path, int $scannerMode = INI_SCANNER_TYPED) {
	$this->path = $path;
	file_put_contents($path, null, LOCK_EX);
	$this->scannerMode = $scannerMode;

	$this->setInitStructure();
}

:

private function setInitStructure(): void {
	$this->structure = parse_ini_file($this->path, true, $this->scannerMode);
}

parse_ini_file , . true, . :

  • INI_SCANNER_NORMAL ( PHP)

  • INI_SCANNER_RAW

INI_SCANNER_RAW ( => ) . PHP 5.6.1 INI_SCANNER_TYPED. boolean, null integer , , .  "true""on"  "yes"   TRUE"false""off""no"  "none"  FALSE"null"   NULL. , , , . , , .

:

public function getStructure(): array {
	return $this->structure;
}

- . :

public function getSection(string $section): array {
	return $this->structure[$section];
}

public function getValue(string $section, string $key) {
	return $this->getSection($section)[$key];
}

, , . , . :

public function addSection(string $section): Ini {
	if (array_key_exists($section, $this->structure)) {
		throw new Exception(" {$section}  ");
	}

	$this->structure[$section] = [];

	return $this;
}

exception, .

, :

public function addValues(string $section, array $values): Ini {
	$this->structure[$section] = array_merge($values, $this->structure[$section]);

	return $this;
}

, . :

public function setValues(string $section, array $values): Ini {
  foreach ($values as $key => $value) {
  	$this->structure[$section][$key] = $value;
  }

  return $this;
}

, , :

public function removeSection(string $section): Ini {
  unset($this->structure[$section]);

  return $this;
}

public function removeKeys(string $section, array $keys): Ini {
  foreach ($keys as $key) {
  	unset($this->structure[$section][$key]);
  }

  return $this;
}

, "".

- :

public function write(): void {
  $iniContent = null;

  foreach ($this->structure as $section => $data) {
  	$iniContent .= "[{$section}]\n";

  foreach ($data as $key => $value) {
  	$iniContent .= "{$key}={$value}\n";
  }

  $iniContent .= "\n";
  }

	file_put_contents($this->path, $iniContent, LOCK_EX);
  $this->setInitStructure();
}

I hope this PHP INI file assistant is helpful. If there are suggestions for improvement, I will be glad to hear them.




All Articles