Version: 3.0
Type: Function
Category: File Management
License: Other
Description: Don’t have a MySQL database? Wanna store some information? Well, than you need my functions. This are very usefull functions. As my title says, it are functions for reading and writing INI-files. I have written 11 functions for handling INI-files.
All functions are very simple, and it is possible to access several INI-files at the same time!
Functionlist:
– ini_close ( [ resource link_identifier ] )
– ini_connect ( string file [ , resource link_identifier ] )
– ini_drop_section ( string section , [ resource link_identifier ] )
– ini_drop_key ( string section , string key [ , resource link_identifier ] )
– ini_error ( )
– ini_get_sections ( [ resource link_identifier ] )
– ini_get_keys ( string section [ , resource link_identifier ] )
– ini_read ( string section , string key [ , resource link_identifier ] )
– ini_report_error ( string error )
– ini_section_exists ( string section [ , resource link_identifier ] )
– ini_key_exists ( string section , string key [ , resource link_identifier ] )
– ini_key_position ( string section , string key [ , resource link_identifier ] )
– ini_write ( string section [ , string key , [ string value , [ resource link_identifier ]]] )
<?php // All variables for the error reporting $E_FILE_NOT_EXISTS = "Het opgegeven bestand bestaat niet.n"; $E_STREAM_EXISTS = "Er is al een verbinding met het opgegeven bestand.n"; $E_NO_STREAM = "De opgegeven link_identifier bestaat niet.n"; $E_NO_SECTION = "De opgegeven sectie bestaat niet.n"; $E_NO_KEY = "De opgegeven sleutel bestaat niet.n"; /** * @return bool * @param link_identifier = "" resource * @desc Close a stream to an ini-file, all data will be saved */ function ini_close($link_identifier = "") { if (!is_int($link_identifier)) $link_identifier = count($GLOBALS['ini_stream']) - 1; // Get all data stream $get_all_data = $GLOBALS['ini_stream']; // Get all filenames corresponding to the stream $get_all_names = $GLOBALS['ini_name_stream']; if (is_array($get_all_data)) $get_data = $get_all_data[$link_identifier]; if (is_array($get_all_names)) $get_name = $get_all_names[$link_identifier]; // Unset the data of the stream $left_part = array_slice($get_all_data, 0, $link_identifier); $right_part = array_slice($get_all_data, $link_identifier + 1, count($get_all_data)); $merged = array_merge($left_part, $right_part); $GLOBALS['ini_stream'] = $merged; $left_names = array_slice($get_all_names, 0, $link_identifier); $right_names = array_slice($get_all_names, $link_identifier + 1, count($get_all_names)); $merged_names = array_merge($left_names, $right_names); $GLOBALS['ini_name_stream'] = $merged_names; if (!empty($get_name)) { // Prepare the data for writing into the file for ($i = 0; $i < count($get_data); $i++) { if ($i != count($get_data) - 1) $add_enter = chr(13).chr(10); else unset($add_enter); $data .= $get_data[$i] . $add_enter; } // Write the data into the file $fp = fopen($get_name, "w+"); fwrite($fp, $data); fclose($fp); // Report no error and return true; connection succesfull closed ini_report_error(""); return(true); } else { // Report the error and return false; connection unsuccesfull closed ini_report_error($GLOBALS["E_NO_STREAM"]); return(false); } } /** * @return resource * @param file string * @desc Connect to an ini-file */ function ini_connect($file) { // Check whether or not the file does exist... if (file_exists($file)) { // Open the file for reading $fp = fopen($file, "r+"); $content = fread($fp, filesize($file)); fclose($fp); // Make an array... $ar_lines = explode(chr(13).chr(10), $content); // Check whether or not $ini_stream is already an array if (!is_array($GLOBALS['ini_stream'])) $GLOBALS['ini_stream'] = array (); if (!is_array($GLOBALS['ini_name_stream'])) $GLOBALS['ini_name_stream'] = array (); // Check whether or not there already is an stream to the chosen file for ($i = 0; $i < count($GLOBALS['ini_name_stream']); $i++) { $stream_names = $GLOBALS['ini_name_stream']; if ($stream_names[$i] == $file) { // Report the error: the chosen stream already exists. Return the existing stream ini_report_error($GLOBALS['E_STREAM_EXISTS']); return ($i); } } // Add in $ini_stream a new 'stream' with all data... array_push($GLOBALS['ini_stream'], $ar_lines); // Add in $ini_name_stream a new 'stream' with the filename array_push($GLOBALS['ini_name_stream'], $file); // Report no error ini_report_error(""); // Return the resource link_identifier return (count($GLOBALS['ini_stream']) - 1); } else { // Report the error an return false ini_report_error($GLOBALS['E_FILE_NOT_EXISTS']); return (false); } } /** * @return bool * @param section string * @param link_identifier = "" resource * @desc Drops a complete section, including all keys */ function ini_drop_section($section, $link_identifier = "") { if (!is_int($link_identifier)) $link_identifier = count($GLOBALS['ini_stream']) - 1; // Get all stream corresponding to the link_identifier $ar_all_streams = $GLOBALS['ini_stream']; $ar_data = $ar_all_streams[$link_identifier]; // Check whether or not the section exists if (ini_section_exists($section, $link_identifier)) { $place_section = array_search("[".$section."]", $ar_data); // Start on the next line, else the script will thing it has found the new section $t = $place_section + 1; while ($t < count($ar_data) && substr($ar_data[$t], 0, 1) != "[") { $t++; } // Drop the chosen section... $left_part = array_slice($ar_data, 0, $place_section); $right_part = array_slice($ar_data, $t, count($ar_data)); $ar_new = array_merge($left_part, $right_part); $ar_all_streams[$link_identifier] = $ar_new; $GLOBALS['ini_stream'] = $ar_all_streams; ini_report_error(""); return (true); } else { // Report the error no section found and return false... ini_report_error($GLOBALS['E_NO_SECTION']); return (false); } } /** * @return bool * @param section string * @param key string * @param link_identifier = "" resource * @desc Drops a key, if it exists, in the chosen section */ function ini_drop_key($section, $key, $link_identifier = "") { if (!is_int($link_identifier)) $link_identifier = count($GLOBALS['ini_stream']) - 1; $key_found = false; // Get all stream data corresponding to the link_identifier $ar_all_streams = $GLOBALS['ini_stream']; if(is_array($ar_all_streams)) $ar_data = $ar_all_streams[$link_identifier]; if (is_array($ar_data)) { // Check whether or not the section exists if (ini_section_exists($section, $link_identifier)) { $place_section = array_search("[".$section."]", $ar_data); // Start on the next line, else the script will thing it has found the new section $t = $place_section + 1; while ($t < count($ar_data) && substr($ar_data[$t], 0, 1) != "[") { // Check whether or not the line contains an = $pos = strpos($ar_data[$t], "="); if ($pos) $get_key = trim(substr($ar_data[$t], 0, $pos)); // Check whether or not the key is found in the section if ($get_key == trim($key)) { $key_found = true; $key_id = $t; break; } $t++; } if ($key_found == true) { $ar_left = array_slice($ar_data, 0, $key_id); $ar_right = array_slice($ar_data, $key_id + 1, count($ar_data)); $ar_new = array_merge($ar_left, $ar_right); $ar_all_streams[$link_identifier] = $ar_new; $GLOBALS['ini_stream'] = $ar_all_streams; ini_report_error(""); return (true); } } else { ini_report_error($GLOBALS['E_NO_SECTION']); return (false); } } else { ini_report_error($GLOBALS['E_NO_STREAM']); return (false); } ini_report_error(""); return (false); } /** * @return string * @desc Get the last error description */ function ini_error() { // Return the last error return ($GLOBALS['ini_last_error']); } /** * @return array * @param link_identifier = "" resource * @desc Get all sections corresponding to the link_identifier */ function ini_get_sections($link_identifier = "") { // Check whether or not the link_identifier parameter is set if (!is_int($link_identifier)) $link_identifier = count($GLOBALS['ini_stream']) - 1; $ar_all_streams = $GLOBALS['ini_stream']; if (is_array($ar_all_streams)) $ar_data = $ar_all_streams[$link_identifier]; $ar_return = array(); if (is_array($ar_data)) { for ($i = 0; $i < count($ar_data); $i++) { if (substr($ar_data[$i], 0, 1) == "[") { $ar_data[$i] = str_replace("[", "", $ar_data[$i]); $ar_data[$i] = str_replace("]", "", $ar_data[$i]); array_push($ar_return, $ar_data[$i]); } } } return ($ar_return); } /** * @return array * @param section string * @param link_identifier = "" resource * @desc Get all keys corresponding to the section and link_identifier */ function ini_get_keys($section, $link_identifier = "") { // Check whether or not the link_identifier parameter is set if (!is_int($link_identifier)) $link_identifier = count($GLOBALS['ini_stream']) - 1; $ar_all_streams = $GLOBALS['ini_stream']; if (is_array($ar_all_streams)) $ar_data = $ar_all_streams[$link_identifier]; $ar_return = array(); if (is_array($ar_data) && ini_section_exists($section, $link_identifier)) { $begin = array_search("[".$section."]", $ar_data); $t = $begin + 1; while ($t < count($ar_data) && substr($ar_data[$t], 0, 1) != "[") { if (substr($ar_data[$t], 0, 1) != ";") { $pos = strpos($ar_data[$t], "="); if ($pos) { $get_key = trim(substr($ar_data[$t], 0, $pos)); array_push($ar_return, $get_key); } } $t++; } } return ($ar_return); } /** * @return unknown * @param section string * @param key string * @param link_identifier = "" resource * @desc Read a key from the chosen section */ function ini_read($section, $key, $link_identifier = "") { if (!is_int($link_identifier)) $link_identifier = count($GLOBALS['ini_stream']) - 1; if (empty($key)) { ini_report_error($GLOBALS['E_NO_KEY']); return (""); } // Get all stream data corresponding to the link_identifier $ar_all_streams = $GLOBALS['ini_stream']; if(is_array($ar_all_streams)) $ar_data = $ar_all_streams[$link_identifier]; if (is_array($ar_data)) { // Check whether or not the section exists if (ini_section_exists($section, $link_identifier)) { if (ini_key_exists($section, $key)) { $place_section = array_search("[".$section."]", $ar_data); // Start on the next line, else the script will thing it has found the new section $t = $place_section + 1; while ($t < count($ar_data) && substr($ar_data[$t], 0, 1) != "[") { // Check whether or not the line contains an = $pos = strpos($ar_data[$t], "="); if ($pos) $get_key = trim(substr($ar_data[$t], 0, $pos)); // Check whether or not the key is found in the section if ($get_key == trim($key)) { // Get the value of the key and return it $value = trim(substr($ar_data[$t], $pos + 1, strlen($ar_data[$t]))); ini_report_error(""); return ($value); } $t++; } } else { ini_report_error($GLOBALS['E_NO_KEY']); return(""); } } else { ini_report_error($GLOBALS['E_NO_SECTION']); return (""); } } else { ini_report_error($GLOBALS['E_NO_STREAM']); return (""); } ini_report_error(""); return (""); } /** * @return void * @param error string * @desc Report an error */ function ini_report_error($error) { // Report the last error $GLOBALS['ini_last_error'] = $error; } /** * @return bool * @param section string * @param link_identifier = "" resource link_identifier * @desc Check whether or not the section exists */ function ini_section_exists($section, $link_identifier = "") { if (!is_int($link_identifier)) $link_identifier = count($GLOBALS['ini_stream']) - 1; // Retrieve all data corresponding to the link_identifier $ar_all_data = $GLOBALS['ini_stream']; if (is_array($ar_all_data)) $ar_data = $ar_all_data[$link_identifier]; // Retrieve tre filename corresponding to the link_identifier $ar_all_names = $GLOBALS['ini_name_stream']; if (is_array($ar_all_names)) $name = $ar_all_names[$link_identifier]; // if the connection is valid... if (!empty($name)) { $search_result = array_search("[".$section."]", $ar_data); ini_report_error(""); // Check whether the section have been found or not if (is_int($search_result)) return (true); else return (false); } else { // The connection is not valid, so report the error and return false ini_report_error($GLOBALS['E_NO_STREAM']); return (false); } } /** * @return bool * @param section string * @param key string * @param link_identifier = "" resource * @desc Checks whether or not the chosen key exist */ function ini_key_exists($section, $key, $link_identifier = "") { if (!is_int($link_identifier)) $link_identifier = count($GLOBALS['ini_stream']) - 1; $key_found = false; // Get all stream data corresponding to the link_identifier $ar_all_streams = $GLOBALS['ini_stream']; if(is_array($ar_all_streams)) $ar_data = $ar_all_streams[$link_identifier]; if (is_array($ar_data)) { // Check whether or not the section exists if (ini_section_exists($section, $link_identifier)) { $place_section = array_search("[".$section."]", $ar_data); // Start on the next line, else the script will thing it has found the new section $t = $place_section + 1; while ($t < count($ar_data) && substr($ar_data[$t], 0, 1) != "[") { // Check whether or not the line contains an = $pos = strpos($ar_data[$t], "="); if ($pos) $get_key = trim(substr($ar_data[$t], 0, $pos)); // Check whether or not the key is found in the section if ($get_key == trim($key)) { ini_report_error(""); return (true); break; } $t++; } } else { ini_report_error($GLOBALS['E_NO_SECTION']); return (false); } } else { ini_report_error($GLOBALS['E_NO_STREAM']); return (false); } } /** * @return int * @param section string * @param key string * @param link_identifier = "" resource * @desc Gets the position of the key */ function ini_key_position($section, $key, $link_identifier = "") { if (!is_int($link_identifier)) $link_identifier = count($GLOBALS['ini_stream']) - 1; $key_found = false; // Get all stream data corresponding to the link_identifier $ar_all_streams = $GLOBALS['ini_stream']; if(is_array($ar_all_streams)) $ar_data = $ar_all_streams[$link_identifier]; if (is_array($ar_data)) { // Check whether or not the section exists if (ini_section_exists($section, $link_identifier)) { $place_section = array_search("[".$section."]", $ar_data); // Start on the next line, else the script will thing it has found the new section $t = $place_section + 1; while ($t < count($ar_data) && substr($ar_data[$t], 0, 1) != "[") { // Check whether or not the line contains an = $pos = strpos($ar_data[$t], "="); if ($pos) $get_key = trim(substr($ar_data[$t], 0, $pos)); // Check whether or not the key is found in the section if ($get_key == trim($key)) { ini_report_error(""); return ($t); break; } $t++; } } else { ini_report_error($GLOBALS['E_NO_SECTION']); return (-1); } } else { ini_report_error($GLOBALS['E_NO_STREAM']); return (-1); } } /** * @return bool * @param section string * @param key = "" string * @param value = "" string * @param link_identifier = "" resource * @desc Write information into the stream */ function ini_write($section, $key = "", $value = "", $link_identifier = "") { // Check whether or not the link parameter is set, if not, get the last stream if (!is_int($link_identifier)) $link_identifier = count($GLOBALS['ini_stream']) - 1; if (empty ($section)) return ($GLOBALS['E_NO_SECTION']); // Get all stream data corresponding to the link_identifier $ar_all_streams = $GLOBALS['ini_stream']; if(is_array($ar_all_streams)) $ar_data = $ar_all_streams[$link_identifier]; // Checks whether or not the chosen link_identifier is valid... if (is_array($ar_data)) { // Checks whether or not the section already exists... if(ini_section_exists($section, $link_identifier) == false) { array_push($ar_all_streams[$link_identifier], "[".$section."]"); $GLOBALS['ini_stream'] = $ar_all_streams; // Reload all data since a new section is added $ar_all_streams = $GLOBALS['ini_stream']; if(is_array($ar_all_streams)) $ar_data = $ar_all_streams[$link_identifier]; } if (!empty($key)) { // If the key does not already exist: add a new one if (ini_key_exists($section, $key, $link_identifier) == false) { $section_place = array_search("[".$section."]", $ar_data); $left_part = array_slice($ar_data, 0, $section_place + 1); $mid_part = $key . "=" . $value; $right_part = array_slice($ar_data, $section_place + 1, count($ar_data)); $tot = array_merge($left_part, $mid_part); if (is_array($right_part) && count($right_part) != 0) $tot = array_merge($tot, $right_part); $ar_all_streams[$link_identifier] = $tot; $GLOBALS['ini_stream'] = $ar_all_streams; ini_report_error(""); return (true); } // If the key does already exist: update the old one elseif (ini_key_exists($section, $key, $link_identifier) == true) { // Retrieve the position of the chosen key $pos_key = ini_key_position($section, $key, $link_identifier); // Check whether or not the key contains an = mark $get_pos = strpos($ar_data[$pos_key], "="); if ($get_pos) { // Update the key, save all data and return true $left_part_key = substr($ar_data[$pos_key], 0, $get_pos + 1); $tot_key = $left_part_key . $value; $ar_data[$pos_key] = $tot_key; $ar_all_streams[$link_identifier] = $ar_data; $GLOBALS['ini_stream'] = $ar_all_streams; ini_report_error(""); return (true); } } } } else { ini_report_error($GLOBALS['E_NO_STREAM']); return (false); } } ?>