The Task
Now I am working with drupal. For some reason I had a requirement to change some particular lines using the line numbers.
Say, I have a css file. Line number I need to change line number 2, 6 and 9. I made a script to do that. This is how this works…
The idea and development
Using file() function we can get each line in array format [$lines = file($file_path)]. To change line number 2 we do [$lines[1] = “background: #ECECEC;”. After that we can implode() the array and change the content of the file using fwrite() function.
Consider the following css file (style.css)
.header {
background: #EFEFEF;
color: #000000;
}
.title {
color: #FFFFFF;
}
.footer {
color: #000000;
}
If we use,
$lines = file(‘style.css’);
$lines[1] = “background: #ECECEC”;
$new_content = implode('', $lines);
$h = fopen(‘style.css’, 'w'));
fwrite($h, $new_content));
fclose($h);
The css file will be,
.header {
background: # ECECEC;color: #000000;
}
.title {
color: #FFFFFF;
}
.footer {
color: #000000;
}
What we are missing is a tab in front of the content and a line break at the end.
So we can change the replace code as,
$lines[1] = chr(9); . “background: #ECECEC” . chr(13) . chr(10);
Done. This is the actual process. Using this method I have made the following function to change some lines in a single call.
<?php
function replace_lines($file, $new_lines, $source_file = NULL) {
$response = 0;
//characters
$tab = chr(9);
$lbreak = chr(13) . chr(10);
//get lines into an array
if ($source_file) {
$lines = file($source_file);
}
else {
$lines = file($file);
}
//change the lines (array starts from 0 - so minus 1 to get correct line)
foreach ($new_lines as $key => $value) {
$lines[--$key] = $tab . $value . $lbreak;
}
//implode the array into one string and write into that file
$new_content = implode('', $lines);
if ($h = fopen($file, 'w')) {
if (fwrite($h, $new_content)) {
$response = 1;
}
fclose($h);
}
return $response;
}
?>
How to use
Consider the above css file.
To change some lines in that file use this:
$new_lines = array(2 => ‘background: #ECECEC’, 6 => ‘background: #F8F8F8’, 9 => ‘background: #FFF); replace_lines(‘style.css’, $new_lines);
To copy style.css into a new file with some change:
if(replace_lines(‘style.css’, $new_lines, ‘new_style.css’)) {
print “File successfully updated”;
}
else {
print “File update failed.”;
}
Enjoy ![]()
-Beschi A.

nice info, keep posting bro
http://www.centplay.com/affiliate/id_1198/