0

我有文件(php文件),里面的文件如下所示

$php_file_string

//define ( 'name', 'saman' );
   //       define ( 'name', 'saman' );
define ( 'name', 'saman' );
#  define ( 'name', 'saman' );
 /* define ( 'name', 'saman' ); */

我想替换未注释的行

$search_string :

define ( 'name', 'saman' );

$新值:

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 文件中未注释的行

4

2 回答 2

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));
}
于 2013-07-04T06:39:14.217 回答
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

在这里试试这个,我们将每一行分成一个数组,然后单独检查每一行是否有注释,如果一行不是注释,我们用新值替换旧值希望它有帮助!

于 2013-07-04T06:38:05.100 回答