PHP尝试使用substr仅显示文本文件中的最后6个字符

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (49)

我是php的新手。只是想尝试运行这个本地网站。尝试从每5分钟更新一次的txt文件中提取最后5个字符。这是我的脚本:

    <?php 
$temperature = include( "temperaturelog.txt");
$temp = substr($temperature, -5);
print $temp
?>

这是我的测试文件:

14.75
13.52

这是我的网页显示的内容:

网页显示

我做错了什么线索?或误解文件?

提问于
用户回答回答于

当前的问题是您使用的是PHP 包含。您应该只使用include来包含 PHP可执行代码 - 这就是函数的用途。它不会返回文件内容。

实现类似功能的一个非常简单的功能是file_get_contents,但是还没有跳枪。file_get_contents将读取整个文件并将其作为字符串返回。非常简单,如果这是你想要做的 - 但你只想要最后五个字符。相反,我们可以编写更多的代码来只读取最后五个字符。我保证,这不会太难!

首先,我们要打开一个文件。这将为我们提供一个文件指针,我们将在后续调用中引用该文件指针(请密切关注它)。以下将以只读模式打开文件- fopen的文档

$fp = fopen('temperaturelog.txt', 'r');

现在,我们有一个文件指针($fp),我们可以使用这个文件。但我们需要知道尺寸。有很多方法可以做到这一点(例如,参见fstat),但最简单的方法可能是使用filesize

$size = filesize('temperaturelog.txt');

所以现在我们知道了文件大小。我们将对名为seek的文件执行操作。想象一下你在文本编辑器中打开文件,我们将把光标移动到结尾前的5个字符 - 文件为fseek

$pos = $size - 5;
fseek($fp, $pos);

现在我们已经在文件中设置了位置,我们可以读到文件的末尾。第二个参数1024指定从文件中读取的字节数。当然我们只会阅读五个,但是我已经将它设置得很高,以演示它在文件末尾的行为 - 有关第二个参数的更多信息,请参阅fread文档

$text = fread($fp, 1024);

现在我们已经存储了最后5个字符$text,并且已经命中了文件的末尾。我们可以倒回文件指针,或者我们可以FSEEK的开始,如果我们真的需要。

一旦完成,最好关闭文件。这允许其他进程立即打开它,而不是等待PHP关闭文件本身 - 文件为fclose

fclose($fp);

在一堆片段中放置,它可能看起来比实际更大,所以让我们将所有这些组合在一起:

// Open and get size
$fp = fopen('temperaturelog.txt', 'r');
$size = filesize('temperaturelog.txt');

// Seek to just before the end
$pos = $size - 5;
fseek($fp, $pos);

// Read and close
$text = fread($fp, 1024);
fclose($fp);

file_get_contents等效:

$size = filesize('temperaturelog.txt');
$file = file_get_contents('temperaturelog.txt');
$text = substr($file, -5);

但是,可以预期的file_get_contents例子少得多的可伸缩性。对于简单的东西,它虽然有效!

用户回答回答于

使用file_get_contents('fileName')fopen('fileName', 'mode'); fread('fileName', length);

第一种方法:

将PHP代码替换为以下内容:

<?php 
$temperature = file_get_contents( "temperaturelog.txt");
$temp = substr($temperature, -5);
print $temp;
?>

你可以file_get_contents()在这里找到更多相关信息:http//php.net/manual/en/function.file-get-contents.php

第二种方法:

<?php 
$fileName = "temperaturelog.txt";
$handle  = fopen($fileName , 'r');
$temperature = fread($handle, filesize($fileName));
$temp = substr($temperature, -5);
print $temp;
?>

而对于第二种方法更多信息:http//php.net/manual/en/function.fopen.php

http://php.net/manual/en/function.fread.php

http://php.net/manual/en/function.filesize.php

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励