从文件中获取一行并拆分成一个数组

时间:2014-03-28 05:04:33

标签: php file-get-contents explode minecraft

我正在为Minecraft服务器创建一个控制面板(如果你不知道的话,这是一个游戏)。我需要在php中处理server.properties文件以获取在线模式字段并获得它的价值。我该怎么做呢?有什么想法吗?

这是server.properties的一个例子:

spawn-protection=16
query.port=25565
generator-settings=
force-gamemode=false
allow-nether=true
gamemode=0
enable-query=true
player-idle-timeout=0
difficulty=1
spawn-monsters=true
op-permission-level=4
announce-player-achievements=true
pvp=true
snooper-enabled=true
level-type=DEFAULT
hardcore=false
venable-command-block=false
max-players=5
rcon.port=25575
server-port=25565
debug=false
texture-pack=
server-ip=
spawn-npcs=true
allow-flight=false
level-name=
view-distance=10
resource-pack=
spawn-animals=true
white-list=false
rcon.password=asd
generate-structures=true
online-mode=true
max-build-height=256
level-seed=
enable-rcon=true
motd=A Minecraft Server

是的,田地一直在玩耍,所以我无法真正预测这条线的位置。

4 个答案:

答案 0 :(得分:1)

如果你正在使用file_get_contents,那么你可以使用explode来破坏新行的数据。

  $homepage = file_get_contents('http://www.example.com/data.txt');

    $arr=explode("\n",$homepage)

    Alternatively, you can use preg_split and the character group \s which matches every white space character:

    preg_split('/\s+/', $homepage);

现在搜索特定关键字:

$prop='properties';
$key = array_search($prop, $arr);

通过这个你可以找到特定的位置。 现在使用explode来获得理想的结果。

$res=explode("=",$key);

答案 1 :(得分:1)

使用explode()

$content = file_get_contents('server.properties');
$lines= explode("\r\n" , $content);


echo '<form name="form1" method="post" action="">';

array_pop($lines);

foreach($lines as $line)
{

     $properties = explode('=' , $line);
     echo $properties[0] . ' = <input type="text" value="'. $properties[1] .'" name="properties[]['. $properties[0] .']"/></br>';
}
echo '<input type="submit" name="submit" value="Submit"></br>';

echo '</form>';

上面的部分回应了文件的内容。 下面的部分汇集了它。你可以将它放在前面提到的部分之上。

if(isset($_POST['properties']))
{

    $new_lines = $_POST['properties'];


    $string = '';

    foreach($new_lines as $line)
    {
        foreach($line as $property => $value)
        {
             $string .= $property . '=' . $value . "\r\n";
        }
    }

    file_put_contents('server.properties' , $string);

    unset($_POST['properties']);

}

答案 2 :(得分:1)

如果您能够使用file_get_content()或其他方式获取PHP变量中的文件内容,并且可以说保存字符串的变量是$input_lines

您可以使用以下正则表达式获取值

preg_match_all("/online\-mode=(.*)$/m", $input_lines, $output_array);

$ output_array将为

Array
(
    [0] => Array
        (
            [0] => online-mode=true
        )

    [1] => Array
        (
            [0] => true
        )

)

这就是它的工作原理

 /online\-mode=(.*)$/m

    online matches the characters online literally (case sensitive)
    \- matches the character - literally
    mode= matches the characters mode= literally (case sensitive)
    1st Capturing group (.*)
        .* matches any character (except newline)
            Quantifier: Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
    $ assert position at end of a line
    m modifier: multi-line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string)

答案 3 :(得分:1)

解析ini函数很有用

示例:

$settings = parse_ini_file('server.properties');
echo $settings['level-type']; //will print DEFAULT