Question

I am trying to dynamically edit and update my /etc/hosts using the below php code

$string_Data = 'It works success!!';
$file_To_Edit = "/etc/hosts";
exec("sudo chmod 777 /etc/hosts");
$opened_File = file($file_To_Edit) or die("Error. Code:2 - Can not open file $file_To_Edit");
$lines = preg_grep(' /test.com/', $opened_File);
   foreach(array_keys($lines) as $key) {
       $opened_File[$key] = substr($opened_File[$key], 0, -1) . $string_Data;
  }
$f = fopen($file_To_Edit, 'w') or die("Error $file_To_Edit"); 
fwrite($f, implode("\n", $opened_File)); 
fclose($f);

Can anyone tell me where am i going wrong, since i am not able to update the /etc/hosts file.

Was it helpful?

Solution

//suppose you are in  /var/www/html/website/

$currentdir=getcwd();  // it will save your current directory location    

chdir('../../../../etc/');  // it will change your web directory( /var/www/html/website/)  to etc directory (/etc/)

$file='hosts';
$current=file_get_contents($file);
$string_Data = 'It works success!!';
$current.=$string_Data;
if(file_put_contents($file, $current))
{
echo "success in writing";
}
else
{
echo "fail in writing";
}

chdir("$currentdir"); // it will change directory (/etc/) to your web directory( /var/www/html/website/ )

//change permission before run php page because if your user don't have permission this code can't do writing

OTHER TIPS

You need root rights to modify /etc/hosts file

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top