-1

我制作了一个函数,它基本上分离出文档上的一些 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有关系,因为它使用相同的文件文件大小不会更改为新的编辑长度,因此它会切断结尾,因为文件大小在编辑一次后大于旧文件大小。我希望这对某人有意义,哈哈-我很累..

4

1 回答 1

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);
于 2013-09-01T00:58:28.407 回答