运行两次时功能不同

时间:2013-09-01 00:00:11

标签: php

我创建了一个函数,它基本上将文档中的一些php变量分开,然后在更改之后将它们重新组合在一起。

如果我调用该函数一次运行正常,但是当我运行它两次时,我会切断最后一段。每次切断量也不一样。

我想知道是否有任何理由。

function editvar($filename, $old_var, $new_var)
    {
    $tmp = fopen($filename, "r");   
$content=fread($tmp,filesize($filename)); 
fclose($tmp);

    $ex = explode('<!---->', $content);
    $expl = $ex[0];
    $expl = explode('"', $ex[0]);
    $expl[$old_var] = $new_var; // changed selected variable.
    $ii = 0;
    $ex[0] = "";
    foreach($expl as $value) {
        $ex[0] .= $expl[$ii];
        if ($ii < count($expl) - 1)
        {
        $ex[0] .='"';
        } 
        $ii++;
    }
    $ii = 0;
    $new_content = "";
    foreach($expl as $value)
        {
        $new_content .= $ex[$ii];
        if ($ii < count($ex) - 1)
        {
        $new_content .= '<!---->';
        }
        $ii++;
    }
    $tmp = fopen($filename, "w");    
fwrite($tmp, $new_content);    
fclose($tmp);
}
好吧,它开始像:(在文档的底部)

<?php include_once "../../foo/foo.php"; ?>

最终结果如下:(经过多次通话)

<?php include_once "../../fo

调用函数

editvar($root, 1, $var1);
editvar($root, 3, $var2);

它是否与 fread 有关,因为它使用相同的文件,文件大小不会更改为新编辑的长度,因此它会切断结束,因为文件大小比编辑一次后的旧文件大小。我希望对某人有意义大声笑 - 我很累......

1 个答案:

答案 0 :(得分:0)

如果有人真正关心这里是我采取的解决方法。

function editvar($filename, $old_var, $new_var)
 {
    $tmp = fopen($filename, "r");   
    $content=fread($tmp,filesize($filename)); 
    fclose($tmp);

    $ex = explode('<!---->', $content);
    $expl = $ex[0];
    $expl = explode('"', $ex[0]);

  // -----[my solution]
    $co = 0;
     foreach ($old_var as $value)
     {
        $expl[$old_var[$co]] = $new_var[$co]; // changed selected variable.
        $co++;
     }
  // -----[end my solution]

    $ii = 0;
    $ex[0] = "";

    foreach($expl as $value) {
      $ex[0] .= $expl[$ii];
       if ($ii < count($expl) - 1)
         {
           $ex[0] .='"';
         } 
       $ii++;
     }
     $ii = 0;
     $new_content = "";

     foreach($expl as $value)
     {
       $new_content .= $ex[$ii];
         if ($ii < count($ex) - 1)
         {
         $new_content .= '<!---->';
         }
       $ii++;
     }

     $tmp = fopen($filename, "w");    
     fwrite($tmp, $new_content);    
     fclose($tmp);
     }

将所有变量放入数组中,以便 $ intvar (是要更改的变量)和 $ Vars (新变量)

现在你只需要调用一次该函数。

    editvar($root, $intvar, $Vars);