meun5
meun5

Reputation: 322

How can I edit the content of a ini file?

I would like to be able to edit a config file for a server application using php. The config file is as follows:

include=sc_serv_public.conf
streamid_2=2
streampath_2=/relay
streamrelayurl_2=http://<full_url_of_relay_including_port>
;allowrelay=0
;allowpublicrelay=0

I would like to edit the line:

streamrelayurl_2=http://<full_url_of_relay_including_port>

and then save the file.

I am currently using:

$data = file_get_contents("sc_serv.conf"); //read the file
$convert = explode("\n", $data); //create array separate by new line

to open the file, but now I dont know how to edit it.

Upvotes: 1

Views: 239

Answers (2)

Adrian Cid Almaguer
Adrian Cid Almaguer

Reputation: 7791

You can use file() to read the file content to an array, then you can iterate trough the array with foreach() searching with the strstr() function the line that have your URL (in this case is in the var $id_change) and change the value. Then as you found what you needed, you end the foreach() with break. And make your string to save in the file with implode() and save the string to the config file with file_put_content().

See the code:

<?php

$new_url = 'http://www.google.com';
$id_change = 'streamrelayurl_2';
$file = "sc_serv.conf";

$data = file($file); //read the file

foreach($data as $key => $value) {
  if(strstr($value, $id_change)) {
    $info = $id_change . '=' . $new_url . "\n";
    $data[$key] = $info;
    break;  
  }     
}   

$data = implode("", $data);

file_put_contents($file, $data);

?>

Output:

include=sc_serv_public.conf
streamid_2=2
streampath_2=/relay
streamrelayurl_2=http://www.google.com
;allowrelay=0
;allowpublicrelay=0

Upvotes: 1

Kevin
Kevin

Reputation: 41875

As an alternative, you could just use file() instead. This just loads it up into array form, no need to explode. Then after that, you just loop the elements, if the desired needle is found, overwrite it, the write the file again:

$data = file('sc_serv.conf', FILE_IGNORE_NEW_LINES); // load file into an array
$find = 'streamrelayurl_2='; // needle
$new_value = 'http://www.whateverurl.com'; // new value
foreach($data as &$line) {
    if(strpos($line, 'streamrelayurl_2=') !== false) { // if found
        $line = $find . $new_value; // overwrite
        break; // stop, no need to go further
    }
}
file_put_contents('sc_serv.conf', implode("\n", $data)); // compound into string again and write

Upvotes: 2

Related Questions