Как заменить переменную из контроллера в (.php) файл - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть пустой файл test.php, в этот файл я вставил данные, показанные ниже.Этот код является контроллером формы.Эти данные трассировки поступают из пользовательского интерфейса с использованием ajax.

Вот мои данные массива $ $, такие как:

array(

   [0] => $test1 = "1,2,3,4,5,6,7";
   [1] => $test2 = "1,2,3,4,7";
   [2] => $test3 = "1,4,6,7,9,0";
)

Это поступает из пользовательского интерфейса

 $trace = $this->input->post('trace');
     $viewsDir = 'C:/xampp/htdocs/project/application/views/html_v3/';
        $fp = fopen($this->viewsDir.'test.php', 'w');
        fwrite($fp, "<?php \n\n");
        $i = 0;
        if($trace){
           foreach ($trace as  $value) {
            fwrite($fp, $trace[$i]."\n");
            $i++;                   
             }
        }
        fwrite($fp, "\n?>");
        fclose($fp);

После вставки моегоданные в файл test.php, то файл выглядит следующим образом:

<?php
$test1 = "1,2,3,4,5";
$test2 = "5,2,0,6,5";
$test3 = "4,8,9,7,1";
?>

Здесь, если я снова хочу вставить данные в файл test.php, мои данные массива $ trace будут такими:

aray(
[0] => $test1 = "9,9,9,9,9";
[1] => $test2 = "1,1,1,1,1";
[2] => $test4 = "1,2,6,7,8";
)

Здесь мой запрос - как я могу заменить переменные этого массива ($ trace), если они совпадают с test.php.Если не совпадает, его следует добавить в файл test.php.

Здесь мой ожидаемый результат:

<?
$test1 = "9,9,9,9,9";
$test2 = "1,1,1,1,1";
$test3 = "4,8,9,7,1";
$test4 = "1,2,6,7,8";
 ?>

Я пытался вот так, но я не знаю, как сравнить моимассив ($ trace) и содержимое файла test.php

$file = $this->viewsDir.'test.php';  
$contents = file_get_contents($file);
echo $contents; //i will get content of test.php based on this i have to replace or add

Пожалуйста, помогите мне, спасибо.

1 Ответ

0 голосов
/ 21 сентября 2019

Я даже не уверен, что должен помочь вам с этим.Возможно, что-то не так с вашим дизайном, если вы передаете php-код через POST и сохраняете его в исходный файл.

В любом случае ...

Я бы объявил вспомогательную функцию, которая 'разбирает строку строки ввода как ключ $trace1 и значение "1,2,3,4,5" и добавляет ее в массив $arr

function addToTrace(&$arr, $entry) {
    $entry = trim($entry);

    if(substr($entry, 0, 1) == "$") {
        $elements = explode("=", $entry);
        if(count($elements) !== 2) {
            return false;
        }
        $elements = array_map('trim', $elements);

        $arr[$elements[0]] = $elements[1];

        return true;
    }

    return false;
}

После этого нужно только сначала прочитать файл, добавив все записи в новый массив$currTrace

$currTrace = [];

$fp = fopen($this->viewsDir . 'test.php', 'r');

if($fp) {
    while (!feof($fp)) {
        $line = fgets($fp);

        addToTrace($currTrace, $line);
    }

    fclose($fp);
}

, чем добавление новой трассы из записи (перезапись соответствующих ключей):

if($trace){
    foreach ($trace as  $value) {
        addToTrace($currTrace, $value);
    }
}

и сохранение $currTrace в файл:

$fp = fopen($this->viewsDir . 'test.php', 'w');

fwrite($fp, "<?php \n\n");
foreach($currTrace as $key => $value) {
    fwrite($fp, $key . " = " . $value . "\n");
}
fclose($fp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...