All,

I want to clean up my PHP.ini file on production to be as streamlined as possible so that it's easier to work with and maintain. It is easier to do a diff of my INI and the recommended INI if both files are very similar with whitespace removed, comments cleaned out, and keys sorted, etc. I've tried to use parse_ini_file() function to parse the INI file, but that won't work because the 'extension = *' key is used multiple times in the php.ini. parse_ini_file assumes unique assoc array is returned.

I'm guessing PHP doesn't actually use the parse_ini_file to read its own ini.

So, I then started parsing the ini myself with my own custom code and soon realized that PHP might not be using the [section] tags either as it uses the INI key=values. Seems like the [section] tags are used more like suggestions for key grouping than for anything functional. Is this a correct assumption? If so, I've got the following INI reading code which will munch the php.ini-recommended and output just the strings which are not commented out.

See here and let me know if this looks like robust code:

//----------------------------------------------------------------------
#!/usr/bin/php
<?php
// we pass the name of an INI file on the command line
$script = array_shift($argv);
$ini_file_name = array_shift($argv);
if (!$ini_file_name || !file_exists($ini_file_name)) {
   die("usage: $script <php.ini file>\n");
}

// slurp in the whole ini file and init
$lines = file($ini_file_name);
$data = array();

foreach ($lines as $line) {
   // remove trailing comments, newlines, and start/end whitespace
   $line = trim(preg_replace("/;[^\"\']*$/", "", trim($line)));

// skip blank lines, commented lines, ini sections, or anything without an '=' in the line if (!$line || $line{0} === ';' || $line{0} === '[' || strpos($line, '=') < 1) {
       continue;
   }

   // fix spacing between equal sign
   list ($key, $value) = preg_split("/\s*=\s*/", $line, 2);
   $line = "$key = $value";

   // save this key=value pair
   array_push($data, $line);
}

// sort and print all keys
sort($data);
print join("\n", $data);
?>
//----------------------------------------------------------------------

Dante

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to