Редактировать строки в файле, ища определенную строку? - PullRequest
0 голосов
/ 05 февраля 2019

Мне нужно отредактировать некоторые определенные строки в файле, однако, поскольку этот файл является файлом конфигурации (для точки доступа Wi-Fi), некоторые из его строк иногда редактируют / удаляют / добавляют себя.

Поэтому я хотел узнать, можно ли сначала найти определенную строку, а затем отредактировать ее.

Вот фрагмент (предоставленный кем-то на другом форуме):

<?php

// Function that replaces lines in a file
function remplace(&$printArray,$newValue) {
  $ligne    = explode('=',$printArray);
  $ligne[1] = $nouvelleValeur;
  $printArray = implode('=',$line); 
}
// Read the file then put it in an array
$handle=fopen("file.cfg","r+");
$array = file('file.cfg',FILE_IGNORE_NEW_LINES);

// Displaying it to see what is happening
foreach($array as $value) {
 print "$value<br/>";
}
// Replace line 38 
remplace($array[37],'replacement text');
// Replace line 44
remplace($array[43],'replacement text');

// Edit then saves the file
file_put_contents('file.cfg', implode(PHP_EOL,$array));
fclose($handle);

?>

Строки редактирования этого кода показаны с помощью $ array [], но, как я упоминал ранее, строки буквально перемещаются, поэтому мне нужно искать конкретные строки, а не просто выбирать строки, которые могут быть неправильными.

А как насчет substr_replace, strpbrk и / или strtr?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вы можете создать такой заменяющий массив, содержащий пары 'key' => 'new_value'

$replacement = [
  'password' => 'new_pass',
  'SSID' => 'newSSID'
];

Затем убедитесь, что текущая строка массива config начинается с ключа этого массива.Если это так, замените его.

foreach($array as &$value) {
    if(preg_match('/^(\w+)\s*=/', $value, $m) and 
       isset($replacement[$m[1]])) {
           remplace($value, $replacement[$m[1]]);
    }
}
0 голосов
/ 05 февраля 2019

Вы можете искать строку, которую хотите заменить построчно.Это только один подход, очень простой, потому что вы, кажется, новичок в этом.Вы могли бы даже пойти с match функциями или еще.Есть много способов ...

И вам не нужно fopen для использования функции file и / или file_put_contents.

$lines = file('file.cfg', FILE_IGNORE_NEW_LINES);

foreach ($lines as &$line) {
  $ligne = explode('=', $line);

  if ($ligne[1] === 'str to serach for') {
    $ligne[1] = 'replacement text';
    $line = implode('=', $ligne); 
  }
}

file_put_contents('file.cfg', implode(PHP_EOL, $lines));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...