PHP错误尝试使用fopen去除.txt内容

时间:2017-12-28 00:56:03

标签: php

<?php
$file = fopen ("test.txt","r");
$string = 'server-port: ';
$result = explode(': ', $file)[1];
echo $result;
fclose( $file );
?>

您好,我在下面收到此错误,您能帮助我吗?谢谢!

explode() expects parameter 2 to be string

内容文件:https://pastebin.com/CzrQchge

3 个答案:

答案 0 :(得分:0)

这是因为fopen()返回resourceexplode()需要string作为第二个参数。

要阅读文件内容,您应该使用stream_get_contents()作为第一个参数:

<?php
$stream = fopen ("test.txt","r");
$fileContent = stream_get_contents($stream);
$string = 'server-port: ';
$result = explode(': ', $fileContent)[1];
echo $result;
fclose( $stream );
?>

修改1:

正如@MikeVelazco所说,file_get_contents()将消除使用fopen()fclose()函数的必要性,因为它直接使用文件路径。

<?php
$fileContent = file_get_contents("text.txt");
$string = 'server-port: ';
$result = explode(': ', $fileContent)[1];
echo $result;
?>

编辑2:

由于OP在评论中说需要从文件中获取服务器端口,我建议这个解决方案:

使用以下正则表达式:/server-port=(\d+)/gm(您可以检查它是否有效here)。

要使用正则表达式,您可以使用preg_match()函数:

<?php
$fileContent = file_get_contents("text.txt");
$matches = [];

if (preg_match('/server-port=(\d+)/m', $fileContent, $matches)) {
  echo $matches[1];
} else {
  echo "Server port not found in configuration file";
}
?>

您可以看到它有效here

答案 1 :(得分:0)

您不需要使用fopen来获取内容,只需使用file_get_contents

<?php 
$file = file_get_contents('test.txt');
$result = explode(':',$file)[1];
echo $result;

答案 2 :(得分:-1)

更新:您需要在爆炸的第一个参数中使用PHP_EOL来获取每行的内容。

您需要使用stream_get_contents($file);

如果要分隔包含'='

的值,请

更新2

以下是整码

$file = fopen ("test.txt","r");
$string = 'server-port: ';
$content = stream_get_contents($file);;
$result = explode(PHP_EOL, $content);
$filtered_result = array();
foreach($result as $value){
    $temp = explode('=', $value);
    if(count($temp) == 2){
        $filtered_result[$temp[0]] = $temp[1];
    }
}
fclose( $file );

从VAR_DUMP输出

array(32) {
  ["generator-settings"]=>
  string(0) ""
  ["op-permission-level"]=>
  string(1) "4"
  ["allow-nether"]=>
  string(4) "true"
  ["level-name"]=>
  string(5) "world"
  ["enable-query"]=>
  string(5) "false"
  ["allow-flight"]=>
  string(5) "false"
  ["announce-player-achievements"]=>
  string(5) "false"
  ["server-port"]=>
  string(5) "25565"
  ["level-type"]=>
  string(7) "DEFAULT"
  ["enable-rcon"]=>
  string(5) "false"
  ["force-gamemode"]=>
  string(5) "false"
  ["level-seed"]=>
  string(0) ""
  ["server-ip"]=>
  string(0) ""
  ["max-build-height"]=>
  string(3) "256"
  ["spawn-npcs"]=>
  string(4) "true"
  ["white-list"]=>
  string(5) "false"
  ["spawn-animals"]=>
  string(4) "true"
  ["snooper-enabled"]=>
  string(4) "true"
  ["hardcore"]=>
  string(5) "false"
  ["online-mode"]=>
  string(4) "true"
  ["resource-pack"]=>
  string(0) ""
  ["pvp"]=>
  string(4) "true"
  ["difficulty"]=>
  string(1) "1"
  ["enable-command-block"]=>
  string(5) "false"
  ["player-idle-timeout"]=>
  string(1) "0"
  ["gamemode"]=>
  string(1) "0"
  ["max-players"]=>
  string(2) "20"
  ["spawn-monsters"]=>
  string(4) "true"
  ["view-distance"]=>
  string(1) "3"
  ["generate-structures"]=>
  string(4) "true"
  ["spawn-protection"]=>
  string(2) "16"
  ["motd"]=>
  string(18) "A Minecraft Server"
}

如果您想获得server-port的值,只需使用它的密钥调用它。

echo $filtered_result['server-port'];