2013-09-01 3 views
-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, поскольку он использует тот же файл, размер файла не изменяется на новую отредактированную длину, поэтому он отсекает конец, потому что размер файла больше, чем старый размер файла после редактирования один раз. Надеюсь, что это имеет смысл кому-то lol - я довольно устал.

+6

Отступы - ваш друг. – Kermit

+0

Кроме того, добавьте примерную дату. Должны ли мы догадываться, каково желаемое поведение? – SteAp

+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 (это переменные для изменения) и $ Варс (новые переменные)

теперь вам нужно только вызвать функцию один раз.

editvar($root, $intvar, $Vars); 
Смежные вопросы