Заменить строку пути в конфигурационном файле, используя PHP - PullRequest
0 голосов
/ 23 ноября 2011

это продолжение предыдущего поста.Мне нужно изменить некоторые параметры (строки) в моем конфигурационном файле (.cfg)

Я следовал стилю кодирования Моэна и успешно заменил строку, которую я хотел заменить.

Код Моэна:

$url = 'htp://localhost/mydocs/doc.pdf';

$file='config.cfg';
$file_data = explode("\r\n",file_get_contents($file));

foreach($file_data as $line) {
  list($key, $value) = explode('=', $line);
  if($key == "resource") {
    $res_data[] = "$key=$url\n";
    continue;
  }
  $res_data[] = $line;

}

file_put_contents("config.cfg", join("\r\n",$res_data));

Но с другой стороны мне нужно заменить не одну строку, а несколько строк, таких как ресурс, имя, файл и т. Д. И т. Д. Я попытался использовать оператор switch иищите все строки, которые я хочу заменить.Я могу заменить их все, но проблема в том, что я создаю копию измененных строк с оригинальными параметрами в такте.

foreach ($ file_data как $ line) {list ($ key, $ value) = explode ('=', $ line);

switch($key){
     case "resource":
        $res_data[] = "$key=$url"; 
        break;
     case "name":
        $res_data[] = "$key=$name";             
        break;
     case "file":
        $res_data[] = "$key=$file"; 
        break;
    }
  $res_data[] = $line;

}

file_put_contents("config.cfg", join("\r\n",$res_data));

Например, если значение параметра

resource=<?AJIZT?>\srcpdf\srcdef.xml 
name=timmy
file=timmy.txt

Я могу изменить эти параметры и ожидаемый результат будет

resource=htp://localhost/mydocs/doc.pdf
name=john
file=john.txt

Но мой выводвыглядит так:

resource=htp://localhost/mydocs/doc.pdf
resource=<?AJIZT?>\srcpdf\srcdef.xml 
name=john
name=timmy
file=john.txt
file=timmy.txt

Как удалить дубликаты?Спасибо

1 Ответ

0 голосов
/ 23 ноября 2011

Если ваш конфигурационный файл не слишком большой, вы можете использовать file_get_contents и file_puts_contents.Это позволяет вам манипулировать вашим файлом как большой строкой.

$url = 'htp://localhost/mydocs/doc.pdf';

$file='config.cfg';
$file_data = explode("\n",file_get_contents($file));

foreach($file_data as $line) {
  list($key, $value) = explode('=', $line);
  if($key == "resource") {
    $res_data[] = "$key=$url\n";
    continue;
  }
  $res_data[] = $line;

}

file_put_contents("config.cfg", join("\n",$res_data));

Внимание, проверьте разделители конца строки:

explode("\n",file_get_contents($file));

должно быть

explode("\r\n",file_get_contents($file));

Если вы знакомы с этим, preg_replace хорошо справится с этой задачей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...