我有文件(php文件)里面的文件看起来像波纹管
$ php_file_string
//define ( 'name', 'saman' );
// define ( 'name', 'saman' );
define ( 'name', 'saman' );
# define ( 'name', 'saman' );
/* define ( 'name', 'saman' ); */
我想替换未注释的行
$ search_string:
define ( 'name', 'saman' );
$ NEW_VALUE:
define ( 'name', 'RoX' );
我尝试使用
str_replace($search_string, $new_value, $php_file_string);
这将替换所有行(文件中的五行)。因此str_replace()上面没有正确地为我工作。我需要看起来像下面的结果
//define ( 'name', 'saman' );
// define ( 'name', 'saman' );
define ( 'name', 'RoX' );
# define ( 'name', 'saman' );
/* define ( 'name', 'saman' ); */
请帮助我如何只替换php文件中未注释的行
答案 0 :(得分:1)
我认为,这是您要更改的文件中的最后一行(如您所述),并且您具有写入权限,因此,这应该可以正常工作
$file = 'path/filename.php';
$lines =file($file);
$lines[count($lines)-1]="define ( 'name', 'RoX' );";
if(is_writable($file))
{
file_put_contents($file, implode($lines));
}
结果将是:
//define ( 'name', 'saman' );
// define ( 'name', 'saman' );
# define ( 'name', 'saman' );
/* define ( 'name', 'saman' ); */
define ( 'name', 'RoX' );
更新:(问题编辑完毕后)
$file = '../mytests/index.php';
$lines = file($file);
for($i=0; $i < count($lines); $i++)
{
if(substr($lines[$i], 0, 6) === 'define') {
$lines[$i] = "define ( 'name', 'RoX' );";
}
}
if(is_writable($file))
{
file_put_contents($file, implode($lines));
}
答案 1 :(得分:0)
$u=explode("\n",$php_file_string);//Breaking each line into array
for($i=0;$i<count($u);$i++)
{
if(!substr_count($u[$i],"/*")&&!substr_count($u[$i],"#")&&!substr_count($u[$i],"//"))
//Checking whether line contains any comment or not
$u[$i]=str_replace($search_string, $new_value, $u[$i]);
}
//Now you can use $u as an string array
在这里尝试这个我们将每一行分成一个数组,然后分别检查每一行是否有注释,如果一行不是注释我们用新的替换旧值 希望它有所帮助!!