fopen — Как изменить строку из текстового файла (PHP)

Текстовый файл (text.txt):

#Minecraft server properties
#Tue Sep 23 18:07:26 CEST 2014
generator-settings=
op-permission-level=4
allow-nether=true
level-name=world
enable-query=true
allow-flight=false
announce-player-achievements=true
server-port=25565
query.port=25565
level-type=DEFAULT
enable-rcon=false
force-gamemode=false
level-seed=
server-ip=
max-build-height=256

Как заменить значение какой-либо строки, например:

server-port=25565

Заменить:

server-port=25585

Но нет, чтобы найти ‘server-port = 25565’ и заменить на ‘server-port = 25585’
Выясняется, что в линиях сервера есть порт и для выделения значения, которое необходимо заменить.

Пример:

<?php
$myfile = fopen("text.txt", "r") or die("Unable to open file!");
...
fclose($myfile);
?>

РЕДАКТИРОВАТЬ:
И когда это найдено и сохранено заменить текстовый файл.

0

Решение

Поскольку ваш формат выглядит подозрительно как файл конфигурации PHP (.ini)почему бы не использовать parse_ini_file функционировать?

$ini = parse_ini_file("text.txt");
echo "<pre>".print_r($ini,TRUE)."</pre>";

или же

echo $ini["server-port"];

Измени это:

$ini["server-port"] = 25585;

Сохраните снова ваш файл .txt с:

$f = fopen("text.txt","w");
foreach($ini as $k=>$v) {
fwrite($f,$k."=".$v.PHP_EOL);
}
fclose($f);

Возможно, вам придется изменить свой # Символ комментариев, хотя с ;

ОБНОВИТЬ

$lines = file("text.txt",FILE_IGNORE_NEW_LINES);
// modify
foreach($lines as &$line) {
$val = explode("=",$line);
if ($val[0]=="server-port") {
$val[1] = "25585";
$line = implode("=",$val);
}
}
unset($line);

// save again
$f = fopen("text.txt","w");
foreach($lines as $line) {
fwrite($f,$line.PHP_EOL);
}
fclose($f);
2

Другие решения

Ты можешь использовать strpos() или же stripos()

<?php

$file = "file.txt";

$content = file($file);

foreach ($content as $line_num => $line) {
if (false === (strpos($line, 'server-port=25565'))) continue;

$content[$line_num] = "server-port=25585\n";
}

file_put_contents($file, $content);

До

# Свойства сервера Майнкрафт
# Вт 23 сен 18:07:26 CEST 2014
генератор-настройка =
оп-разрешение на уровне 4 =
позволяют-Пустоты = истина
Уровень имя = мир
включить-запрос = TRUE
позволяет полет = ложь
объявить, играющий достижение = истина
Сервер-порт = 25565
query.port = 25565
Уровень типа = по умолчанию
включить RCON-= ложь
сила-режим игры = ложь
Уровень семян =
Сервер-ф =
макс-сборка высота = 256

После

# Свойства сервера Майнкрафт
# Вт 23 сен 18:07:26 CEST 2014
генератор-настройка =
оп-разрешение на уровне 4 =
позволяют-Пустоты = истина
Уровень имя = мир
включить-запрос = TRUE
позволяет полет = ложь
объявить, играющий достижение = истина
Сервер-порт = 25585
query.port = 25565
Уровень типа = по умолчанию
включить RCON-= ложь
сила-режим игры = ложь
Уровень семян =
Сервер-ф =
макс-сборка высота = 256

редактировать

Вы можете изменить $new_port переменная на все, что вы хотите.

$path = "file.txt";
$new_port = 25585;
$content = file($path);

foreach ($content as $line_num => $line) {
if (false === (strpos($line, 'server-port'))) continue;

$content[$line_num] = "server-port=$new_port\n";
}

file_put_contents($path, $content);
1

По вопросам рекламы [email protected]